From 6e0f75707fecc5a9f89c883d1322e8d30ce07164 Mon Sep 17 00:00:00 2001 From: Ravi Prakash Date: Sun, 26 Dec 2021 14:38:15 +0530 Subject: [PATCH 001/183] Added sample proposal --- docs/images/sample.png | Bin 0 -> 4192 bytes docs/proposals/Sample-proposal.md | 42 ++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 docs/images/sample.png create mode 100644 docs/proposals/Sample-proposal.md diff --git a/docs/images/sample.png b/docs/images/sample.png new file mode 100644 index 0000000000000000000000000000000000000000..97b5266af204621c20598b29853dd5f1fda278d8 GIT binary patch literal 4192 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 RAiOdVaj Date: Sun, 26 Dec 2021 14:43:08 +0530 Subject: [PATCH 002/183] Renamed RFC file naming format --- ...-Draft-01.md => BECKN-001-Layering-Network-Policy-Draft-01.md} | 0 ...etworks.md => BECKN-002-Payments-On-Beckn-Enabled-Networks.md} | 0 ...t-01.md => BECKN-003-Beckn-Protocol-Communication-Draft-01.md} | 0 ... BECKN-004-Policy-Administration-On-Beckn-Enabled-Networks.md} | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename docs/protocol-drafts/{BECKN-RFC-001-Layering-Network-Policy-Draft-01.md => BECKN-001-Layering-Network-Policy-Draft-01.md} (100%) rename docs/protocol-drafts/{BECKN-RFC-002-Payments-On-Beckn-Enabled-Networks.md => BECKN-002-Payments-On-Beckn-Enabled-Networks.md} (100%) rename docs/protocol-drafts/{BECKN-RFC-003-Beckn-Protocol-Communication-Draft-01.md => BECKN-003-Beckn-Protocol-Communication-Draft-01.md} (100%) rename docs/protocol-drafts/{BECKN-RFC-004-Policy-Administration-On-Beckn-Enabled-Networks.md => BECKN-004-Policy-Administration-On-Beckn-Enabled-Networks.md} (100%) diff --git a/docs/protocol-drafts/BECKN-RFC-001-Layering-Network-Policy-Draft-01.md b/docs/protocol-drafts/BECKN-001-Layering-Network-Policy-Draft-01.md similarity index 100% rename from docs/protocol-drafts/BECKN-RFC-001-Layering-Network-Policy-Draft-01.md rename to docs/protocol-drafts/BECKN-001-Layering-Network-Policy-Draft-01.md diff --git a/docs/protocol-drafts/BECKN-RFC-002-Payments-On-Beckn-Enabled-Networks.md b/docs/protocol-drafts/BECKN-002-Payments-On-Beckn-Enabled-Networks.md similarity index 100% rename from docs/protocol-drafts/BECKN-RFC-002-Payments-On-Beckn-Enabled-Networks.md rename to docs/protocol-drafts/BECKN-002-Payments-On-Beckn-Enabled-Networks.md diff --git a/docs/protocol-drafts/BECKN-RFC-003-Beckn-Protocol-Communication-Draft-01.md b/docs/protocol-drafts/BECKN-003-Beckn-Protocol-Communication-Draft-01.md similarity index 100% rename from docs/protocol-drafts/BECKN-RFC-003-Beckn-Protocol-Communication-Draft-01.md rename to docs/protocol-drafts/BECKN-003-Beckn-Protocol-Communication-Draft-01.md diff --git a/docs/protocol-drafts/BECKN-RFC-004-Policy-Administration-On-Beckn-Enabled-Networks.md b/docs/protocol-drafts/BECKN-004-Policy-Administration-On-Beckn-Enabled-Networks.md similarity index 100% rename from docs/protocol-drafts/BECKN-RFC-004-Policy-Administration-On-Beckn-Enabled-Networks.md rename to docs/protocol-drafts/BECKN-004-Policy-Administration-On-Beckn-Enabled-Networks.md From cbd8dfbe9523d5623bede40eacfbfc2dd8915b09 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Thu, 20 Jan 2022 20:38:18 +0530 Subject: [PATCH 003/183] Update core.yaml --- core/v0/api/core.yaml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 09ecdadd..06feabc5 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1330,17 +1330,17 @@ components: type: apiKey in: header name: Authorization - description: 'Signature of message body using BAP or BPP subscriber''s signing public key.

Format:

Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"' + description: 'Signature of message body using BAP or BPP subscriber''s signing public key.

Format:

Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"' GatewaySubscriberAuth: type: apiKey in: header name: Proxy-Authorization - description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:

Proxy-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"

Note:This header will be deprecated soon and will no longer be supported in future releases. New implementors are requested to use the X-Gateway-Authorization header. Existing implementations are requested to migrate their header to the new header. The deprecation date will be set after discussion as per the standard specification governance process.

' + description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:

Proxy-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"

Note:This header will be deprecated soon and will no longer be supported in future releases. New implementors are requested to use the X-Gateway-Authorization header. Existing implementations are requested to migrate their header to the new header. The deprecation date will be set after discussion as per the standard specification governance process.

' GatewaySubscriberAuthNew: type: apiKey in: header name: X-Gateway-Authorization - description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:

X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"' + description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:

X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"' schemas: Ack: description: Describes the ACK response @@ -2194,6 +2194,11 @@ components: - NOT-PAID time: $ref: '#/components/schemas/Time' + collected_by: + type: string + enum: + - BAP + - BPP Person: description: Describes a person. From 9c5330935b06a46cbeb4a12bdf2fd0fdd5a4bb53 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 21 Jan 2022 12:00:12 +0530 Subject: [PATCH 004/183] Update core.yaml --- core/v0/api/core.yaml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 06feabc5..82b09a95 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2194,11 +2194,6 @@ components: - NOT-PAID time: $ref: '#/components/schemas/Time' - collected_by: - type: string - enum: - - BAP - - BPP Person: description: Describes a person. From d7f5cbff7807d11aa778daf7a269714aa3b971a3 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 21 Jan 2022 12:14:59 +0530 Subject: [PATCH 005/183] Update core.yaml --- core/v0/api/core.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 82b09a95..06feabc5 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2194,6 +2194,11 @@ components: - NOT-PAID time: $ref: '#/components/schemas/Time' + collected_by: + type: string + enum: + - BAP + - BPP Person: description: Describes a person. From 3232480f2b8867cd1dff4935a3780e4d89528c8f Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 21 Jan 2022 16:10:48 +0530 Subject: [PATCH 006/183] Update core.yaml --- core/v0/api/core.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 06feabc5..273d8639 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1330,17 +1330,17 @@ components: type: apiKey in: header name: Authorization - description: 'Signature of message body using BAP or BPP subscriber''s signing public key.

Format:

Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"' + description: 'Signature of message body using BAP or BPP subscriber''s signing public key.

Format:

Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"' GatewaySubscriberAuth: type: apiKey in: header name: Proxy-Authorization - description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:

Proxy-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"

Note:This header will be deprecated soon and will no longer be supported in future releases. New implementors are requested to use the X-Gateway-Authorization header. Existing implementations are requested to migrate their header to the new header. The deprecation date will be set after discussion as per the standard specification governance process.

' + description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:

Proxy-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"

Note:This header will be deprecated soon and will no longer be supported in future releases. New implementors are requested to use the X-Gateway-Authorization header. Existing implementations are requested to migrate their header to the new header. The deprecation date will be set after discussion as per the standard specification governance process.

' GatewaySubscriberAuthNew: type: apiKey in: header name: X-Gateway-Authorization - description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:

X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"' + description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:

X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"' schemas: Ack: description: Describes the ACK response From 3fe4c4c5a9ddbdca54acccb5f73a568d37ac0a4f Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 21 Jan 2022 16:15:35 +0530 Subject: [PATCH 007/183] Update core.yaml --- core/v0/api/core.yaml | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 273d8639..82b09a95 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1330,17 +1330,17 @@ components: type: apiKey in: header name: Authorization - description: 'Signature of message body using BAP or BPP subscriber''s signing public key.

Format:

Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"' + description: 'Signature of message body using BAP or BPP subscriber''s signing public key.

Format:

Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"' GatewaySubscriberAuth: type: apiKey in: header name: Proxy-Authorization - description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:

Proxy-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"

Note:This header will be deprecated soon and will no longer be supported in future releases. New implementors are requested to use the X-Gateway-Authorization header. Existing implementations are requested to migrate their header to the new header. The deprecation date will be set after discussion as per the standard specification governance process.

' + description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:

Proxy-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"

Note:This header will be deprecated soon and will no longer be supported in future releases. New implementors are requested to use the X-Gateway-Authorization header. Existing implementations are requested to migrate their header to the new header. The deprecation date will be set after discussion as per the standard specification governance process.

' GatewaySubscriberAuthNew: type: apiKey in: header name: X-Gateway-Authorization - description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:

X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"' + description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:

X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"' schemas: Ack: description: Describes the ACK response @@ -2194,11 +2194,6 @@ components: - NOT-PAID time: $ref: '#/components/schemas/Time' - collected_by: - type: string - enum: - - BAP - - BPP Person: description: Describes a person. From a2e822d16ffa61aac0ac0c48637ac323c4ead6a7 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 21 Jan 2022 16:20:15 +0530 Subject: [PATCH 008/183] Update core.yaml --- core/v0/api/core.yaml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 82b09a95..273d8639 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1330,17 +1330,17 @@ components: type: apiKey in: header name: Authorization - description: 'Signature of message body using BAP or BPP subscriber''s signing public key.

Format:

Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"' + description: 'Signature of message body using BAP or BPP subscriber''s signing public key.

Format:

Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"' GatewaySubscriberAuth: type: apiKey in: header name: Proxy-Authorization - description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:

Proxy-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"

Note:This header will be deprecated soon and will no longer be supported in future releases. New implementors are requested to use the X-Gateway-Authorization header. Existing implementations are requested to migrate their header to the new header. The deprecation date will be set after discussion as per the standard specification governance process.

' + description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:

Proxy-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"

Note:This header will be deprecated soon and will no longer be supported in future releases. New implementors are requested to use the X-Gateway-Authorization header. Existing implementations are requested to migrate their header to the new header. The deprecation date will be set after discussion as per the standard specification governance process.

' GatewaySubscriberAuthNew: type: apiKey in: header name: X-Gateway-Authorization - description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:

X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"' + description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:

X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"' schemas: Ack: description: Describes the ACK response @@ -2194,6 +2194,11 @@ components: - NOT-PAID time: $ref: '#/components/schemas/Time' + collected_by: + type: string + enum: + - BAP + - BPP Person: description: Describes a person. From 83066f191ea420618234a33683dc3a13d048849b Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 21 Jan 2022 16:38:20 +0530 Subject: [PATCH 009/183] Create ERROR_CODES.md --- ERROR_CODES.md | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 ERROR_CODES.md diff --git a/ERROR_CODES.md b/ERROR_CODES.md new file mode 100644 index 00000000..f73ade71 --- /dev/null +++ b/ERROR_CODES.md @@ -0,0 +1,84 @@ +# Error Codes for BPP + +## ID: +BECKN-RFC-034 + +## Draft ID +Draft-01 + +## Title: +Error Codes + +## Category: +Network Policy + +## Status: +Protocol Draft + +## Published on: +January 21, 2022 + +## Expires on: +January 20, 2023 or Date of publication of next draft which ever is earlier + +## License: +CC-BY-ND + +## Authors: +1. Ravi Prakash : ravi@becknfoundation.org + +## Reviewers: +1. Sujith Nair : sujith@becknfoundation.org +2. Pramod Varma : pramod@ekstep.org + +## To Comment +All comments to be sent to comments@beckn.org with the subject line: + +>“CSF034-Draft-02 | ” *(without quotation marks)* + +For example, if you have a comment titled, “What if the payment mode is not supported?”, the Subject line should be, + +>CSF034-Draft-01 | What if the payment mode is not supported? + +## Introduction + This document outlines the error codes which must be returned by a BPP. + + ## Error Codes + |**Code**|**Message**|**Description**| + |---|---|---| + |30000|Invalid request error|Generic invalid request error| + |30001|Provider not found|When BPP is unable to find the provider id sent by the BAP| + |30002|Provider location not found|When BPP is unable to find the provider location id sent by the BAP| + |30003|Provider category not found|When BPP is unable to find the provider category id sent by the BAP| + |30004|Item not found|When BPP is unable to find the item id sent by the BAP| + |30005|Category not found|When BPP is unable to find the category id sent by the BAP| + |30006|Offer not found|When BPP is unable to find the offer id sent by the BAP| + |30007|Add on not found|When the BPP is unable to find the add on id sent by the BAP| + |30008|Fulfillment unavailable|When BPP is unable to find the fulfillment id sent by the BAP| + |30009|Fulfilment provider unavailable|When the BPP is unable to find fulfilment provider id sent by the BAP| + |30010|Order not found|When the BPP is unable to find the order id sent by the BAP| + |30011|Invalid cancellation reason|When the BPP is unable to find the cancellation reason in cancellation_reason_id| + |30012|Invalid update_target|When the BPP is unable to find the update_target in the order object| + |30013|Update inconsistency|When the BPP finds changes in the order object other than the update_target| + |30014|Entity to rate not found|When the BPP is unable to find the entity to rate in id| + |30015|Invalid rating value|When the BPP receives an invalid value as the rating value in value| + |40000|Business Error|Generic business error| + |40001|Action not applicable|When an API endpoint is not implemented by the BPP as it is not required for their use cases and a BAP calls one of these endpoints| + |40002|Item quantity unavailable|When the BPP is unable to select the specified number in order.items[].quantity| + |40003|Quote unavailable|When the quote sent by the BAP is no longer available from the BPP| + |40004|Payment not supported|When the payment object sent by the BAP is not supported by the BPP| + |40005|Tracking not supported|When the BPP does not support tracking for the order in order_id| + |40006|Fulfilment agent unavailable|When an agent for fulfilment is not available| + |50000|Policy Error|Generic Policy Error| + |50001|Cancellation not possible|When the BPP is unable to cancel the order due to it's cancellation policy| + |50002|Updation not possible|When the BPP is unable to update the order due to it's updation policy| + |50003|Unsupported rating category|When the BPP receives an entity to rate which is not supported| + |50004|Support unavailable|When the BPP receives an object if for which it does not provide support| + + ## Acknowledgements + The author would like to thank the following individuals for their contributions in creating the first draft of this document.f (in alphabetical order): + +1. Pramod Varma, Beckn Foundation +2. Sujith Nair, Beckn Foundation + +*Copyright (c) 2022 Beckn Foundation. All rights reserved.* From 521df877c082a74c8c45a4749df0f007df8a2726 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 21 Jan 2022 16:55:45 +0530 Subject: [PATCH 010/183] Delete ERROR_CODES.md --- ERROR_CODES.md | 84 -------------------------------------------------- 1 file changed, 84 deletions(-) delete mode 100644 ERROR_CODES.md diff --git a/ERROR_CODES.md b/ERROR_CODES.md deleted file mode 100644 index f73ade71..00000000 --- a/ERROR_CODES.md +++ /dev/null @@ -1,84 +0,0 @@ -# Error Codes for BPP - -## ID: -BECKN-RFC-034 - -## Draft ID -Draft-01 - -## Title: -Error Codes - -## Category: -Network Policy - -## Status: -Protocol Draft - -## Published on: -January 21, 2022 - -## Expires on: -January 20, 2023 or Date of publication of next draft which ever is earlier - -## License: -CC-BY-ND - -## Authors: -1. Ravi Prakash : ravi@becknfoundation.org - -## Reviewers: -1. Sujith Nair : sujith@becknfoundation.org -2. Pramod Varma : pramod@ekstep.org - -## To Comment -All comments to be sent to comments@beckn.org with the subject line: - ->“CSF034-Draft-02 | <Title of your comment>” *(without quotation marks)* - -For example, if you have a comment titled, “What if the payment mode is not supported?”, the Subject line should be, - ->CSF034-Draft-01 | What if the payment mode is not supported? - -## Introduction - This document outlines the error codes which must be returned by a BPP. - - ## Error Codes - |**Code**|**Message**|**Description**| - |---|---|---| - |30000|Invalid request error|Generic invalid request error| - |30001|Provider not found|When BPP is unable to find the provider id sent by the BAP| - |30002|Provider location not found|When BPP is unable to find the provider location id sent by the BAP| - |30003|Provider category not found|When BPP is unable to find the provider category id sent by the BAP| - |30004|Item not found|When BPP is unable to find the item id sent by the BAP| - |30005|Category not found|When BPP is unable to find the category id sent by the BAP| - |30006|Offer not found|When BPP is unable to find the offer id sent by the BAP| - |30007|Add on not found|When the BPP is unable to find the add on id sent by the BAP| - |30008|Fulfillment unavailable|When BPP is unable to find the fulfillment id sent by the BAP| - |30009|Fulfilment provider unavailable|When the BPP is unable to find fulfilment provider id sent by the BAP| - |30010|Order not found|When the BPP is unable to find the order id sent by the BAP| - |30011|Invalid cancellation reason|When the BPP is unable to find the cancellation reason in cancellation_reason_id| - |30012|Invalid update_target|When the BPP is unable to find the update_target in the order object| - |30013|Update inconsistency|When the BPP finds changes in the order object other than the update_target| - |30014|Entity to rate not found|When the BPP is unable to find the entity to rate in id| - |30015|Invalid rating value|When the BPP receives an invalid value as the rating value in value| - |40000|Business Error|Generic business error| - |40001|Action not applicable|When an API endpoint is not implemented by the BPP as it is not required for their use cases and a BAP calls one of these endpoints| - |40002|Item quantity unavailable|When the BPP is unable to select the specified number in order.items[].quantity| - |40003|Quote unavailable|When the quote sent by the BAP is no longer available from the BPP| - |40004|Payment not supported|When the payment object sent by the BAP is not supported by the BPP| - |40005|Tracking not supported|When the BPP does not support tracking for the order in order_id| - |40006|Fulfilment agent unavailable|When an agent for fulfilment is not available| - |50000|Policy Error|Generic Policy Error| - |50001|Cancellation not possible|When the BPP is unable to cancel the order due to it's cancellation policy| - |50002|Updation not possible|When the BPP is unable to update the order due to it's updation policy| - |50003|Unsupported rating category|When the BPP receives an entity to rate which is not supported| - |50004|Support unavailable|When the BPP receives an object if for which it does not provide support| - - ## Acknowledgements - The author would like to thank the following individuals for their contributions in creating the first draft of this document.f (in alphabetical order): - -1. Pramod Varma, Beckn Foundation -2. Sujith Nair, Beckn Foundation - -*Copyright (c) 2022 Beckn Foundation. All rights reserved.* From a8e1e2dfbd82cca3581eab7d390ea6fc4506c1c2 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 21 Jan 2022 17:07:01 +0530 Subject: [PATCH 011/183] Update core.yaml --- core/v0/api/core.yaml | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 273d8639..82b09a95 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1330,17 +1330,17 @@ components: type: apiKey in: header name: Authorization - description: 'Signature of message body using BAP or BPP subscriber''s signing public key. <br/><br/>Format:<br/><br/><code>Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"</code>' + description: 'Signature of message body using BAP or BPP subscriber''s signing public key. <br/><br/>Format:<br/><br/><code>Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code>' GatewaySubscriberAuth: type: apiKey in: header name: Proxy-Authorization - description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>Proxy-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"</code><p><b>Note:</b>This header will be deprecated soon and will no longer be supported in future releases. New implementors are requested to use the X-Gateway-Authorization header. Existing implementations are requested to migrate their header to the new header. The deprecation date will be set after discussion as per the standard specification governance process.</p>' + description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>Proxy-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code><p><b>Note:</b>This header will be deprecated soon and will no longer be supported in future releases. New implementors are requested to use the X-Gateway-Authorization header. Existing implementations are requested to migrate their header to the new header. The deprecation date will be set after discussion as per the standard specification governance process.</p>' GatewaySubscriberAuthNew: type: apiKey in: header name: X-Gateway-Authorization - description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"</code>' + description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code>' schemas: Ack: description: Describes the ACK response @@ -2194,11 +2194,6 @@ components: - NOT-PAID time: $ref: '#/components/schemas/Time' - collected_by: - type: string - enum: - - BAP - - BPP Person: description: Describes a person. From 0973811ed2c7a401415a7532fb1dc7b933ce999b Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Sat, 22 Jan 2022 16:36:42 +0530 Subject: [PATCH 012/183] Create ERROR --- ERROR | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 ERROR diff --git a/ERROR b/ERROR new file mode 100644 index 00000000..10d9a60b --- /dev/null +++ b/ERROR @@ -0,0 +1,76 @@ +# Error Codes for BPP + +## ID: +BECKN-RFC-034 + +## Draft ID +Draft-01 + +## Title: +Error Codes + +## Category: +Network Policy + +## Status: +Protocol Draft + +## Published on: +January 21, 2022 + +## Expires on: +January 20, 2023 or Date of publication of next draft which ever is earlier + +## License: +CC-BY-ND + +## Authors: +1. Ravi Prakash : ravi@becknfoundation.org + +## Reviewers: +1. Sujith Nair : sujith@becknfoundation.org +2. Pramod Varma : pramod@ekstep.org + +## Introduction + This document outlines the error codes which must be returned by a BPP. + + ## Error Codes + |**Code**|**Message**|**Description**| + |---|---|---| + |30000|Invalid request error|Generic invalid request error| + |30001|Provider not found|When BPP is unable to find the provider id sent by the BAP| + |30002|Provider location not found|When BPP is unable to find the provider location id sent by the BAP| + |30003|Provider category not found|When BPP is unable to find the provider category id sent by the BAP| + |30004|Item not found|When BPP is unable to find the item id sent by the BAP| + |30005|Category not found|When BPP is unable to find the category id sent by the BAP| + |30006|Offer not found|When BPP is unable to find the offer id sent by the BAP| + |30007|Add on not found|When the BPP is unable to find the add on id sent by the BAP| + |30008|Fulfillment unavailable|When BPP is unable to find the fulfillment id sent by the BAP| + |30009|Fulfilment provider unavailable|When the BPP is unable to find fulfilment provider id sent by the BAP| + |30010|Order not found|When the BPP is unable to find the order id sent by the BAP| + |30011|Invalid cancellation reason|When the BPP is unable to find the cancellation reason in cancellation_reason_id| + |30012|Invalid update_target|When the BPP is unable to find the update_target in the order object| + |30013|Update inconsistency|When the BPP finds changes in the order object other than the update_target| + |30014|Entity to rate not found|When the BPP is unable to find the entity to rate in id| + |30015|Invalid rating value|When the BPP receives an invalid value as the rating value in value| + |40000|Business Error|Generic business error| + |40001|Action not applicable|When an API endpoint is not implemented by the BPP as it is not required for their use cases and a BAP calls one of these endpoints| + |40002|Item quantity unavailable|When the BPP is unable to select the specified number in order.items[].quantity| + |40003|Quote unavailable|When the quote sent by the BAP is no longer available from the BPP| + |40004|Payment not supported|When the payment object sent by the BAP is not supported by the BPP| + |40005|Tracking not supported|When the BPP does not support tracking for the order in order_id| + |40006|Fulfilment agent unavailable|When an agent for fulfilment is not available| + |50000|Policy Error|Generic Policy Error| + |50001|Cancellation not possible|When the BPP is unable to cancel the order due to it's cancellation policy| + |50002|Updation not possible|When the BPP is unable to update the order due to it's updation policy| + |50003|Unsupported rating category|When the BPP receives an entity to rate which is not supported| + |50004|Support unavailable|When the BPP receives an object if for which it does not provide support| + + ## Acknowledgements + The author would like to thank the following individuals for their contributions in creating the first draft of this document (in alphabetical order): + +1. Pramod Varma, Beckn Foundation +2. Sujith Nair, Beckn Foundation +3. Supriyo Ghosh, ONDC + +*Copyright (c) 2022 Beckn Foundation. All rights reserved.* From eb24af1d3c1887f652ca88e9c00ff5c8c96e4397 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Sat, 22 Jan 2022 16:38:10 +0530 Subject: [PATCH 013/183] Rename ERROR to ERROR_CODES.md --- ERROR => ERROR_CODES.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename ERROR => ERROR_CODES.md (100%) diff --git a/ERROR b/ERROR_CODES.md similarity index 100% rename from ERROR rename to ERROR_CODES.md From 310a95176875bfd65c2464875e5403a7a688f3cb Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Tue, 25 Jan 2022 11:49:24 +0530 Subject: [PATCH 014/183] Create BECKN-RFC-005-Error-Codes-Draft-01.md --- .../BECKN-RFC-005-Error-Codes-Draft-01.md | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 docs/protocol-drafts/BECKN-RFC-005-Error-Codes-Draft-01.md diff --git a/docs/protocol-drafts/BECKN-RFC-005-Error-Codes-Draft-01.md b/docs/protocol-drafts/BECKN-RFC-005-Error-Codes-Draft-01.md new file mode 100644 index 00000000..10d9a60b --- /dev/null +++ b/docs/protocol-drafts/BECKN-RFC-005-Error-Codes-Draft-01.md @@ -0,0 +1,76 @@ +# Error Codes for BPP + +## ID: +BECKN-RFC-034 + +## Draft ID +Draft-01 + +## Title: +Error Codes + +## Category: +Network Policy + +## Status: +Protocol Draft + +## Published on: +January 21, 2022 + +## Expires on: +January 20, 2023 or Date of publication of next draft which ever is earlier + +## License: +CC-BY-ND + +## Authors: +1. Ravi Prakash : ravi@becknfoundation.org + +## Reviewers: +1. Sujith Nair : sujith@becknfoundation.org +2. Pramod Varma : pramod@ekstep.org + +## Introduction + This document outlines the error codes which must be returned by a BPP. + + ## Error Codes + |**Code**|**Message**|**Description**| + |---|---|---| + |30000|Invalid request error|Generic invalid request error| + |30001|Provider not found|When BPP is unable to find the provider id sent by the BAP| + |30002|Provider location not found|When BPP is unable to find the provider location id sent by the BAP| + |30003|Provider category not found|When BPP is unable to find the provider category id sent by the BAP| + |30004|Item not found|When BPP is unable to find the item id sent by the BAP| + |30005|Category not found|When BPP is unable to find the category id sent by the BAP| + |30006|Offer not found|When BPP is unable to find the offer id sent by the BAP| + |30007|Add on not found|When the BPP is unable to find the add on id sent by the BAP| + |30008|Fulfillment unavailable|When BPP is unable to find the fulfillment id sent by the BAP| + |30009|Fulfilment provider unavailable|When the BPP is unable to find fulfilment provider id sent by the BAP| + |30010|Order not found|When the BPP is unable to find the order id sent by the BAP| + |30011|Invalid cancellation reason|When the BPP is unable to find the cancellation reason in cancellation_reason_id| + |30012|Invalid update_target|When the BPP is unable to find the update_target in the order object| + |30013|Update inconsistency|When the BPP finds changes in the order object other than the update_target| + |30014|Entity to rate not found|When the BPP is unable to find the entity to rate in id| + |30015|Invalid rating value|When the BPP receives an invalid value as the rating value in value| + |40000|Business Error|Generic business error| + |40001|Action not applicable|When an API endpoint is not implemented by the BPP as it is not required for their use cases and a BAP calls one of these endpoints| + |40002|Item quantity unavailable|When the BPP is unable to select the specified number in order.items[].quantity| + |40003|Quote unavailable|When the quote sent by the BAP is no longer available from the BPP| + |40004|Payment not supported|When the payment object sent by the BAP is not supported by the BPP| + |40005|Tracking not supported|When the BPP does not support tracking for the order in order_id| + |40006|Fulfilment agent unavailable|When an agent for fulfilment is not available| + |50000|Policy Error|Generic Policy Error| + |50001|Cancellation not possible|When the BPP is unable to cancel the order due to it's cancellation policy| + |50002|Updation not possible|When the BPP is unable to update the order due to it's updation policy| + |50003|Unsupported rating category|When the BPP receives an entity to rate which is not supported| + |50004|Support unavailable|When the BPP receives an object if for which it does not provide support| + + ## Acknowledgements + The author would like to thank the following individuals for their contributions in creating the first draft of this document (in alphabetical order): + +1. Pramod Varma, Beckn Foundation +2. Sujith Nair, Beckn Foundation +3. Supriyo Ghosh, ONDC + +*Copyright (c) 2022 Beckn Foundation. All rights reserved.* From bdb07804a2cd045bf697904295069f63e4e634c1 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Tue, 25 Jan 2022 11:50:28 +0530 Subject: [PATCH 015/183] Delete ERROR_CODES.md --- ERROR_CODES.md | 76 -------------------------------------------------- 1 file changed, 76 deletions(-) delete mode 100644 ERROR_CODES.md diff --git a/ERROR_CODES.md b/ERROR_CODES.md deleted file mode 100644 index 10d9a60b..00000000 --- a/ERROR_CODES.md +++ /dev/null @@ -1,76 +0,0 @@ -# Error Codes for BPP - -## ID: -BECKN-RFC-034 - -## Draft ID -Draft-01 - -## Title: -Error Codes - -## Category: -Network Policy - -## Status: -Protocol Draft - -## Published on: -January 21, 2022 - -## Expires on: -January 20, 2023 or Date of publication of next draft which ever is earlier - -## License: -CC-BY-ND - -## Authors: -1. Ravi Prakash : ravi@becknfoundation.org - -## Reviewers: -1. Sujith Nair : sujith@becknfoundation.org -2. Pramod Varma : pramod@ekstep.org - -## Introduction - This document outlines the error codes which must be returned by a BPP. - - ## Error Codes - |**Code**|**Message**|**Description**| - |---|---|---| - |30000|Invalid request error|Generic invalid request error| - |30001|Provider not found|When BPP is unable to find the provider id sent by the BAP| - |30002|Provider location not found|When BPP is unable to find the provider location id sent by the BAP| - |30003|Provider category not found|When BPP is unable to find the provider category id sent by the BAP| - |30004|Item not found|When BPP is unable to find the item id sent by the BAP| - |30005|Category not found|When BPP is unable to find the category id sent by the BAP| - |30006|Offer not found|When BPP is unable to find the offer id sent by the BAP| - |30007|Add on not found|When the BPP is unable to find the add on id sent by the BAP| - |30008|Fulfillment unavailable|When BPP is unable to find the fulfillment id sent by the BAP| - |30009|Fulfilment provider unavailable|When the BPP is unable to find fulfilment provider id sent by the BAP| - |30010|Order not found|When the BPP is unable to find the order id sent by the BAP| - |30011|Invalid cancellation reason|When the BPP is unable to find the cancellation reason in cancellation_reason_id| - |30012|Invalid update_target|When the BPP is unable to find the update_target in the order object| - |30013|Update inconsistency|When the BPP finds changes in the order object other than the update_target| - |30014|Entity to rate not found|When the BPP is unable to find the entity to rate in id| - |30015|Invalid rating value|When the BPP receives an invalid value as the rating value in value| - |40000|Business Error|Generic business error| - |40001|Action not applicable|When an API endpoint is not implemented by the BPP as it is not required for their use cases and a BAP calls one of these endpoints| - |40002|Item quantity unavailable|When the BPP is unable to select the specified number in order.items[].quantity| - |40003|Quote unavailable|When the quote sent by the BAP is no longer available from the BPP| - |40004|Payment not supported|When the payment object sent by the BAP is not supported by the BPP| - |40005|Tracking not supported|When the BPP does not support tracking for the order in order_id| - |40006|Fulfilment agent unavailable|When an agent for fulfilment is not available| - |50000|Policy Error|Generic Policy Error| - |50001|Cancellation not possible|When the BPP is unable to cancel the order due to it's cancellation policy| - |50002|Updation not possible|When the BPP is unable to update the order due to it's updation policy| - |50003|Unsupported rating category|When the BPP receives an entity to rate which is not supported| - |50004|Support unavailable|When the BPP receives an object if for which it does not provide support| - - ## Acknowledgements - The author would like to thank the following individuals for their contributions in creating the first draft of this document (in alphabetical order): - -1. Pramod Varma, Beckn Foundation -2. Sujith Nair, Beckn Foundation -3. Supriyo Ghosh, ONDC - -*Copyright (c) 2022 Beckn Foundation. All rights reserved.* From d0a1f4a549348f1a82a5687f3413d0344096c4d4 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Tue, 25 Jan 2022 11:58:09 +0530 Subject: [PATCH 016/183] Update core.yaml --- core/v0/api/core.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 09ecdadd..1a51a925 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1725,7 +1725,7 @@ components: - JSON-SCHEMA-ERROR code: type: string - description: 'Beckn specific error code. For full list of error codes, refer to error_codes.md in the root folder of this repo' + description: 'Beckn specific error code. For full list of error codes, refer to docs/protocol-drafts/BECKN-RFC-005-ERROR-CODES-DRAFT-01.md of this repo' path: type: string description: Path to json schema generating the error. Used only during json schema validation errors From 4b9b4582ef018600ce82ffcb2b9bd20b904ca0bd Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Tue, 25 Jan 2022 13:05:31 +0530 Subject: [PATCH 017/183] Create BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md --- ...006-Signing-Beckn-APIs-In-HTTP-Draft-01.md | 409 ++++++++++++++++++ 1 file changed, 409 insertions(+) create mode 100644 docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md diff --git a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md new file mode 100644 index 00000000..7fe08765 --- /dev/null +++ b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md @@ -0,0 +1,409 @@ +# Signing Beckn APIs in HTTP +## Introduction +When communicating over HTTP using Beckn APIs, the subscribers need to authenticate themselves to perform transactions with other subscribers. Due to the commercial nature of the transactions, every request/callback pair is considered to be a "contract" between two parties. Therefore, it is imperative that all requests and callbacks are digitally signed by the sender and subsequently verified by the receiver. +Furthermore, it is also desirable to ensure that the message was not altered or tampered with during transit. +This document describes a way for network subscribers (BAP/BPPs) and proxy subscribers (BGs) to simultaneously add authentication and message integrity to HTTP messages by using digital signatures. How the signatures are generated and the format of those signatures is out of scope of this document and can be found in this IETF document - [Signing HTTP Messages](https://tools.ietf.org/id/draft-cavage-http-signatures-12.html) +This document specifies the algorithms used in generating the keys, how to construct the signing strings being passed in the headers. Also, it specifies clearly the format of the HTTP headers used for authenticating BAP, BPPs and BGs. + +## Subscriber Authentication +The BAP and BPP subscriber is expected to send an Authorization header (as defined in [RFC 7235](https://tools.ietf.org/id/draft-cavage-http-signatures-12.html#RFC7235), [Section 4.1](https://tools.ietf.org/html/rfc7235#section-2.1)) where the "auth-scheme" is "Signature" and the "auth-param" parameters meet the requirements listed in Section 2 of [this](https://tools.ietf.org/id/draft-cavage-http-signatures-12.html) document. +The BG subscriber is expected to send a X-Gateway-Authorization header where the "auth-scheme" is "Signature" and the "auth-param" parameters meet the requirements listed in Section 2 of [this](https://tools.ietf.org/id/draft-cavage-http-signatures-12.html) document. + +Below is the format of a BAP/BPP Authorization header in the typical HTTP Signature format: + +`Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(ed25519_sign(signing string))"` + + +The BG will send its signature in the X-Gateway-Authorization header in the exact same format as shown below. + +`X-Gateway-Authorization:Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}" algorithm="ed25519" created="1606970629" expires="1607030629" headers="(created) (expires) digest" signature="Base64(ed25519_sign(signing string))"` + +## Hashing Algorithm +For computing the digest of the request body, the hashing function will use the BLAKE-512 (2b) hashing algorithm. BLAKE is a cryptographic hash function based on Dan Bernstein's ChaCha stream cipher. For more documentation on the BLAKE-512(2b) algorithm, please go to [RFC7693](https://tools.ietf.org/html/rfc7693). + +Example of [hash](https://en.wikipedia.org/wiki/BLAKE_(hash_function)#BLAKE2b_algorithm) : + +`BLAKE2b-512("The quick brown fox jumps over the lazy dog") = +a8add4bdddfd93e4877d2746e62817b116364a1fa7bc148d95090bc7333b3673f82401cf7aa2e4cb1ecd90296e3f14cb5413f8ed77be73045b13914cdcd6a918` + +The above hex value encoded in base64 is as below : + +`qK3Uvd39k+SHfSdG5igXsRY2Sh+nvBSNlQkLxzM7NnP4JAHPeqLkyx7NkCluPxTLVBP47Xe+cwRbE5FM3NapGA==` + +## Signing Algorithm +To digitally sign the singing string, the subscribers should use the "ed25519" signature scheme. + +### Example Flow (BAP <=> BG <=> BPP) + +### Step 1 : BAP signs request and calls BG +Let the below be the request body in this example : + +`{"context":{"domain":"nic2004:60212","country":"IND","city":"Kochi","action":"search","core_version":"0.9.1","bap_id":"bap.stayhalo.in","bap_uri":"https://8f9f-49-207-209-131.ngrok.io/protocol/","transaction_id":"e6d9f908-1d26-4ff3-a6d1-3af3d3721054","message_id":"a2fe6d52-9fe4-4d1a-9d0b-dccb8b48522d","timestamp":"2022-01-04T09:17:55.971Z","ttl":"P1M"},"message":{"intent":{"fulfillment":{"start":{"location":{"gps":"10.108768, 76.347517"}},"end":{"location":{"gps":"10.102997, 76.353480"}}}}}}` + +Let BAP’s keys be : + +`signing_public_key=awGPjRK6i/Vg/lWr+0xObclVxlwZXvTjWYtlu6NeOHk= +signing_private_key=lP3sHA+9gileOkXYJXh4Jg8tK0gEEMbf9yCPnFpbldhrAY+NErqL9WD+Vav7TE5tyVXGXBle9ONZi2W7o144eQ==` + +The BAP performs the following steps to create the Authorization header +1. Generate the digest of the request body using the BLAKE-512 hashing function + +`b6lf6lRgOweajukcvcLsagQ2T60+85kRh/Rd2bdS+TG/5ALebOEgDJfyCrre/1+BMu5nA94o4DT3pTFXuUg7sw==` + +2. Generate the created field. The `created` field expresses when the signature was created. The value MUST be a Unix timestamp integer value. A signature with a `created` timestamp value that is in the future MUST NOT be processed. + +`(created): 1641287875` + +3. Generate the expires field. The `expires` field expresses when the signature ceases to be valid. The value MUST be a Unix timestamp integer value. A signature with an `expires` timestamp value that is in the past MUST NOT be processed. + +`(expires): 1641291475` + +4. Concatenate the three values, i.e the `created`, `expires` and `digest` in the format as shown below. The below string is the signing string which the BAP is going to use to sign the request + +`(created): 1641287875 +(expires): 1641291475 +digest: BLAKE-512=b6lf6lRgOweajukcvcLsagQ2T60+85kRh/Rd2bdS+TG/5ALebOEgDJfyCrre/1+BMu5nA94o4DT3pTFXuUg7sw==` + +5. The BAP will then sign this string using it's registered signing private key via the Ed25519 Signature Scheme + +7. Finally the BAP will generate a base64 encoded string of the signature and insert it into the signature parameter of the Authorization header + +`cjbhP0PFyrlSCNszJM1F/YmHDVAWsZqJUPzojnE/7TJU3fJ/rmIlgaUHEr5E0/2PIyf0tpSnWtT6cyNNlpmoAQ==` + +7. Finally the Authorization header will look like this. (Let's assume subscriber_id = example-bap.com, unique_key_id = bap1234) + +`Signature keyId="example-bap.com|bap1234|ed25519",algorithm="ed25519",created="1641287875",expires="1641291475",headers="(created) (expires) digest",signature="cjbhP0PFyrlSCNszJM1F/YmHDVAWsZqJUPzojnE/7TJU3fJ/rmIlgaUHEr5E0/2PIyf0tpSnWtT6cyNNlpmoAQ=="` + +8. Finally the BAP includes the Authorization header in the request and calls the BG API + + +**Note:** +1. The difference between the `created` and the `expires` field should be equal to the TTL of the request context. +2. Also, the `expires` value should not be more than the expiration time of the key used for signing the request. If the expires value appears to be going beyond the lifespan of the signing key, generate a new key and update it on the registry OR use an existing registered key with an expiry time greater than the `expires` value of the signature. + + + +### Step 2 : BG verifies BAP signature +The BG performs the following steps to authenticate the BAP and also ensure message integrity. + +1. BG gets keyId from the Authorization header + +`example-bap.com|bap1234|ed25519` + +2. BG splits the keyId string into subscriber ID, Unique Key ID and algorithm using the delimiter "|". +3. The keyId uses the format {subscriber id}|{unique_key_id}|{signing algorithm} . If the signing algorithm extracted from the keyId does not match the value of the algorithm parameter in the Authorization header, then the BG should return an 401 unauthorised error. +4. The keyId also contains a unique_key_id which is used when the BAP has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple types of subscribers +5. The BG will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id.It will receive the public key of the BAP : + +`awGPjRK6i/Vg/lWr+0xObclVxlwZXvTjWYtlu6NeOHk=` + +6. If no valid key is found, the BPP must return a NACK response with 401 Unauthorised response code. +7. BG will use the BAP's public key to verify the signature. If signature is verified, the BAP is considered to be authenticated. If not BG should return a 401 error +8. If the signature is not verified, the BG must return a NACK response with 401 Unauthorised response code with a WWW-Authenticate header. For example, for an invalid signature, the BG must return the following: + +**Headers:** + +HTTP/1.1 401 Unauthorized + +WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) digest" + +... + +**Request Body:** + +{ + + "message": { + + "ack": { + + "status": "NACK" + + } + + } + +} + + + +### Step 3 : BG signs request before forwarding request to BPP +Let the BG’s keys be : + +`signing_public_key=7YRZXVeIJ0/Va56vYgzT1Uirg6mnq3FY0MBZY9DJft0= +signing_private_key=hJ5sCmbe7s9Wateq6QAdBGloVSkLuLHWOXcRkzrMcVLthFldV4gnT9Vrnq9iDNPVSKuDqaercVjQwFlj0Ml+3Q==` + +Before forwarding the request to the BPP, the BG performs the following steps to create the X-Gateway-Authorization header. + +1. Generate the digest of the request body using the BLAKE-512 hashing function + +`b6lf6lRgOweajukcvcLsagQ2T60+85kRh/Rd2bdS+TG/5ALebOEgDJfyCrre/1+BMu5nA94o4DT3pTFXuUg7sw==` + +2. Generate the `created` field. The `created` field expresses when the signature was created. The value MUST be a Unix timestamp integer value. A signature with a `created` timestamp value that is in the future MUST NOT be processed. + +`(created): 1641287885` + +3. Generate the `expires` field. The `expires` field expresses when the signature ceases to be valid. The value MUST be a Unix timestamp integer value. A signature with an `expires` timestamp value that is in the past MUST NOT be processed. + +`(expires): 1641291485` + +4. Concatenate the three values, i.e the `created`, `expires` and `digest` in the format as shown below. The below string is the signing string which the BG is going to use to sign the request + +`(created): 1641287885 +(expires): 1641291485 +digest: BLAKE-512=b6lf6lRgOweajukcvcLsagQ2T60+85kRh/Rd2bdS+TG/5ALebOEgDJfyCrre/1+BMu5nA94o4DT3pTFXuUg7sw==` + +5. The BG will then sign this string using it's registered signing private key via the Ed25519 Signature Scheme +6. Finally the BG will generate a base64 encoded string of the signature and insert it into the signature parameter of the X-Gateway-Authorization header + +`hJ5sCmbe7s9Wateq6QAdBGloVSkLuLHWOXcRkzrMcVLthFldV4gnT9Vrnq9iDNPVSKuDqaercVjQwFlj0Ml+3Q==` + +7. Finally the X-Gateway-Authorization header will look like this. (Let's assume subscriber_id = example-bg.com, unique_key_id = bg3456) + +`Signature keyId="example-bg.com|bg3456|ed25519",algorithm="ed25519",created="1641287885",expires="1641287885",headers="(created) (expires) digest",signature="hJ5sCmbe7s9Wateq6QAdBGloVSkLuLHWOXcRkzrMcVLthFldV4gnT9Vrnq9iDNPVSKuDqaercVjQwFlj0Ml+3Q=="` + +8. Finally the BG includes the X-Gateway-Authorization header in the request and calls the BPP search API + +**Note:** +3. The difference between the `created` and the `expires` field should be equal to the TTL of the request. +4. Also, the `expires` value should not be more than the expiration time of the key used for signing the request. If the expires value appears to be going beyond the lifespan of the signing key, generate a new key and update it on the registry via subscribe API OR use an existing registered key with an expiry time greater than the `expires` value of the signature + + + +### Step 4 : BPP verifies BG signature +The BPP performs the following steps to authenticate the BAP and the BG and also ensure message integrity. + +1. Get keyId from the X-Gateway-Authorization header + +`example-bg.com|bg3456|ed25519` + +2. Split the keyID string using the delimiter `|`. As we know, the subscriber ID is the registered domain name of the subscriber and follows the format{subdomain}.{domain}.{extension}. +3. The keyID uses the format {subscriber id}|{unique_public_key_id}|{signing algorithm} . If the signing algorithm extracted from the keyId does not match the value of the algorithm field in the X-Gateway-Authorization header, then the BPP should return an error. +4. The keyID also contains a unique_public_key_id which is used when the BG has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple subscribers +5. The BG will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id. It will get the BG’s public key : + +`The BG will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id. It will get the BG’s public key :` + +`If no valid key is found, the BPP must return a NACK response with 401 Unauthorised response code.` + +6. If no valid key is found, the BPP must return a NACK response with 401 Unauthorised response code. +7. BPP will use the BG's public key to verify the signature. If the signature is verified, the BG is considered to be authenticated. +8. If the signature is not verified, the BPP must return a NACK response with 401 Unauthorised response code with a Proxy-Authenticate header. For example, for an invalid BG signature, the BPP must return the following: + +**Headers:** + +HTTP/1.1 401 Unauthorized + +Proxy-Authenticate: Signature realm="example-bpp.com",headers="(created) (expires) digest" + +... + +**Request Body:** + +{ + + "message": { + + "ack": { + + "status": "NACK" + + } + + } + +} + + + +### Step 5 : BPP verifies BAP signature +The BPP performs the following steps to authenticate the BAP and also ensure message integrity during transit. + +1. BPP gets keyId from the Authorization header +2. BPP splits the keyID string using the delimiter `|`. +3. The keyID uses the format {subscriber id}|{unique_key_id}|{signing algorithm} . If the signing algorithm extracted from the keyId does not match the value of the algorithm field in the Authorization header, then the BPP should return an error. +4. The keyId also contains a unique_public_key_id which is used when the BAP has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple types of subscribers +5. The BPP will now look up the registry for the public key of the BAP by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the BAP's public key matching the subscriber_id and unique_key_id. +6. BG will use the BAP's public key to verify the signature. If signature is verified, the BAP is considered to be authenticated. If not BG should return a 401 error +7. If the signature is not verified, the BG must return a NACK response with 401 Unauthorised response code with a WWW-Authenticate header. For example, for an invalid signature, the BPP must return the following: + +**Headers** + +HTTP/1.1 401 Unauthorized + +WWW-Authenticate: Signature realm="example-bpp.com",headers="(created) (expires) digest" + +... + +**Request Body** + +{ + + "message": { + + "ack": { + + "status": "NACK" + + } + + } + +} + + + +### Step 6 : BPP signs callback and calls BG +The BPP performs the following steps to create the Authorization header + +1. Generate the digest of the request body using the BLAKE-512 hashing function +2. Generate the created field. The `created` field expresses when the signature was created. The value MUST be a Unix timestamp integer value. A signature with a `created` timestamp value that is in the future MUST NOT be processed. +3. Generate the expires field. The `expires` field expresses when the signature ceases to be valid. The value MUST be a Unix timestamp integer value. A signature with an `expires` timestamp value that is in the past MUST NOT be processed. +4. Concatenate the three values, i.e the `created`, `expires` and `digest` in the format as shown below. The below string is the signing string which the BPP is going to use to sign the request + +`(created): 1402170695 +(expires): 1402170995 +digest: BLAKE-512=X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=` + +5. Sign this string using it's registered signing private key via the ed25519 Signature Scheme +6. Generate a base64 encoded string of the signature and insert it into the signature parameter of the Authorization header +7. The final Authorization header will look like this. (Let's assume subscriber_id = example-bpp.com, unique_key_id = bpp5678) + +`Signature keyId="example-bpp.com|bpp5678|ed25519",algorithm="ed25519",created="1641287885",expires="1641287885",headers="(created) (expires) digest",signature="hJ5sCmbe7s9Wateq6QAdBGloVSkLuLHWOXcRkzrMcVLthFldV4gnT9Vrnq9iDNPVSKuDqaercVjQwFlj0Ml+3Q=="` + +9. Finally the BPP includes the Authorization header in the request and calls the BG API + + + +### Step 7 : BG verifies BPP signature +The BG performs the following steps to authenticate the BPP and also ensure message integrity. + +1. BG gets keyId from the Authorization header +2. BG splits the keyId string into subscriber ID, Unique Key ID and algorithm using the delimiter "|". +3. The keyId uses the format {subscriber id}|{unique_key_id}|{signing algorithm} . If the signing algorithm extracted from the keyId does not match the value of the algorithm parameter in the Authorization header, then the BG should return an 401 unauthorised error. +4. The keyId also contains a unique_key_id which is used when the BPP has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple types of subscribers +5. The BG will now look up the registry for the public key of the BPP by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the BPP's public key matching the subscriber_id and unique_key_id +6. BG will use the BPP's public key to verify the signature. If signature is verified, the BPP is considered to be authenticated. If not BG should return a 401 error +7. If the signature is not verified, the BG must return a NACK response with 401 Unauthorised response code with a WWW-Authenticate header. For example, for an invalid signature, the BG must return the following: + +**Headers** + +HTTP/1.1 401 Unauthorized + +WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) digest" + +... + +**Request Body** + +{ + + "message": { + + "ack": { + + "status": "NACK" + + } + + } + +} + + +### Step 8 : BG signs callback before calling BAP +Before forwarding the request to the BAP, the BG performs the following steps to create the X-Gateway-Authorization header + +1. Generate the digest of the request body using the BLAKE-512 hashing function +2. Generate the `created` field. The `created` field expresses when the signature was created. The value MUST be a Unix timestamp integer value. A signature with a `created` timestamp value that is in the future MUST NOT be processed. +3. Generate the `expires` field. The `expires` field expresses when the signature ceases to be valid. The value MUST be a Unix timestamp integer value. A signature with an `expires` timestamp value that is in the past MUST NOT be processed. +4. Concatenate the three values, i.e the `created`, `expires` and `digest` in the format as shown below. The below string is the signing string which the BG is going to use to sign the request + +`(created): 1402170695 + +(expires): 1402170995 + +digest: BLAKE-512=X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=` + +5. The BG will then sign this string using it's registered signing private key via the ed25519 Signature Scheme +6. Finally the BG will generate a base64 encoded string of the signature and insert it into the signature parameter of the X-Gateway-Authorization header +7. Finally the X-Gateway-Authorization header will look like this. (Let's assume subscriber_id = example-bg.com, unique_key_id = bg3456) + +`Signature keyId="example-bg.com|bg3456|ed25519",algorithm="ed25519",created="1641287885",expires="1641287885",headers="(created) (expires) digest",signature="hJ5sCmbe7s9Wateq6QAdBGloVSkLuLHWOXcRkzrMcVLthFldV4gnT9Vrnq9iDNPVSKuDqaercVjQwFlj0Ml+3Q=="` + +9. Finally the BG includes the X-Gateway-Authorization header in the request and calls the BAP API + +**Note:** + +1. The difference between the `created` and the `expires` field should be equal to the TTL of the request. +2. Also, the `expires` value should not be more than the expiration time of the key used for signing the request. If the expires value appears to be going beyond the lifespan of the signing key, generate a new key and update it on the registry via subscribe API OR use an existing registered key with an expiry time greater than the `expires` value of the signature + + +### Step 9 : BAP verifies BG signature +The BAP performs the following steps to authenticate the BAP and the BG and also ensure message integrity. + +8. Get keyId from the X-Gateway-Authorization header +9. Split the keyID string using the delimiter `|`. +10. The keyID uses the format {subscriber id}|{unique_public_key_id}|{signing algorithm} . If the signing algorithm extracted from the keyId does not match the value of the algorithm field in the X-Gateway-Authorization header, then the BPP should return an error. +11. The keyID also contains a unique_public_key_id which is used when the BG has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple subscribers +12. The BAP will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id. If no valid key is found, the BPP must return +13. BPP will use the BG's public key to verify the signature. If signature is verified, the BG is considered to be authenticated. +14. If the signature is not verified, the BPP must return a NACK response with 401 Unauthorised response code with a Proxy-Authenticate header. For example, for an invalid BG signature, the BAP must return the following: + +**Headers** + +HTTP/1.1 401 Unauthorized + +/Proxy-Authenticate: Signature realm="example-bap.com",headers="(created) (expires) digest" + +... + +**Request Body** + +{ + + "message": { + + "ack": { + + "status": "NACK" + + } + + } + +} + + +### Step 10 : BAP verifies BPP signature +The BAP performs the following steps to authenticate the BAP and also ensure message integrity during transit. + +1. BAP gets keyId from the Authorization header +2. BAP splits the keyID string using the delimiter `|`. +3. The keyID uses the format {subscriber id}|{unique_public_key_id}|{signing algorithm} . If the signing algorithm extracted from the keyId does not match the value of the algorithm field in the Authorization header, then the BAP should return an error. +4. The keyId also contains a unique_public_key_id which is used when the BPP has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple types of subscribers +5. The BAP will now look up the registry for the public key of the BPP by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the BPP's public key matching the subscriber_id and unique_key_id +6. BAP will use the BPP's public key to verify the signature. If signature is verified, the BPP is considered to be authenticated. +7. If the signature is not verified, the BAP must return a NACK response with 401 Unauthorised response code with a WWW-Authenticate header. For example, for an invalid BPP signature, the BAP must return the following: + +**Headers** + +HTTP/1.1 401 Unauthorized + +WWW-Authenticate: Signature realm="example-bap.com",headers="(created) (expires) digest" + +... + + +**Request Body:** + +{ + + "message": { + + "ack": { +  "status": "NACK" + } + +} +} From 4785893e063f3112ebef623b069093ae3688e8b2 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Tue, 25 Jan 2022 13:07:30 +0530 Subject: [PATCH 018/183] Update BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md --- .../BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md index 7fe08765..daf4af5c 100644 --- a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md +++ b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md @@ -403,7 +403,9 @@ WWW-Authenticate: Signature realm="example-bap.com",headers="(created) (expires) "ack": {   "status": "NACK" +  } } + } From 59200ec015a9d0a84033eb1c3c6e1bb3c50ef63d Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Tue, 25 Jan 2022 13:11:13 +0530 Subject: [PATCH 019/183] Update BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md --- ...006-Signing-Beckn-APIs-In-HTTP-Draft-01.md | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md index daf4af5c..8a8c852b 100644 --- a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md +++ b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md @@ -117,11 +117,11 @@ WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) "ack": { - "status": "NACK" +  "status": "NACK" - } + } - } + } } @@ -206,11 +206,11 @@ Proxy-Authenticate: Signature realm="example-bpp.com",headers="(created) (expire "ack": { - "status": "NACK" +  "status": "NACK" - } + } - } + } } @@ -243,11 +243,11 @@ WWW-Authenticate: Signature realm="example-bpp.com",headers="(created) (expires) "ack": { - "status": "NACK" +  "status": "NACK" - } + } - } + } } @@ -302,11 +302,11 @@ WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) "ack": { - "status": "NACK" +  "status": "NACK" - } + } - } + } } @@ -366,11 +366,11 @@ HTTP/1.1 401 Unauthorized "ack": { - "status": "NACK" +  "status": "NACK" - } + } - } + } } @@ -406,6 +406,5 @@ WWW-Authenticate: Signature realm="example-bap.com",headers="(created) (expires)  } -} - + } } From 36e5f0f981e908dba8f5dc3ce5191ec546519505 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Tue, 25 Jan 2022 13:27:20 +0530 Subject: [PATCH 020/183] Update BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md --- ...006-Signing-Beckn-APIs-In-HTTP-Draft-01.md | 65 +++++++++---------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md index 8a8c852b..42f1d9a5 100644 --- a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md +++ b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md @@ -2,7 +2,7 @@ ## Introduction When communicating over HTTP using Beckn APIs, the subscribers need to authenticate themselves to perform transactions with other subscribers. Due to the commercial nature of the transactions, every request/callback pair is considered to be a "contract" between two parties. Therefore, it is imperative that all requests and callbacks are digitally signed by the sender and subsequently verified by the receiver. Furthermore, it is also desirable to ensure that the message was not altered or tampered with during transit. -This document describes a way for network subscribers (BAP/BPPs) and proxy subscribers (BGs) to simultaneously add authentication and message integrity to HTTP messages by using digital signatures. How the signatures are generated and the format of those signatures is out of scope of this document and can be found in this IETF document - [Signing HTTP Messages](https://tools.ietf.org/id/draft-cavage-http-signatures-12.html) +This document describes a way for network subscribers (BAP/BPPs) and proxy subscribers (BGs) to simultaneously add authentication and message integrity to HTTP messages by using digital signatures. How the signatures are generated and the format of those signatures is out of scope of this document and can be found in this IETF document - [Signing HTTP Messages](https://tools.ietf.org/id/draft-cavage-http-signatures-12.html). This document specifies the algorithms used in generating the keys, how to construct the signing strings being passed in the headers. Also, it specifies clearly the format of the HTTP headers used for authenticating BAP, BPPs and BGs. ## Subscriber Authentication @@ -92,13 +92,13 @@ The BG performs the following steps to authenticate the BAP and also ensure mess 2. BG splits the keyId string into subscriber ID, Unique Key ID and algorithm using the delimiter "|". 3. The keyId uses the format {subscriber id}|{unique_key_id}|{signing algorithm} . If the signing algorithm extracted from the keyId does not match the value of the algorithm parameter in the Authorization header, then the BG should return an 401 unauthorised error. -4. The keyId also contains a unique_key_id which is used when the BAP has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple types of subscribers +4. The keyId also contains a unique_key_id which is used when the BAP has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple types of subscribers. 5. The BG will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id.It will receive the public key of the BAP : `awGPjRK6i/Vg/lWr+0xObclVxlwZXvTjWYtlu6NeOHk=` 6. If no valid key is found, the BPP must return a NACK response with 401 Unauthorised response code. -7. BG will use the BAP's public key to verify the signature. If signature is verified, the BAP is considered to be authenticated. If not BG should return a 401 error +7. BG will use the BAP's public key to verify the signature. If signature is verified, the BAP is considered to be authenticated. If not BG should return a 401 error. 8. If the signature is not verified, the BG must return a NACK response with 401 Unauthorised response code with a WWW-Authenticate header. For example, for an invalid signature, the BG must return the following: **Headers:** @@ -179,13 +179,11 @@ The BPP performs the following steps to authenticate the BAP and the BG and also 2. Split the keyID string using the delimiter `|`. As we know, the subscriber ID is the registered domain name of the subscriber and follows the format{subdomain}.{domain}.{extension}. 3. The keyID uses the format {subscriber id}|{unique_public_key_id}|{signing algorithm} . If the signing algorithm extracted from the keyId does not match the value of the algorithm field in the X-Gateway-Authorization header, then the BPP should return an error. -4. The keyID also contains a unique_public_key_id which is used when the BG has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple subscribers +4. The keyID also contains a unique_public_key_id which is used when the BG has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple subscribers. 5. The BG will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id. It will get the BG’s public key : `The BG will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id. It will get the BG’s public key :` -`If no valid key is found, the BPP must return a NACK response with 401 Unauthorised response code.` - 6. If no valid key is found, the BPP must return a NACK response with 401 Unauthorised response code. 7. BPP will use the BG's public key to verify the signature. If the signature is verified, the BG is considered to be authenticated. 8. If the signature is not verified, the BPP must return a NACK response with 401 Unauthorised response code with a Proxy-Authenticate header. For example, for an invalid BG signature, the BPP must return the following: @@ -219,12 +217,12 @@ Proxy-Authenticate: Signature realm="example-bpp.com",headers="(created) (expire ### Step 5 : BPP verifies BAP signature The BPP performs the following steps to authenticate the BAP and also ensure message integrity during transit. -1. BPP gets keyId from the Authorization header +1. BPP gets keyId from the Authorization header. 2. BPP splits the keyID string using the delimiter `|`. -3. The keyID uses the format {subscriber id}|{unique_key_id}|{signing algorithm} . If the signing algorithm extracted from the keyId does not match the value of the algorithm field in the Authorization header, then the BPP should return an error. -4. The keyId also contains a unique_public_key_id which is used when the BAP has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple types of subscribers +3. The keyID uses the format {subscriber id}|{unique_key_id}|{signing algorithm}. If the signing algorithm extracted from the keyId does not match the value of the algorithm field in the Authorization header, then the BPP should return an error. +4. The keyId also contains a unique_public_key_id which is used when the BAP has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple types of subscribers. 5. The BPP will now look up the registry for the public key of the BAP by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the BAP's public key matching the subscriber_id and unique_key_id. -6. BG will use the BAP's public key to verify the signature. If signature is verified, the BAP is considered to be authenticated. If not BG should return a 401 error +6. BG will use the BAP's public key to verify the signature. If signature is verified, the BAP is considered to be authenticated. If not BG should return a 401 error. 7. If the signature is not verified, the BG must return a NACK response with 401 Unauthorised response code with a WWW-Authenticate header. For example, for an invalid signature, the BPP must return the following: **Headers** @@ -256,33 +254,33 @@ WWW-Authenticate: Signature realm="example-bpp.com",headers="(created) (expires) ### Step 6 : BPP signs callback and calls BG The BPP performs the following steps to create the Authorization header -1. Generate the digest of the request body using the BLAKE-512 hashing function +1. Generate the digest of the request body using the BLAKE-512 hashing function. 2. Generate the created field. The `created` field expresses when the signature was created. The value MUST be a Unix timestamp integer value. A signature with a `created` timestamp value that is in the future MUST NOT be processed. 3. Generate the expires field. The `expires` field expresses when the signature ceases to be valid. The value MUST be a Unix timestamp integer value. A signature with an `expires` timestamp value that is in the past MUST NOT be processed. -4. Concatenate the three values, i.e the `created`, `expires` and `digest` in the format as shown below. The below string is the signing string which the BPP is going to use to sign the request +4. Concatenate the three values, i.e the `created`, `expires` and `digest` in the format as shown below. The below string is the signing string which the BPP is going to use to sign the request. `(created): 1402170695 (expires): 1402170995 digest: BLAKE-512=X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=` -5. Sign this string using it's registered signing private key via the ed25519 Signature Scheme -6. Generate a base64 encoded string of the signature and insert it into the signature parameter of the Authorization header -7. The final Authorization header will look like this. (Let's assume subscriber_id = example-bpp.com, unique_key_id = bpp5678) +5. Sign this string using it's registered signing private key via the ed25519 Signature Scheme. +6. Generate a base64 encoded string of the signature and insert it into the signature parameter of the Authorization header. +7. The final Authorization header will look like this. (Let's assume subscriber_id = example-bpp.com, unique_key_id = bpp5678). `Signature keyId="example-bpp.com|bpp5678|ed25519",algorithm="ed25519",created="1641287885",expires="1641287885",headers="(created) (expires) digest",signature="hJ5sCmbe7s9Wateq6QAdBGloVSkLuLHWOXcRkzrMcVLthFldV4gnT9Vrnq9iDNPVSKuDqaercVjQwFlj0Ml+3Q=="` -9. Finally the BPP includes the Authorization header in the request and calls the BG API +9. Finally the BPP includes the Authorization header in the request and calls the BG API. ### Step 7 : BG verifies BPP signature The BG performs the following steps to authenticate the BPP and also ensure message integrity. -1. BG gets keyId from the Authorization header +1. BG gets keyId from the Authorization header. 2. BG splits the keyId string into subscriber ID, Unique Key ID and algorithm using the delimiter "|". 3. The keyId uses the format {subscriber id}|{unique_key_id}|{signing algorithm} . If the signing algorithm extracted from the keyId does not match the value of the algorithm parameter in the Authorization header, then the BG should return an 401 unauthorised error. -4. The keyId also contains a unique_key_id which is used when the BPP has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple types of subscribers -5. The BG will now look up the registry for the public key of the BPP by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the BPP's public key matching the subscriber_id and unique_key_id +4. The keyId also contains a unique_key_id which is used when the BPP has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple types of subscribers. +5. The BG will now look up the registry for the public key of the BPP by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the BPP's public key matching the subscriber_id and unique_key_id. 6. BG will use the BPP's public key to verify the signature. If signature is verified, the BPP is considered to be authenticated. If not BG should return a 401 error 7. If the signature is not verified, the BG must return a NACK response with 401 Unauthorised response code with a WWW-Authenticate header. For example, for an invalid signature, the BG must return the following: @@ -314,10 +312,10 @@ WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) ### Step 8 : BG signs callback before calling BAP Before forwarding the request to the BAP, the BG performs the following steps to create the X-Gateway-Authorization header -1. Generate the digest of the request body using the BLAKE-512 hashing function +1. Generate the digest of the request body using the BLAKE-512 hashing function. 2. Generate the `created` field. The `created` field expresses when the signature was created. The value MUST be a Unix timestamp integer value. A signature with a `created` timestamp value that is in the future MUST NOT be processed. 3. Generate the `expires` field. The `expires` field expresses when the signature ceases to be valid. The value MUST be a Unix timestamp integer value. A signature with an `expires` timestamp value that is in the past MUST NOT be processed. -4. Concatenate the three values, i.e the `created`, `expires` and `digest` in the format as shown below. The below string is the signing string which the BG is going to use to sign the request +4. Concatenate the three values, i.e the `created`, `expires` and `digest` in the format as shown below. The below string is the signing string which the BG is going to use to sign the request. `(created): 1402170695 @@ -325,30 +323,30 @@ Before forwarding the request to the BAP, the BG performs the following steps to digest: BLAKE-512=X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=` -5. The BG will then sign this string using it's registered signing private key via the ed25519 Signature Scheme -6. Finally the BG will generate a base64 encoded string of the signature and insert it into the signature parameter of the X-Gateway-Authorization header -7. Finally the X-Gateway-Authorization header will look like this. (Let's assume subscriber_id = example-bg.com, unique_key_id = bg3456) +5. The BG will then sign this string using it's registered signing private key via the ed25519 Signature Scheme. +6. Finally the BG will generate a base64 encoded string of the signature and insert it into the signature parameter of the X-Gateway-Authorization header. +7. Finally the X-Gateway-Authorization header will look like this. (Let's assume subscriber_id = example-bg.com, unique_key_id = bg3456). `Signature keyId="example-bg.com|bg3456|ed25519",algorithm="ed25519",created="1641287885",expires="1641287885",headers="(created) (expires) digest",signature="hJ5sCmbe7s9Wateq6QAdBGloVSkLuLHWOXcRkzrMcVLthFldV4gnT9Vrnq9iDNPVSKuDqaercVjQwFlj0Ml+3Q=="` -9. Finally the BG includes the X-Gateway-Authorization header in the request and calls the BAP API +8. Finally the BG includes the X-Gateway-Authorization header in the request and calls the BAP API. **Note:** 1. The difference between the `created` and the `expires` field should be equal to the TTL of the request. -2. Also, the `expires` value should not be more than the expiration time of the key used for signing the request. If the expires value appears to be going beyond the lifespan of the signing key, generate a new key and update it on the registry via subscribe API OR use an existing registered key with an expiry time greater than the `expires` value of the signature +2. Also, the `expires` value should not be more than the expiration time of the key used for signing the request. If the expires value appears to be going beyond the lifespan of the signing key, generate a new key and update it on the registry via subscribe API OR use an existing registered key with an expiry time greater than the `expires` value of the signature. ### Step 9 : BAP verifies BG signature The BAP performs the following steps to authenticate the BAP and the BG and also ensure message integrity. -8. Get keyId from the X-Gateway-Authorization header -9. Split the keyID string using the delimiter `|`. -10. The keyID uses the format {subscriber id}|{unique_public_key_id}|{signing algorithm} . If the signing algorithm extracted from the keyId does not match the value of the algorithm field in the X-Gateway-Authorization header, then the BPP should return an error. -11. The keyID also contains a unique_public_key_id which is used when the BG has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple subscribers -12. The BAP will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id. If no valid key is found, the BPP must return -13. BPP will use the BG's public key to verify the signature. If signature is verified, the BG is considered to be authenticated. -14. If the signature is not verified, the BPP must return a NACK response with 401 Unauthorised response code with a Proxy-Authenticate header. For example, for an invalid BG signature, the BAP must return the following: +1. Get keyId from the X-Gateway-Authorization header +2. Split the keyID string using the delimiter `|`. +3. The keyID uses the format {subscriber id}|{unique_public_key_id}|{signing algorithm} . If the signing algorithm extracted from the keyId does not match the value of the algorithm field in the X-Gateway-Authorization header, then the BPP should return an error. +4. The keyID also contains a unique_public_key_id which is used when the BG has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple subscribers +5. The BAP will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id. If no valid key is found, the BPP must return +6. BPP will use the BG's public key to verify the signature. If signature is verified, the BG is considered to be authenticated. +7. If the signature is not verified, the BPP must return a NACK response with 401 Unauthorised response code with a Proxy-Authenticate header. For example, for an invalid BG signature, the BAP must return the following: **Headers** @@ -407,4 +405,5 @@ WWW-Authenticate: Signature realm="example-bap.com",headers="(created) (expires)  }  } + } From 3a608288e0782665a31f3cc64d2ca8c096fa6f0f Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 28 Jan 2022 12:47:52 +0530 Subject: [PATCH 021/183] Update BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md --- ...006-Signing-Beckn-APIs-In-HTTP-Draft-01.md | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md index 42f1d9a5..95541833 100644 --- a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md +++ b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md @@ -103,15 +103,15 @@ The BG performs the following steps to authenticate the BAP and also ensure mess **Headers:** -HTTP/1.1 401 Unauthorized +`HTTP/1.1 401 Unauthorized WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) digest" -... +...` **Request Body:** -{ +`{ "message": { @@ -123,7 +123,7 @@ WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires)  } -} +}` @@ -182,7 +182,7 @@ The BPP performs the following steps to authenticate the BAP and the BG and also 4. The keyID also contains a unique_public_key_id which is used when the BG has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple subscribers. 5. The BG will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id. It will get the BG’s public key : -`The BG will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id. It will get the BG’s public key :` +The BG will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id. It will get the BG’s public key : 6. If no valid key is found, the BPP must return a NACK response with 401 Unauthorised response code. 7. BPP will use the BG's public key to verify the signature. If the signature is verified, the BG is considered to be authenticated. @@ -190,15 +190,15 @@ The BPP performs the following steps to authenticate the BAP and the BG and also **Headers:** -HTTP/1.1 401 Unauthorized +`HTTP/1.1 401 Unauthorized Proxy-Authenticate: Signature realm="example-bpp.com",headers="(created) (expires) digest" -... +...` **Request Body:** -{ +`{ "message": { @@ -210,7 +210,7 @@ Proxy-Authenticate: Signature realm="example-bpp.com",headers="(created) (expire  } -} +}` @@ -227,15 +227,15 @@ The BPP performs the following steps to authenticate the BAP and also ensure mes **Headers** -HTTP/1.1 401 Unauthorized +`HTTP/1.1 401 Unauthorized WWW-Authenticate: Signature realm="example-bpp.com",headers="(created) (expires) digest" -... +...` **Request Body** -{ +`{ "message": { @@ -247,7 +247,7 @@ WWW-Authenticate: Signature realm="example-bpp.com",headers="(created) (expires)  } -} +}` @@ -286,15 +286,15 @@ The BG performs the following steps to authenticate the BPP and also ensure mess **Headers** -HTTP/1.1 401 Unauthorized +`HTTP/1.1 401 Unauthorized WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) digest" -... +...` **Request Body** -{ +`{ "message": { @@ -306,7 +306,7 @@ WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires)  } -} +}` ### Step 8 : BG signs callback before calling BAP @@ -350,15 +350,15 @@ The BAP performs the following steps to authenticate the BAP and the BG and also **Headers** -HTTP/1.1 401 Unauthorized +`HTTP/1.1 401 Unauthorized /Proxy-Authenticate: Signature realm="example-bap.com",headers="(created) (expires) digest" -... +...` **Request Body** -{ +`{ "message": { @@ -370,7 +370,7 @@ HTTP/1.1 401 Unauthorized  } -} +}` ### Step 10 : BAP verifies BPP signature @@ -386,16 +386,16 @@ The BAP performs the following steps to authenticate the BAP and also ensure mes **Headers** -HTTP/1.1 401 Unauthorized +`HTTP/1.1 401 Unauthorized WWW-Authenticate: Signature realm="example-bap.com",headers="(created) (expires) digest" -... +...` **Request Body:** -{ +`{ "message": { @@ -406,4 +406,4 @@ WWW-Authenticate: Signature realm="example-bap.com",headers="(created) (expires)  } -} +}` From 248fb966ddd11af4d9b34920e9f25f24569198e2 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 28 Jan 2022 12:50:15 +0530 Subject: [PATCH 022/183] Update BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md --- .../BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md index 95541833..f573849f 100644 --- a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md +++ b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md @@ -95,7 +95,7 @@ The BG performs the following steps to authenticate the BAP and also ensure mess 4. The keyId also contains a unique_key_id which is used when the BAP has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple types of subscribers. 5. The BG will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id.It will receive the public key of the BAP : -`awGPjRK6i/Vg/lWr+0xObclVxlwZXvTjWYtlu6NeOHk=` +` awGPjRK6i/Vg/lWr+0xObclVxlwZXvTjWYtlu6NeOHk=` 6. If no valid key is found, the BPP must return a NACK response with 401 Unauthorised response code. 7. BG will use the BAP's public key to verify the signature. If signature is verified, the BAP is considered to be authenticated. If not BG should return a 401 error. From a585e53574bc2e097be78b0bc07ed120f5525a8c Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 28 Jan 2022 12:53:18 +0530 Subject: [PATCH 023/183] Update BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md --- .../BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md index f573849f..ca8c2395 100644 --- a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md +++ b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md @@ -95,7 +95,7 @@ The BG performs the following steps to authenticate the BAP and also ensure mess 4. The keyId also contains a unique_key_id which is used when the BAP has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple types of subscribers. 5. The BG will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id.It will receive the public key of the BAP : -` awGPjRK6i/Vg/lWr+0xObclVxlwZXvTjWYtlu6NeOHk=` +`awGPjRK6i/Vg/lWr+0xObclVxlwZXvTjWYtlu6NeOHk=` 6. If no valid key is found, the BPP must return a NACK response with 401 Unauthorised response code. 7. BG will use the BAP's public key to verify the signature. If signature is verified, the BAP is considered to be authenticated. If not BG should return a 401 error. @@ -103,11 +103,11 @@ The BG performs the following steps to authenticate the BAP and also ensure mess **Headers:** -`HTTP/1.1 401 Unauthorized +`HTTP/1.1 401 Unauthorized` -WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) digest" +`WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) digest"` -...` +... **Request Body:** From edac76e6392245405264f4710f57ab3bcdcfc5b2 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 28 Jan 2022 12:55:18 +0530 Subject: [PATCH 024/183] Update BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md --- .../BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md index ca8c2395..32dd5513 100644 --- a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md +++ b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md @@ -103,11 +103,9 @@ The BG performs the following steps to authenticate the BAP and also ensure mess **Headers:** -`HTTP/1.1 401 Unauthorized` - -`WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) digest"` - -... +`HTTP/1.1 401 Unauthorized +WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) digest" +...` **Request Body:** From 5d5d16603e37c9a940f1bfab9c4869527c9d2197 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 28 Jan 2022 12:56:31 +0530 Subject: [PATCH 025/183] Update BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md --- .../BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md index 32dd5513..f5752b6b 100644 --- a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md +++ b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md @@ -110,17 +110,11 @@ WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) **Request Body:** `{ - "message": { - "ack": { -   "status": "NACK" -  } -  } - }` From 3b00d1a89bf1ce9fab4f84323cbae21315fe6212 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 28 Jan 2022 13:00:43 +0530 Subject: [PATCH 026/183] Update BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md --- ...006-Signing-Beckn-APIs-In-HTTP-Draft-01.md | 75 +++++-------------- 1 file changed, 18 insertions(+), 57 deletions(-) diff --git a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md index f5752b6b..8f53ce24 100644 --- a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md +++ b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md @@ -112,9 +112,9 @@ WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) `{ "message": { "ack": { -  "status": "NACK" - } - } +"status": "NACK" +} +} }` @@ -183,25 +183,17 @@ The BG will now look up the registry for the public key of the subscriber by sen **Headers:** `HTTP/1.1 401 Unauthorized - Proxy-Authenticate: Signature realm="example-bpp.com",headers="(created) (expires) digest" - ...` **Request Body:** `{ - "message": { - "ack": { - -  "status": "NACK" - - } - - } - +"status": "NACK" +} +} }` @@ -220,25 +212,17 @@ The BPP performs the following steps to authenticate the BAP and also ensure mes **Headers** `HTTP/1.1 401 Unauthorized - WWW-Authenticate: Signature realm="example-bpp.com",headers="(created) (expires) digest" - ...` **Request Body** `{ - "message": { - "ack": { - -  "status": "NACK" - - } - - } - +"status": "NACK" +} +} }` @@ -279,25 +263,17 @@ The BG performs the following steps to authenticate the BPP and also ensure mess **Headers** `HTTP/1.1 401 Unauthorized - WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) digest" - ...` **Request Body** `{ - "message": { - "ack": { - -  "status": "NACK" - - } - - } - +"status": "NACK" +} +} }` @@ -343,25 +319,17 @@ The BAP performs the following steps to authenticate the BAP and the BG and also **Headers** `HTTP/1.1 401 Unauthorized - /Proxy-Authenticate: Signature realm="example-bap.com",headers="(created) (expires) digest" - ...` **Request Body** `{ - "message": { - "ack": { - -  "status": "NACK" - - } - - } - +"status": "NACK" +} +} }` @@ -379,23 +347,16 @@ The BAP performs the following steps to authenticate the BAP and also ensure mes **Headers** `HTTP/1.1 401 Unauthorized - WWW-Authenticate: Signature realm="example-bap.com",headers="(created) (expires) digest" - ...` **Request Body:** `{ - "message": { - "ack": { -  "status": "NACK" - - } - - } - +"status": "NACK" +} +} }` From f74e481b791a2f885cb47b83dbb17a1c0d209cb1 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 28 Jan 2022 13:02:21 +0530 Subject: [PATCH 027/183] Update BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md --- .../BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md index 8f53ce24..e1d3221d 100644 --- a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md +++ b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md @@ -286,9 +286,7 @@ Before forwarding the request to the BAP, the BG performs the following steps to 4. Concatenate the three values, i.e the `created`, `expires` and `digest` in the format as shown below. The below string is the signing string which the BG is going to use to sign the request. `(created): 1402170695 - (expires): 1402170995 - digest: BLAKE-512=X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=` 5. The BG will then sign this string using it's registered signing private key via the ed25519 Signature Scheme. From 96b90311f69cf31bccf0a50d55f99a356a6bd651 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Sat, 5 Feb 2022 00:41:22 +0530 Subject: [PATCH 028/183] Update BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md --- .../BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md index e1d3221d..b38df75b 100644 --- a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md +++ b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md @@ -16,7 +16,7 @@ Below is the format of a BAP/BPP Authorization header in the typical HTTP Signat The BG will send its signature in the X-Gateway-Authorization header in the exact same format as shown below. -`X-Gateway-Authorization:Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}" algorithm="ed25519" created="1606970629" expires="1607030629" headers="(created) (expires) digest" signature="Base64(ed25519_sign(signing string))"` +`X-Gateway-Authorization:Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}", algorithm="ed25519", created="1606970629", expires="1607030629", headers="(created) (expires) digest", signature="Base64(ed25519_sign(signing string))"` ## Hashing Algorithm For computing the digest of the request body, the hashing function will use the BLAKE-512 (2b) hashing algorithm. BLAKE is a cryptographic hash function based on Dan Bernstein's ChaCha stream cipher. For more documentation on the BLAKE-512(2b) algorithm, please go to [RFC7693](https://tools.ietf.org/html/rfc7693). From 13c5fe01f65ffc317921307a76a1e81165ad92a1 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Sun, 6 Feb 2022 19:37:51 +0530 Subject: [PATCH 029/183] Update core.yaml --- core/v0/api/core.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 09ecdadd..d06228b9 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2164,6 +2164,8 @@ components: enum: - http/get - http/post + - payto + - upi params: type: object properties: From 7d341f85f4f9eb18159f40d6e7998f5164a64123 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Mon, 14 Feb 2022 14:12:49 +0530 Subject: [PATCH 030/183] Update BECKN-002-Payments-On-Beckn-Enabled-Networks.md --- .../BECKN-002-Payments-On-Beckn-Enabled-Networks.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/protocol-drafts/BECKN-002-Payments-On-Beckn-Enabled-Networks.md b/docs/protocol-drafts/BECKN-002-Payments-On-Beckn-Enabled-Networks.md index 87e30399..35e10106 100644 --- a/docs/protocol-drafts/BECKN-002-Payments-On-Beckn-Enabled-Networks.md +++ b/docs/protocol-drafts/BECKN-002-Payments-On-Beckn-Enabled-Networks.md @@ -133,7 +133,7 @@ Payment Collection by a BAP and settled at the end of the month to a bank accoun { "collected_by": "bap", "uri": "payto://bank/98273982749428?amount=$currency:$value&ifsc=$ifsc&message=hello", - "method": "PAYTO", + "tl_method": "PAYTO", "type": "POST_FULFILLMENT", "status": "NOT-PAID", "params": { @@ -155,7 +155,7 @@ Immediate payment on order placement to a UPI Endpoint ``` { "uri": "payto://upi/example@upi?amount=$currency:$value&message=hello", - "method": "PAYTO", + "tl_method": "UPI", "type": "ON-ORDER", "status": "NOT-PAID", "params": { @@ -171,7 +171,7 @@ Transfer to a Payment Gateway Endpoint ``` { "uri": "https://pay.example.com?amount=$value&cur=$currency", - "method": "PAYTO", + "tl_method": "HTTP/POST", "type": "ON-ORDER", "status": "NOT-PAID", "params": { From eeb86b3ddd901988ab78df18b4d8347062c1d4be Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Mon, 14 Feb 2022 16:40:26 +0530 Subject: [PATCH 031/183] Update BECKN-002-Payments-On-Beckn-Enabled-Networks.md --- ...-002-Payments-On-Beckn-Enabled-Networks.md | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/docs/protocol-drafts/BECKN-002-Payments-On-Beckn-Enabled-Networks.md b/docs/protocol-drafts/BECKN-002-Payments-On-Beckn-Enabled-Networks.md index 35e10106..2c6984cd 100644 --- a/docs/protocol-drafts/BECKN-002-Payments-On-Beckn-Enabled-Networks.md +++ b/docs/protocol-drafts/BECKN-002-Payments-On-Beckn-Enabled-Networks.md @@ -155,7 +155,7 @@ Immediate payment on order placement to a UPI Endpoint ``` { "uri": "payto://upi/example@upi?amount=$currency:$value&message=hello", - "tl_method": "UPI", + "tl_method": "PAYTO", "type": "ON-ORDER", "status": "NOT-PAID", "params": { @@ -181,7 +181,27 @@ Transfer to a Payment Gateway Endpoint } ``` +## Example 4 +Payment Collection by a BAP and settled at the end of the month using UPI before 15th of February 2022 +``` +{ + "collected_by": "bap", + "uri": "upi://pay?pa=UPIID@oksbi&pn=NAME&&tr=123456789&cu=INR&am=200", + "tl_method": "UPI", + "type": "POST_FULFILLMENT", + "status": "NOT-PAID", + "params": { + "value": "200", + "currency": "INR" + }, + "time": { + "range": { + "end": "2022-02-15 00:00:00" + } + } +} +``` From c64bfe6ea941048929f728b28fbb6060d36b2e79 Mon Sep 17 00:00:00 2001 From: techframewirk <65583767+techframewirk@users.noreply.github.com> Date: Mon, 21 Feb 2022 12:41:25 +0530 Subject: [PATCH 032/183] Updated Item description. Old description : Describes an item. Allows for domain extension. Updated description : Describes a product or a service offered to the end consumer by the provider. --- core/v0/api/core.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 4549851f..32524ea0 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1944,7 +1944,7 @@ components: measure: $ref: '#/components/schemas/Scalar' Item: - description: Describes an item. Allows for domain extension. + description: Describes a product or a service offered to the end consumer by the provider. type: object properties: id: From 85ad70b3df09cdb315832b8b1badf9970cc450af Mon Sep 17 00:00:00 2001 From: techframewirk <65583767+techframewirk@users.noreply.github.com> Date: Thu, 10 Mar 2022 14:52:31 +0530 Subject: [PATCH 033/183] rfc-draft01 --- ...Rating and Reputation on Beckn Protocol.md | 163 ++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 docs/proposals/BECKN-RFC-Rating and Reputation on Beckn Protocol.md diff --git a/docs/proposals/BECKN-RFC-Rating and Reputation on Beckn Protocol.md b/docs/proposals/BECKN-RFC-Rating and Reputation on Beckn Protocol.md new file mode 100644 index 00000000..e69d7a87 --- /dev/null +++ b/docs/proposals/BECKN-RFC-Rating and Reputation on Beckn Protocol.md @@ -0,0 +1,163 @@ +# Rating and Reputation on Beckn Protocol + +*Draft 01* + +Author: +======= + +Ravi Prakash (ravi@becknfoundation.org) + +Scope +===== + +This document is intended for anyone wishing to design a Rating and Reputation system for beckn protocol enabled Open Networks. This specification is agnostic of any implementation technology but contains examples of run-time JSON objects for the sake of clarity.  + +Context +======= + +Customers expect quality in any products and services they have bought. To ensure such quality is maintained, providers usually expect their customers to rate their services and products based on how satisfied they are with the product consumed or service rendered. Most e-commerce systems nowadays implement an online rating system that allows their users to rate the products and services bought on that platform. + +Platforms selling physical products usually allow their users to rate the quality of their products and sometimes, the delivery. Business aggregators allow their users to also rate businesses as a whole. Businesses allow their customers to rate the customer support they received. There are many more such entities that can be rated based on the customer's level of satisfaction. + +Typically, a rating system allows the consumer to provide a rating value from 1 to 5 where 1 represents lowest quality of service and 5 represents the highest quality of service. In some cases, fractional ratings are also used for further granularity; and in other cases non-numeric values like "Good" or "Bad''; and Ratings from 1 to 10 are also used. The rating value of a particular product or service is typically made visible to the public. A rating system is expected to be fair and transparent to its users, both customers and providers. + +In the case of beckn protocol, many such platforms connect to each other via beckn and thus present a new challenge of managing rating and reputation on a decentralized network. (Talk about the challenge presented) due to open commerce networks and the purpose of this document. + +For platforms connected to each other in an open commerce network, an interoperable and shared rating and reputation system must be implemented that allows users to rate various entities on the network. The rating system must adhere to the following design principles + +1. Non-repudiability + +2. Privacy protected + +3. Cross-platform compatibility + +Abstract +======== + +This document defines design specifications to create an interoperable, secure and non-repudiable system for managing Rating and Reputation of various physical and virtual entities on beckn-enabled Open Commerce Networks. It describes the various roles involved in the system and their respective functions. It also describes the format in which rating must be transmitted and stored on the network. There are multiple approaches to design a system, each approach has its advantages and limitations. + +Terminology +=========== + +1. **Rating Category**: For example: Agent, Fulfillment, Provider + +2. **Rateable Object**: The runtime object of a Rating Category that can be rated + +3. **Rating Sender**: The actor that rates a Rateable Object + +4. **Rating Receiver**: The actor that receives the rating for a Rateable Object + +Problem +======= + +How to ensure that the customers receive quality services rendered from different providers on an open network? + +Forces +====== + +1. Same Rateable Objects may exist on more than one BPP under different names + +Expected Outcomes after reading this document +============================================= + +After reading this document, the reader should be able to + +1. Understand how ratings work on Open Commerce Networks enabled by beckn protocol + +2. Understand how to connect their platforms to the Rating and Reputation system on open commerce networks.  + +Rating using Beckn Protocol +=========================== + +In beckn, **rating** is done via the rating action. This action allows any NP to rate a Rateable Object of another NP according to the rating policy of the NP. The rating policy of an NP defines, + +1. What can be rated + +2. How to rate + +Communication Protocol for Rating +--------------------------------- + +### Rating Policy Handshake + +Before a NP rates another NP's service, an agreement must be reached between both NPs regarding the rating policy. The agreement is done via the Rating Policy agreement handshake. The sequence of messages to be exchanged in this handshake is shown below. + +1. The Rating Sender should call the **get_rating_categories** action on the Rating Receiver's protocol API. + +2. The Rating receiver must immediately respond with an ACK.  + +3. The Rating Receiver should then send back a list of Rating Categories by calling the **rating_categories** callback action on the Rating Sender's protocol API. The **rating_categories** message should contain the following information + + 1. Name of the Rateable Category. This name should be the same as the name of the Schema from Core Specification. For example, "Agent", or "Provider" + + 2. The equivalent real-world name of the Schema. For example, + `{ "Agent" : "Delivery Rider" }` + + 3. The rating conditions that must be fulfilled before rating that object. Meaning, the message must contain attributes that must be set and what their expected values must be before rating that Object. The attributes must be in the form of a runtime schema path.  For example, + `{ "conditions" : [ { "order.id" : "true", "fulfillment.status" : "COMPLETE"}, { x : y}  ] }` + + 4. The rating conditions must be an array where a single element of that array represents all the conditions that must be fulfilled simultaneously. (AND function).  + + 5. The OR conditions are expressed as the separation between individual elements of the array. Example needed.  + + 6. Post-rating effects such as links to feedback forms + + 1. Feedback_form_url + + 2. Callbacks + + 3. ... + + 7. Rating level type  + +4. The Rating sender must respond with an ACK. + +The Rating Sender must design their business logic to accept rating from the user only when the Rating Receiver's rating conditions are matched during a transaction. + +### Rating Call + +Once the rating handshake is complete, the Rating should happen via the following process. + +1. The Rating Sender should call the rating action on the Rating Receiver's API. The rating message should contain the following information as key/value pairs + +1. The name of the Rating Category: "rating_category" : "Agent" + +2. The UUID of the Rateable Object: "id" : "2324-35454-2324" + +3. The rating value: "value" : "4" + +4. Additional data collected via the feedback form (if required)*  + +3. The Rating Receiver must send an ACK + +4. The Rating Receiver must call the on_rating action on the Rating Sender's API. the message must contain any additional information that may be required after the rating is complete. (Requires further elaboration) + +Rating Ledger Architecture +========================== + +The Rating Ledger is a table containing records with the following fields. This table can be implemented on a centralized database or a decentralized database like a blockchain. + +|Attribute|Description|Example| +|---------|-----------|-------| +|id|Primary key |`<Some UUID>`| +|rateable_object_id|This is a UUID generated by the BPP that is mapped against a unique ID.|| +|total_rating_value|Total Rating Value|4350| +|total_rating_count|Total number of ratings|1000| + +This table can be accessed by implementing the same rating action on its API. It is capable of receiving bulk rating information and publishing the information for all network participants to view without revealing confidential information regarding a rateable entity. + +When a Rating Sender wants to rate a Rateable Object, it must first call the rating action on the Rating Receiver's API. + +At the end of a periodic cycle, say at the end of every day, the Rating Sender must send all the ratings done for the day in bulk. + +The Rating Ledger should compute the cumulative rating value of the Rateable Object by adding the sent value to the last calculated value and updating the record of that rateable object. + +When a Rating Sender wants to verify the rating of a Rateable Entity, it should call the lookup action on the Rating Ledger's API by sending the id of the Rateable Entity. This requires the Rateable Entity's ID and it's average rating to be sent in the catalog during the on_search action. + +To verify the rating of a Rateable Object in the catalog, the Rating Sender must calculate the average rating by dividing the total_rating_value with the total_rating_count. + +`Average Rating Value = total_rating_value / total_rating_count` + +If this value matches the rating value sent in the catalog, then the rating is accurate. A margin of error may be introduced in the Network Rating Policy  specifying the number of significant digits to be used while comparing the average rating with the received rating. + +If the rating value does not match or is not within the margin of error, then the Rating Sender should report the error to the Network Facilitator. \ No newline at end of file From f1b5b3575187963cf84596d5add6e42e99ef43b6 Mon Sep 17 00:00:00 2001 From: techframewirk <65583767+techframewirk@users.noreply.github.com> Date: Tue, 22 Mar 2022 21:17:20 +0530 Subject: [PATCH 034/183] Updated descriptions of schema level objects --- core/v0/api/core.yaml | 100 +++++++++++++++++++++--------------------- 1 file changed, 51 insertions(+), 49 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 6c89083a..f7d48c85 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1343,7 +1343,7 @@ components: description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code>' schemas: Ack: - description: Describes the ACK response + description: Describes the acknowledgement message a BPP, BAP or BG sends as response to any beckn API calls. This can represent the acknowledged or not acknowledged status response.<br>This has properties like status type: object properties: status: @@ -1355,7 +1355,7 @@ components: required: - status AddOn: - description: Describes an add-on + description: Describes an ancillary item sold to the buyer of a main product or service<br>This has properties like id,descriptor,price type: object properties: id: @@ -1366,7 +1366,7 @@ components: price: $ref: '#/components/schemas/Price' Address: - description: Describes an address + description: Describes the postal address of a location. This is the address that can be accessed by mail.<br>This has properties like door number, name of the address, building number, street, locality, ward, state and country, and area code<br>This schema is used in the following locations <br><ul><li>location.address</li><li>billing.address</li></ul><br>This is used in the following situations.<br><ul><li>This is typically used during the discovery stage when specifying the address of a provider. For example When specifying the address of a store</li><li>This is typically used during the order stage when specifying the billing address of a consumer</li><li>This is typically used during the order stage when specifying the address where fulfillment starts. For example When specifying pickup location</li><li>This is typically used during the order stage when specifying the address where fulfillment ends. For example When specifying drop location</li></ul><br>This is used to allow the fulfillment agent to reach the exact location of fulfillment start or end. This is done because, just GPS coordinates may not be enough to reach the exact points of fulfillment. The postal address provides granularity till the door number of a physical location. <br>This is used by the user to physically go to the store location during store-pickup.<br>This is used by the fulfillment agent to physcally go to the provider's location to pickup an order<br>This is used by the fulfillment agent to physcally go to the consumer's location to deliver an order<br>The address can be used by the consumer app to geolocate the position of a provider's store on a map. <br>The address can be used by the agent's app to geolocate the position of the start of fulfillment on a map<br>The address can be used by the agent to physically go to the exact location where a fulfillment starts of ends. type: object properties: door: @@ -1400,7 +1400,7 @@ components: type: string description: 'Area code. This can be Pincode, ZIP code or any equivalent' Agent: - description: Describes an order executor + description: Describes direct performer or driver or executor of an order fulfillment.<br>This has properties such as name, image, dob, gender, cred, tags, phone, email and rateable allOf: - $ref: '#/components/schemas/Person' - $ref: '#/components/schemas/Contact' @@ -1409,7 +1409,7 @@ components: rateable: $ref: '#/components/schemas/Rateable' Authorization: - description: Describes an authorization mechanism + description: Describes an authorization mechanism used in the order lifecycle.<br>This has properties like type, token, valid_from, valid_to and status type: object properties: type: @@ -1430,7 +1430,7 @@ components: type: string description: Status of the token Billing: - description: Describes a billing event + description: Describes the billing details of an entity.<br>This has properties like name,organization,address,email,phone,time,tax_number, created_at,updated_at type: object properties: name: @@ -1488,7 +1488,7 @@ components: additional_description: $ref: '#/components/schemas/Descriptor' Catalog: - description: Describes a BPP catalog + description: Describes the products or services offered by a BPP. This is typically sent as the response to a search intent from a BAP. The payment terms, offers and terms of fulfillment supported by the BPP can also be included here.<br>This has properties like bbp/descriptor,bbp/categories,bbp/fulfillments,bbp/payments,bbp/offers,bbp/providers and exp type: object properties: bpp/descriptor: @@ -1518,7 +1518,7 @@ components: description: Time after which catalog has to be refreshed format: date-time Category: - description: Describes a category + description: Describes a type or division of providers or items regarded as having one or more shared characteristics<br>This has properties like id,parent_category_id,descriptor,time,tags type: object properties: id: @@ -1533,7 +1533,7 @@ components: tags: $ref: '#/components/schemas/Tags' Circle: - description: Describes a circular area on the map + description: Describes a circular region of a specified radius centered at a specified GPS coordinate.<br>This has properties like gps,radius type: object properties: gps: @@ -1544,7 +1544,7 @@ components: - gps - radius City: - description: Describes a city + description: Describes a city or a town<br>This has properties like name,code type: object properties: name: @@ -1554,6 +1554,7 @@ components: type: string description: City code Contact: + description: Describes the contact information of an entity including phone number or an email ID<br>This has properties like phone,email,tags type: object properties: phone: @@ -1563,7 +1564,7 @@ components: tags: $ref: '#/components/schemas/Tags' Context: - description: Describes a beckn message context + description: Describes the context of the message being sent.<br>This has properties like domain,country,city,action,code_version,bap_id,bap_uri,bpp_id,bpp_uri,transaction_id,message-id,timestamp,key,ttl type: object properties: domain: @@ -1643,7 +1644,7 @@ components: - bap_uri - timestamp Country: - description: Describes a country. + description: Describes a country.<br>This has properties like name,code type: object properties: name: @@ -1653,12 +1654,12 @@ components: type: string description: Country code as per ISO 3166-1 and ISO 3166-2 format DecimalValue: - description: Describes a decimal value + description: Describes a numerical value in decimal form type: string pattern: '[+-]?([0-9]*[.])?[0-9]+' Descriptor: - description: Describes the description of a real-world object. + description: Describes the description used to describe or identify a real world object<br>This has properties like name,code,symbol,short_desc,long_desc,images,audio,3d_render type: object properties: name: @@ -1683,7 +1684,7 @@ components: format: uri Dimensions: - description: Describes the dimensions of a real-world object + description: Describes the length, width and height of a real-world object.<br>This has properties like length,breadth,height type: object properties: length: @@ -1694,7 +1695,7 @@ components: $ref: '#/components/schemas/Scalar' Document: - description: Describes a document which can be sent as a url + description: Describes a piece of written or printed matter in electronic form that provides information or evidence or that serves as an official record. This will be given a URL.<br>This has properties like url,label type: object properties: url: @@ -1704,7 +1705,7 @@ components: type: string Domain: - description: Describes the domain of an object + description: Described the sector, industry or field for which the current beckn transaction is for. Examples of domains are mobility, local retail, logistics etc. Each network can choose its own codes for specifying a domain within the network. type: string Duration: @@ -1712,7 +1713,7 @@ components: type: string Error: - description: Describes an error object + description: Describes an error object that is returned by a BAP, BPP or BG as a response or callback to an action by another network participant<br>This has properties like type,code,path,message type: object properties: type: @@ -1737,7 +1738,7 @@ components: - code Feedback: - description: Feedback for a service + description: Describes the mechanism by which a BPP can receive feedback for a service or a product. This can be in the form of a feedback form which can be rendered by the BAP or a URL which the BAP can present to the end customer.<br>This has properties like feedback_forum,feedback_url type: object properties: feedback_form: @@ -1746,13 +1747,13 @@ components: $ref: '#/components/schemas/FeedbackUrl' FeedbackForm: - description: Describes a feedback form that a BPP can send to get feedback from the BAP + description: Describes a feedback form that a BPP can send to get feedback from the BAP. The BAP render this and will send the response of the form in this same structure.<br>This has properties like description,id,parent_id,question,answer,answer_type type: array items: $ref: '#/components/schemas/FeedbackFormElement' FeedbackFormElement: - description: An element in the feedback form. It can be question or an answer to the question. + description: Describes a single element in the feedback form. It can be question or an answer to the question.<br>This has properties like id,parent_id,question,answer,answer_type type: object properties: id: @@ -1774,7 +1775,7 @@ components: - text FeedbackUrl: - description: Describes how a feedback URL will be sent by the BPP + description: Describes the feedback URL that an end customer can use to provide feedback to the BPP for products or services.<br>This has properties like url,tl_method,params type: object properties: url: @@ -1801,7 +1802,7 @@ components: Fulfillment: - description: Describes how a single product/service will be rendered/fulfilled to the end customer + description: Describes how a single product/service will be rendered/fulfilled to the end customer<br>This has properties like id,type,provider_id,rating,state,tracking, customer,agent,person,contact,vehicle,start,end,rateable,tags type: object properties: id: @@ -1872,14 +1873,14 @@ components: tags: $ref: '#/components/schemas/Tags' Gps: - description: Describes a gps coordinate + description: Describes a GPS coordinates which is a unique identifier of a precise geographic location on the earth, usually expressed in alphanumeric characters.<br> type: string pattern: '^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$' Image: description: 'Image of an object. <br/><br/> A url based image will look like <br/><br/>```uri:http://path/to/image``` <br/><br/> An image can also be sent as a data string. For example : <br/><br/> ```data:js87y34ilhriuho84r3i4```' type: string Intent: - description: Intent of a user. Used for searching for services + description: Intent of a user. Used for searching for products or services.<br>This has properties like descriptor,provider,fulfillment,payment,category,offer,item,tags type: object properties: descriptor: @@ -1900,7 +1901,7 @@ components: $ref: '#/components/schemas/Tags' ItemQuantity: - description: Describes count or amount of an item + description: Describes the count or amount of an item<br>This has properties like allocated,available,maximum,minimum,selected type: object properties: allocated: @@ -1944,7 +1945,7 @@ components: measure: $ref: '#/components/schemas/Scalar' Item: - description: Describes a product or a service offered to the end consumer by the provider. + description: Describes a product or a service offered to the end consumer by the provider. In the mobility domain item can represent a fare product like one way journey while in the logistics domain it can represent the delivery service offering while in the local retail domain it can represent a product like a grocery item.<br>This has properties like id,parent_item_id,descriptor,price,category_id,fulfillment_id,rating,time,location_id,time,rateable,matched,related,recommended, tags type: object properties: id: @@ -1978,13 +1979,13 @@ components: tags: $ref: '#/components/schemas/Tags' Language: - description: indicates language code. Beckn supports country codes as per ISO 639.2 standard + description: Describes a specific language using a language code.<br>This has properties like code type: object properties: code: type: string Location: - description: Describes the location of a runtime object. + description: Describes the location of something, for example, where an event is happening, where a store is located, or where an action takes place<br>This has properties like id,descriptor,gps,address,station code,city,country,circle,polygon,3d space,time type: object properties: id: @@ -2015,7 +2016,7 @@ components: pattern: '^\./[^/]+/[^/]*/[^/]*/[^/]*/[^/]*/[^/]*$' Offer: - description: Describes an offer + description: Describes how a product or a service will be rendered at a reduced price to the user<br>This has properties like id,descriptor,location_ids,category_ids,item_ids,time type: object properties: id: @@ -2053,7 +2054,7 @@ components: type: string Option: - description: Describes a selectable option + description: Describes a selectable option<br>This has properties like id,description type: object properties: id: @@ -2061,7 +2062,7 @@ components: descriptor: $ref: '#/components/schemas/Descriptor' Order: - description: Describes the details of an order + description: Describes an order which contains the terms, details, status and identifier of a transaction between a BAP and a BPP. This is usually an exchange of goods or services for money.<br>This has properties like id,state,provider,items,add_ons,offers,documents,billings,fulfillment,quote,payment,created_at,updated_at type: object properties: id: @@ -2133,7 +2134,7 @@ components: format: date-time Organization: - description: Describes an organization + description: Describes an organization such as a school, NGO, corporation, club, company etc.<br>This has properties like name,cred type: object properties: name: @@ -2152,7 +2153,7 @@ components: Payment: - description: Describes a payment + description: Describes the payment mechanism to be used for the order.<br>This has properties like uri,tl_method,params,type,status,time. For more info please check BECKN-RFC-002 <a href="https://github.com/beckn/protocol-specifications/blob/core-0.9.4-draft/docs/protocol-drafts/BECKN-002-Payments-On-Beckn-Enabled-Networks.md">Payments on Beckn-Enabled Networks</a> type: object properties: uri: @@ -2198,7 +2199,7 @@ components: $ref: '#/components/schemas/Time' Person: - description: Describes a person. + description: Describes a person as any individual<br>This has the properties like name,image,dob,gender,cred,tags type: object properties: name: @@ -2216,7 +2217,7 @@ components: tags: $ref: '#/components/schemas/Tags' Policy: - description: Describes a policy. Allows for domain extension. + description: Describes a policy.<br>This has properties like id_description,parent_policy_id,time type: object properties: id: @@ -2229,7 +2230,7 @@ components: $ref: '#/components/schemas/Time' Price: - description: Describes the price of an item. Allows for domain extension. + description: Describes the price of a product or service<br>This has properties like currency_value,estimated_value,computed_value,listed_value,offered_value,Minimum_value,maximum_value type: object properties: currency: @@ -2250,7 +2251,7 @@ components: $ref: '#/components/schemas/DecimalValue' Provider: - description: 'Describes a service provider. This can be a restaurant, a hospital, a Store etc' + description: Describes a service provider. This can be a restaurant, a hospital, a Store etc<br>This has properties like id,descriptor,category_id,rating,time,categories,fulfillment,payments,locations,offers,items,exp,rateables,tags type: object properties: id: @@ -2304,7 +2305,7 @@ components: $ref: '#/components/schemas/Tags' Quotation: - description: Describes a quote + description: Describes a quote. It is the estimated price of products or services from the BPP.<br>This has properties like price, breakup, ttl type: object properties: price: @@ -2322,11 +2323,11 @@ components: $ref: '#/components/schemas/Duration' Rateable: - description: If the entity can be rated or not + description: Describes if the entity can be rated or not type: boolean Rating: - description: Describes the rating of a person or an object. + description: Describes the rating of a person or an object<br>This has properties like rating category,id,value, feedback_id,feedback_form type: object properties: rating_category: @@ -2345,6 +2346,7 @@ components: $ref: '#/components/schemas/FeedbackUrl/properties/params/properties/feedback_id' RatingAck: + description: Describes the acknowledgement that feedback or rating has been recorded by the BPP.<br> type: object properties: feedback_ack: @@ -2355,7 +2357,7 @@ components: type: boolean Scalar: - description: An object representing a scalar quantity. + description: Describes a scalar quantity.<br>This has properties like value, estimated_value, computed_value,range, unit type: object properties: type: @@ -2383,7 +2385,7 @@ components: - unit Schedule: - description: Describes a schedule + description: Describes schedule as a repeating time period used to describe a regularly recurring event. At a minimum a schedule will specify frequency which describes the interval between occurrences of the event. Additional information can be provided to specify the schedule more precisely. This includes identifying the timestamps(s) of when the event will take place. Schedules may also have holidays to exclude a specific day from the schedule.<br>This has properties like frequency, holidays, times type: object properties: frequency: @@ -2399,7 +2401,7 @@ components: type: string format: date-time State: - description: Describes a state + description: Describes the state of an order or fulfillment<br>This has properties like descriptor, updated_at,updated_by type: object properties: descriptor: @@ -2412,7 +2414,7 @@ components: description: ID of entity which changed the state Subscriber: type: object - description: 'Any entity which wants to authenticate itself on a network. This can be a BAP, BPP, BG, BPPR or a BGR.' + description: Any entity which wants to authenticate itself on a network. This can be a BAP, BPP, BG, BPPR or a BGR.<br>This has properties like subscriber_id,type, cb_url,domain, city, country, sigining_public_key, encryption_public_key,status,created, updated expiries properties: subscriber_id: type: string @@ -2480,7 +2482,7 @@ components: additionalProperties: type: string Time: - description: Describes time in its various forms. It can be a single point in time; duration; or a structured timetable of operations + description: Describes time in its various forms. It can be a single point in time; duration; or a structured timetable of operations<br>This has properties like label, time stamp,duration,range, days, schedule type: object properties: label: @@ -2506,11 +2508,11 @@ components: $ref: '#/components/schemas/Schedule' TrackingData: - description: Describes tracking data object during live tracking of an order + description: Describes tracking data information to know the status of an object/process or live locations/actions of object and tracking activity<br>This has the GPS coordinates properties $ref: '#/components/schemas/Location/properties/gps' Tracking: - description: Describes the tracking info of an object + description: Describes as tracking which is useful for knowing the location of time sensitive deliveries.<br>This has properties like URL and status of the object type: object properties: url: @@ -2523,7 +2525,7 @@ components: - inactive Vehicle: - description: Describes the properties of a vehicle used in a mobility service + description: Describes a vehicle is a device that is designed or used to transport people or cargo over land, water, air, or through space.<br>This has properties like category, capacity, make, model, size,variant,color,energy_type,registration type: object properties: category: From 843aabe528753f89f0c0f5975cb18614bb5ddbb4 Mon Sep 17 00:00:00 2001 From: techframewirk <65583767+techframewirk@users.noreply.github.com> Date: Fri, 25 Mar 2022 00:47:06 +0530 Subject: [PATCH 035/183] more descriptions --- core/v0/api/core.yaml | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index f7d48c85..1971ce88 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1343,7 +1343,7 @@ components: description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code>' schemas: Ack: - description: Describes the acknowledgement message a BPP, BAP or BG sends as response to any beckn API calls. This can represent the acknowledged or not acknowledged status response.<br>This has properties like status + description: Describes the acknowledgement message a BPP, BAP or BG sends as response to any beckn API calls. This can represent the acknowledged or not acknowledged status response.<br>This has one property status<br>This schema is used in the response of all the beckn API calls<br>This is used to convey the acknowledgement status of a beckn API call received by a network participant. If the network participant received the API call successfully and has validated the request is as per protocol specifications and signature verified it can send back an ACK as status. Or else it will send NACK as status type: object properties: status: @@ -1355,7 +1355,7 @@ components: required: - status AddOn: - description: Describes an ancillary item sold to the buyer of a main product or service<br>This has properties like id,descriptor,price + description: Describes an ancillary item sold to the buyer of a main product or service<br>This has properties like id,descriptor,price<br>This schema is used in the addons array in the Order schema object type: object properties: id: @@ -1366,7 +1366,7 @@ components: price: $ref: '#/components/schemas/Price' Address: - description: Describes the postal address of a location. This is the address that can be accessed by mail.<br>This has properties like door number, name of the address, building number, street, locality, ward, state and country, and area code<br>This schema is used in the following locations <br><ul><li>location.address</li><li>billing.address</li></ul><br>This is used in the following situations.<br><ul><li>This is typically used during the discovery stage when specifying the address of a provider. For example When specifying the address of a store</li><li>This is typically used during the order stage when specifying the billing address of a consumer</li><li>This is typically used during the order stage when specifying the address where fulfillment starts. For example When specifying pickup location</li><li>This is typically used during the order stage when specifying the address where fulfillment ends. For example When specifying drop location</li></ul><br>This is used to allow the fulfillment agent to reach the exact location of fulfillment start or end. This is done because, just GPS coordinates may not be enough to reach the exact points of fulfillment. The postal address provides granularity till the door number of a physical location. <br>This is used by the user to physically go to the store location during store-pickup.<br>This is used by the fulfillment agent to physcally go to the provider's location to pickup an order<br>This is used by the fulfillment agent to physcally go to the consumer's location to deliver an order<br>The address can be used by the consumer app to geolocate the position of a provider's store on a map. <br>The address can be used by the agent's app to geolocate the position of the start of fulfillment on a map<br>The address can be used by the agent to physically go to the exact location where a fulfillment starts of ends. + description: Describes the postal address of a location. This is the address that can be accessed by mail.<br>This has properties like door number, name of the address, building number, street, locality, ward, state and country, and area code<br>This schema is used in the following locations <br><ul><li>location.address</li><li>billing.address</li></ul><br>This is used in the following situations.<br><ul><li>This is typically used during the discovery stage when specifying the address of a provider. For example- When specifying the address of a store</li><li>This is typically used during the order stage when specifying the billing address of a consumer</li><li>This is typically used during the order stage when specifying the address where fulfillment starts. For example- When specifying pickup location</li><li>This is typically used during the order stage when specifying the address where fulfillment ends. For example- When specifying drop location</li></ul><br>This is used to allow the fulfillment agent to reach the exact location of fulfillment start or end. This is done because, just GPS coordinates may not be enough to reach the exact points of fulfillment. The postal address provides granularity till the door number of a physical location. <br>This is used by the BAP to send the billing address of the user to the BPP for creating an order.<br>This is used by the user to physically go to the store location during store-pickup.<br>This is used by the fulfillment agent to physically go to the provider's location to pickup an order<br>This is used by the fulfillment agent to physically go to the consumer's location to deliver an order<br>This is used by a BPP for saving the billing address for confirming an order<br>The address can be used by the consumer app to geolocate the position of a provider's store on a map. <br>The address can be used by the agent's app to geolocate the position of the start of fulfillment on a map<br>The address can be used by the agent to physically go to the exact location where a fulfillment starts of ends.<br>The address will be saved as the billing address for the order created by the BPP type: object properties: door: @@ -1400,7 +1400,7 @@ components: type: string description: 'Area code. This can be Pincode, ZIP code or any equivalent' Agent: - description: Describes direct performer or driver or executor of an order fulfillment.<br>This has properties such as name, image, dob, gender, cred, tags, phone, email and rateable + description: Describes the direct performer or driver or executor of the fulfillment of an order. In the healthcare domain it can be a doctor while in the mobility domain it can be a taxi driver.<br>This has properties such as name, image, dob, gender, cred, tags, phone, email and rateable<br>This schema is used in the agent property of the Fulfillment schema object<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP wants to convey details of the person who will be fulfilling the order so that the customer can make an informed decision about the product or service they need to purchase</li><li>This is typically used in the fulfillment stage when the BPP assigns an agent to fulfill the order post confirmation of the same</li></ul><br>This is used to allow the BPP to send the details of the person fulfilling the order to the end user. allOf: - $ref: '#/components/schemas/Person' - $ref: '#/components/schemas/Contact' @@ -1409,7 +1409,7 @@ components: rateable: $ref: '#/components/schemas/Rateable' Authorization: - description: Describes an authorization mechanism used in the order lifecycle.<br>This has properties like type, token, valid_from, valid_to and status + description: Describes an authorization mechanism used in the order lifecycle.<br>This has properties like type, token, valid_from, valid_to and status<br>This is used in the following situations.<br><ul><li>Typically in the fulfillment stage when BPP sends wants an authorization mechanism that the customer needs to use for starting/ending the fulfillment process</li></ul><br>This is used to allow a user to authorize the validity of their order with an agent so that fulfillment of the order can start/end. This is also used as proof of presence of the customer so that an agent can start/end the fulfillment.<br>This can be used by the user to start fulfillment by providing the token as proof of presence.<br>This can be used by the user as a proof of purchase of service to an agent at start/end of fulfillment<br>This can be used by the user to end fulfillment by providing the token as proof of completion of service.<br><br>The authorization mechanism can be used in several ways to authorize the start or end of a fulfillment.<br>In the mobility domain a BPP which renders taxi services may give an OTP to the BAP after confirming the order. The end user will give the OTP to the agent(taxi driver) as proof of presence to start the taxi service<br>In the logistics domain a BPP that renders courier services can give an OTP to the BAP while the delivery service is being performed the agent. The end user will give the OTP to the agent so that they can mark the package as successfully delivered.<br>In the mobility domain a public transit BPP can send a signed QR code string to the BAP. The BAP will render it as a QR code which the end user will present to a ticketing agent who can read the QR code using their device and authenticate the validity of the ticket type: object properties: type: @@ -1488,7 +1488,7 @@ components: additional_description: $ref: '#/components/schemas/Descriptor' Catalog: - description: Describes the products or services offered by a BPP. This is typically sent as the response to a search intent from a BAP. The payment terms, offers and terms of fulfillment supported by the BPP can also be included here.<br>This has properties like bbp/descriptor,bbp/categories,bbp/fulfillments,bbp/payments,bbp/offers,bbp/providers and exp + description: Describes the products or services offered by a BPP. This is typically sent as the response to a search intent from a BAP. The payment terms, offers and terms of fulfillment supported by the BPP can also be included here.<br>This has properties like bbp/descriptor,bbp/categories,bbp/fulfillments,bbp/payments,bbp/offers,bbp/providers and exp<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP sends the details of the products and services it offers as response to a search intent from the BAP. </li></ul> type: object properties: bpp/descriptor: @@ -1518,7 +1518,7 @@ components: description: Time after which catalog has to be refreshed format: date-time Category: - description: Describes a type or division of providers or items regarded as having one or more shared characteristics<br>This has properties like id,parent_category_id,descriptor,time,tags + description: Describes a type or division of providers or items regarded as having one or more shared characteristics<br>This has properties like id,parent_category_id,descriptor,time,tags<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP wants to categorize the products or services in its catalog as additional information about the product or service </li><li>This is typically used in the discovery stage when the BPP wants to categorize the products or services in its catalog because the price of the same product or service can change based on the category </li><li>This is typically used in the discovery stage when the BPP wants to categorize the products or services in its catalog as additional information about the product or service </li></ul> type: object properties: id: @@ -1533,7 +1533,7 @@ components: tags: $ref: '#/components/schemas/Tags' Circle: - description: Describes a circular region of a specified radius centered at a specified GPS coordinate.<br>This has properties like gps,radius + description: Describes a circular region of a specified radius centered at a specified GPS coordinate.<br>This has properties like gps,radius<br>This is used when a circular area needs to be represented as a location. type: object properties: gps: @@ -1554,7 +1554,7 @@ components: type: string description: City code Contact: - description: Describes the contact information of an entity including phone number or an email ID<br>This has properties like phone,email,tags + description: Describes the contact information of an entity including phone number or an email ID<br>This has properties like phone,email,tags<br>This is used to allow the BPP or BAP to send contact details of a person. type: object properties: phone: @@ -1695,7 +1695,7 @@ components: $ref: '#/components/schemas/Scalar' Document: - description: Describes a piece of written or printed matter in electronic form that provides information or evidence or that serves as an official record. This will be given a URL.<br>This has properties like url,label + description: Describes a piece of written or printed matter in electronic form that provides information or evidence or that serves as an official record. This will be given a URL.<br>This has properties like url,label<br>This is used in the following situations.<br><ul><li>This is typically used in the order stage if any documents from the user are needed by the BPP to confirm the order</li><li>This is typically used in the fulfilment and post fulfillment stage if the BPP needs to send any documents related to the order to the user</li></ul><br>This is used to allow documents to be exchanged between the BAP and the BPP type: object properties: url: @@ -1713,7 +1713,7 @@ components: type: string Error: - description: Describes an error object that is returned by a BAP, BPP or BG as a response or callback to an action by another network participant<br>This has properties like type,code,path,message + description: Describes an error object that is returned by a BAP, BPP or BG as a response or callback to an action by another network participant<br>This has properties like type,code,path,message<br>This schema is used in the response of all the beckn API calls as well as the callback beckn APIs<br>This is used to return the details of an error that happened while processing a beckn API call received by a network participant. type: object properties: type: @@ -1738,7 +1738,7 @@ components: - code Feedback: - description: Describes the mechanism by which a BPP can receive feedback for a service or a product. This can be in the form of a feedback form which can be rendered by the BAP or a URL which the BAP can present to the end customer.<br>This has properties like feedback_forum,feedback_url + description: Describes the mechanism by which a BPP can receive feedback for a service or a product. This can be in the form of a feedback form which can be rendered by the BAP or a URL which the BAP can present to the end customer.<br>This has properties like feedback_forum,feedback_url<br>This is used in the following situations.<br><ul><li>This is typically used in the post fulfillment stage when a BAP sends feedback for a service or product or a fulfillment agent provided by the BPP</li><li>This is typically used in the post fulfillment stage when the BPP sends the feedback form or URL that needs to be used by the BAP</li></ul> type: object properties: feedback_form: @@ -1747,7 +1747,7 @@ components: $ref: '#/components/schemas/FeedbackUrl' FeedbackForm: - description: Describes a feedback form that a BPP can send to get feedback from the BAP. The BAP render this and will send the response of the form in this same structure.<br>This has properties like description,id,parent_id,question,answer,answer_type + description: Describes a feedback form that a BPP can send to get feedback from the BAP. The BAP render this and will send the response of the form in this same structure.<br>This has properties like description,id,parent_id,question,answer,answer_type<br>This is used in the following situations.<br><ul><li>This is typically used in the post fulfillment stage when a BAP sends feedback for a service or product or a fulfillment agent provided by the BPP in a feedback form</li><li>This is typically used in the post fulfillment stage when the BPP sends the feedback form that needs to be used by the BAP</li></ul> type: array items: $ref: '#/components/schemas/FeedbackFormElement' @@ -1775,7 +1775,7 @@ components: - text FeedbackUrl: - description: Describes the feedback URL that an end customer can use to provide feedback to the BPP for products or services.<br>This has properties like url,tl_method,params + description: Describes the feedback URL that an end customer can use to provide feedback to the BPP for products or services.<br>This has properties like url,tl_method,params<br>This is used in the following situations.<br><ul><li>This is typically used in the post fulfillment stage when the BPP sends the feedback URL that needs to be used by the BAP for providing feedback for a service or product or fulfillment agent</li></ul> type: object properties: url: @@ -1802,7 +1802,7 @@ components: Fulfillment: - description: Describes how a single product/service will be rendered/fulfilled to the end customer<br>This has properties like id,type,provider_id,rating,state,tracking, customer,agent,person,contact,vehicle,start,end,rateable,tags + description: Describes how a single product/service will be rendered/fulfilled to the end customer<br>This has properties like id,type,provider_id,rating,state,tracking, customer,agent,person,contact,vehicle,start,end,rateable,tags<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP sends the fulfillment terms to the BAP</li><li>This is typically used in the order stage when the BPP sends the fulfillment terms to the BAP</li><li>This is typically used in the fulfillment stage when the BPP sends the status and current details of fulfillment to the BAP</li></ul> type: object properties: id: @@ -1873,14 +1873,14 @@ components: tags: $ref: '#/components/schemas/Tags' Gps: - description: Describes a GPS coordinates which is a unique identifier of a precise geographic location on the earth, usually expressed in alphanumeric characters.<br> + description: Describes a GPS coordinates which is a unique identifier of a precise geographic location on the earth.<br> type: string pattern: '^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$' Image: description: 'Image of an object. <br/><br/> A url based image will look like <br/><br/>```uri:http://path/to/image``` <br/><br/> An image can also be sent as a data string. For example : <br/><br/> ```data:js87y34ilhriuho84r3i4```' type: string Intent: - description: Intent of a user. Used for searching for products or services.<br>This has properties like descriptor,provider,fulfillment,payment,category,offer,item,tags + description: Intent of a user. Used for searching for products or services.<br>This has properties like descriptor,provider,fulfillment,payment,category,offer,item,tags<br>This is typically used by the BAP to send the purpose of the user's search to the BPP. This will be used by the BPP to find products or services it offers that may match the user's intent. type: object properties: descriptor: From 56fb5383ebd830ff3a5c549d9210479713721b43 Mon Sep 17 00:00:00 2001 From: AyushAgrawal25 <agrawal.ayush2500@gmail.com> Date: Fri, 25 Mar 2022 10:02:10 +0530 Subject: [PATCH 036/183] Format issue resolved with the id property of Item schema --- core/v0/api/core.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 6c89083a..a9d7246e 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1950,7 +1950,6 @@ components: id: description: This is the most unique identifier of a service item. An example of an Item ID could be the SKU of a product. type: string - format: '#/components/schemas/Item/properties/id' parent_item_id: $ref: '#/components/schemas/Item/properties/id' descriptor: From 38b71f0cd2d3e0cd7e54a03902b24e0306024855 Mon Sep 17 00:00:00 2001 From: techframewirk <65583767+techframewirk@users.noreply.github.com> Date: Mon, 28 Mar 2022 14:57:16 +0530 Subject: [PATCH 037/183] updated item and order --- core/v0/api/core.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 1971ce88..4a466d54 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1945,7 +1945,7 @@ components: measure: $ref: '#/components/schemas/Scalar' Item: - description: Describes a product or a service offered to the end consumer by the provider. In the mobility domain item can represent a fare product like one way journey while in the logistics domain it can represent the delivery service offering while in the local retail domain it can represent a product like a grocery item.<br>This has properties like id,parent_item_id,descriptor,price,category_id,fulfillment_id,rating,time,location_id,time,rateable,matched,related,recommended, tags + description: Describes a product or a service offered to the end consumer by the provider. In the mobility domain item can represent a fare product like one way journey while in the logistics domain it can represent the delivery service offering while in the local retail domain it can represent a product like a grocery item.<br>This has properties like id,parent_item_id,descriptor,price,category_id,fulfillment_id,rating,time,location_id,time,rateable,matched,related,recommended, tags<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP sends the catalog of products or services it offers to the BAP in the items array</li><li>This is typically used in the order stage when the BAP sends the details of the item the user wants to purchase</li><li>This is typically used in the fulfillment stage when the BPP/BAP sends the order object containing the details of the products or services purchased in the order</li></ul> type: object properties: id: @@ -2062,7 +2062,7 @@ components: descriptor: $ref: '#/components/schemas/Descriptor' Order: - description: Describes an order which contains the terms, details, status and identifier of a transaction between a BAP and a BPP. This is usually an exchange of goods or services for money.<br>This has properties like id,state,provider,items,add_ons,offers,documents,billings,fulfillment,quote,payment,created_at,updated_at + description: Describes an order which contains the terms, details, status and identifier of a transaction between a BAP and a BPP. This is usually an exchange of goods or services for money.<br>This has properties like id,state,provider,items,add_ons,offers,documents,billings,fulfillment,quote,payment,created_at,updated_at<br>This is used in the following situations.<br><ul><li>This is typically used in the order stage when the BAP sends the details of the order it wishes to create</li><li>This is typically used in the fulfillment stage when the BPP/BAP sends the order details</li></ul> type: object properties: id: From 2e7aa90f6fc1c6f3c4ecd4676afa8eb79e33158c Mon Sep 17 00:00:00 2001 From: techframewirk <65583767+techframewirk@users.noreply.github.com> Date: Sat, 2 Apr 2022 11:27:36 +0530 Subject: [PATCH 038/183] Review comments from Pramod --- core/v0/api/core.yaml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 4a466d54..2a00b9a9 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1343,7 +1343,7 @@ components: description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code>' schemas: Ack: - description: Describes the acknowledgement message a BPP, BAP or BG sends as response to any beckn API calls. This can represent the acknowledged or not acknowledged status response.<br>This has one property status<br>This schema is used in the response of all the beckn API calls<br>This is used to convey the acknowledgement status of a beckn API call received by a network participant. If the network participant received the API call successfully and has validated the request is as per protocol specifications and signature verified it can send back an ACK as status. Or else it will send NACK as status + description: Describes the acknowledgement message a BPP, BAP or BG sends as response to any beckn API calls. This can represent the acknowledged or not acknowledged status response.<br>This has one property status<br>This schema is used in the response of all the beckn API calls<br>This is used to convey the acknowledgement status of a beckn API call received by a network participant. If the network participant received the API call successfully and has validated the request is as per protocol specifications and signature verified it can send back an ACK as status. Or else it will send NACK as status. The validation done at this point is only technical in nature (validating if the schema is as per specification, if the signature and caller is valid, if the endpoint itself is implemented) and no functional validation (as per business logic) needs to be done before sending this. type: object properties: status: @@ -1355,7 +1355,7 @@ components: required: - status AddOn: - description: Describes an ancillary item sold to the buyer of a main product or service<br>This has properties like id,descriptor,price<br>This schema is used in the addons array in the Order schema object + description: Describes an ancillary item (products/services) sold to the buyer of a main product or service<br>This has properties like id,descriptor,price<br>This schema is used in the addons array in the Order schema object type: object properties: id: @@ -1409,7 +1409,7 @@ components: rateable: $ref: '#/components/schemas/Rateable' Authorization: - description: Describes an authorization mechanism used in the order lifecycle.<br>This has properties like type, token, valid_from, valid_to and status<br>This is used in the following situations.<br><ul><li>Typically in the fulfillment stage when BPP sends wants an authorization mechanism that the customer needs to use for starting/ending the fulfillment process</li></ul><br>This is used to allow a user to authorize the validity of their order with an agent so that fulfillment of the order can start/end. This is also used as proof of presence of the customer so that an agent can start/end the fulfillment.<br>This can be used by the user to start fulfillment by providing the token as proof of presence.<br>This can be used by the user as a proof of purchase of service to an agent at start/end of fulfillment<br>This can be used by the user to end fulfillment by providing the token as proof of completion of service.<br><br>The authorization mechanism can be used in several ways to authorize the start or end of a fulfillment.<br>In the mobility domain a BPP which renders taxi services may give an OTP to the BAP after confirming the order. The end user will give the OTP to the agent(taxi driver) as proof of presence to start the taxi service<br>In the logistics domain a BPP that renders courier services can give an OTP to the BAP while the delivery service is being performed the agent. The end user will give the OTP to the agent so that they can mark the package as successfully delivered.<br>In the mobility domain a public transit BPP can send a signed QR code string to the BAP. The BAP will render it as a QR code which the end user will present to a ticketing agent who can read the QR code using their device and authenticate the validity of the ticket + description: Describes an authorization mechanism used in the order lifecycle. Can be used to attach authorization token to any interaction.<br>This has properties like type, token, valid_from, valid_to and status<br>This is used in the following situations.<br><ul><li>Typically in the fulfillment stage when BPP sends an authorization mechanism that the BAP needs to use for authorizing any interaction</li></ul><br>This is used to allow a user to authorize the validity of their order with a person executing the order so that fulfillment of the order can start/end. This is also used as proof of presence of the customer so that a person executing the order can start/end the fulfillment.<br>This can be used by the user to start fulfillment by providing the token as proof of presence.<br>This can be used by the user as a proof of purchase of service to a person executing the order at start/end of fulfillment<br>This can be used by the user to end fulfillment by providing the token as proof of completion of service.<br><br>The authorization mechanism can be used in several ways to authorize the start or end of a fulfillment.<br>In the mobility domain a BPP which renders taxi services may give an OTP to the BAP after confirming the order. The end user will give the OTP to the taxi driver as proof of presence to start the taxi service<br>In the logistics domain a BPP that renders courier services can give an OTP to the BAP while the delivery service is being performed by a delivery agent. The end user will give the OTP to the delivery agent so that they can mark the package as successfully delivered.<br>In the mobility domain a public transit BPP can send a signed QR code string to the BAP. The BAP will render it as a QR code which the end user will present to a ticketing employee who can read the QR code using their device and authenticate the validity of the ticket type: object properties: type: @@ -1488,7 +1488,7 @@ components: additional_description: $ref: '#/components/schemas/Descriptor' Catalog: - description: Describes the products or services offered by a BPP. This is typically sent as the response to a search intent from a BAP. The payment terms, offers and terms of fulfillment supported by the BPP can also be included here.<br>This has properties like bbp/descriptor,bbp/categories,bbp/fulfillments,bbp/payments,bbp/offers,bbp/providers and exp<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP sends the details of the products and services it offers as response to a search intent from the BAP. </li></ul> + description: Describes the products or services offered by a BPP. This is typically sent as the response to a search intent from a BAP. The payment terms, offers and terms of fulfillment supported by the BPP can also be included here. The BPP can show hierarchical nature of products/services in its catalog using the parent_category_id in categories. The BPP can also send a ttl (time to live) in the context which is the duration for which a BAP can cache the catalog and use the cached catalog. <br>This has properties like bbp/descriptor,bbp/categories,bbp/fulfillments,bbp/payments,bbp/offers,bbp/providers and exp<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP sends the details of the products and services it offers as response to a search intent from the BAP. </li></ul> type: object properties: bpp/descriptor: @@ -1564,7 +1564,7 @@ components: tags: $ref: '#/components/schemas/Tags' Context: - description: Describes the context of the message being sent.<br>This has properties like domain,country,city,action,code_version,bap_id,bap_uri,bpp_id,bpp_uri,transaction_id,message-id,timestamp,key,ttl + description: Describes the context header of the message being sent.<br>This has properties like domain,country,city,action,code_version,bap_id,bap_uri,bpp_id,bpp_uri,transaction_id,message-id,timestamp,key,ttl type: object properties: domain: @@ -1695,7 +1695,7 @@ components: $ref: '#/components/schemas/Scalar' Document: - description: Describes a piece of written or printed matter in electronic form that provides information or evidence or that serves as an official record. This will be given a URL.<br>This has properties like url,label<br>This is used in the following situations.<br><ul><li>This is typically used in the order stage if any documents from the user are needed by the BPP to confirm the order</li><li>This is typically used in the fulfilment and post fulfillment stage if the BPP needs to send any documents related to the order to the user</li></ul><br>This is used to allow documents to be exchanged between the BAP and the BPP + description: Describes a piece of written or printed matter in electronic form that provides information or evidence or that serves as an official record. This will be given as a URL. In the case of sensitive information being exchanged, such documents may be encrypted and additional authorization such as an an OTP or password may be implemented when the URL is accessed.<br>This has properties like url,label<br>This is used in the following situations.<br><ul><li>This is typically used in the order stage if any documents from the user are needed by the BPP to confirm the order</li><li>This is typically used in the fulfilment and post fulfillment stage if the BPP needs to send any documents related to the order to the user</li></ul><br>This is used to allow documents to be exchanged between the BAP and the BPP type: object properties: url: @@ -1877,10 +1877,10 @@ components: type: string pattern: '^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$' Image: - description: 'Image of an object. <br/><br/> A url based image will look like <br/><br/>```uri:http://path/to/image``` <br/><br/> An image can also be sent as a data string. For example : <br/><br/> ```data:js87y34ilhriuho84r3i4```' + description: 'Image of an object. <br/><br/> A url based image will look like <br/><br/>```uri:https://path/to/image``` <br/><br/> An image can also be sent as a data string. For example : <br/><br/> ```data:js87y34ilhriuho84r3i4```' type: string Intent: - description: Intent of a user. Used for searching for products or services.<br>This has properties like descriptor,provider,fulfillment,payment,category,offer,item,tags<br>This is typically used by the BAP to send the purpose of the user's search to the BPP. This will be used by the BPP to find products or services it offers that may match the user's intent. + description: Intent of a user. Used in the discovery stage for declaring the intent of the user. BAP can declare the intent of the consumer including <ul><li>What they want (A product, service, offer)</li><li>Who they want (A seller, service provider, agent etc)</li><li>Where they want it and where they want it from</li><li>When they want it (start and end time of fulfillment</li><li>How they want to pay for it</li></ul><br>This has properties like descriptor,provider,fulfillment,payment,category,offer,item,tags<br>This is typically used by the BAP to send the purpose of the user's search to the BPP. This will be used by the BPP to find products or services it offers that may match the user's intent.<br>For example, in Mobility, the mobility consumer declares a mobility intent. In this case, the mobility consumer declares information that describes various aspects of their journey like,<ul><li>Where would they like to begin their journey (intent.fulfillment.start.location)</li><li>Where would they like to end their journey (intent.fulfillment.end.location)</li><li>When would they like to begin their journey (intent.fulfillment.start.time)</li><li>When would they like to end their journey (intent.fulfillment.end.time)</li><li>Who is the transport service provider they would like to avail services from (intent.provider)</li><li>Who is traveling (This is not recommended in public networks) (intent.fulfillment.customer)</li><li>What kind of fare product would they like to purchase (intent.item)</li><li>What add-on services would they like to avail</li><li>What offers would they like to apply on their booking (intent.offer)</li><li>What category of services would they like to avail (intent.category)</li><li>What additional luggage are they carrying</li><li>How would they like to pay for their journey (intent.payment)</li></ul><br>For example, in health domain, a consumer declares the intent for a lab booking the describes various aspects of their booking like,<ul><li>Where would they like to get their scan/test done (intent.fulfillment.start.location)</li><li>When would they like to get their scan/test done (intent.fulfillment.start.time)</li><li>When would they like to get the results of their test/scan (intent.fulfillment.end.time)</li><li>Who is the service provider they would like to avail services from (intent.provider)</li><li>Who is getting the test/scan (intent.fulfillment.customer)</li><li>What kind of test/scan would they like to purchase (intent.item)</li><li>What category of services would they like to avail (intent.category)</li><li>How would they like to pay for their journey (intent.payment)</li></ul> type: object properties: descriptor: From 9f16c0d204a78fca76b8e9657607740eefc416c9 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@becknfoundation.org> Date: Thu, 21 Apr 2022 16:53:48 +0530 Subject: [PATCH 039/183] Added rating communication sequence --- docs/images/rating handshake.png | Bin 0 -> 48067 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/rating handshake.png diff --git a/docs/images/rating handshake.png b/docs/images/rating handshake.png new file mode 100644 index 0000000000000000000000000000000000000000..374c88d5961e255cd385c1c3316c838ea545f857 GIT binary patch literal 48067 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 literal 0 HcmV?d00001 From 88997d6f6817fe8f8ad8a0700a322981b132694b Mon Sep 17 00:00:00 2001 From: Ravi Prakash <comments@beckn.org> Date: Thu, 21 Apr 2022 16:57:46 +0530 Subject: [PATCH 040/183] Added rating flow sequence diagram --- ...ECKN-RFC-Rating and Reputation on Beckn Protocol.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/proposals/BECKN-RFC-Rating and Reputation on Beckn Protocol.md b/docs/proposals/BECKN-RFC-Rating and Reputation on Beckn Protocol.md index e69d7a87..99060a11 100644 --- a/docs/proposals/BECKN-RFC-Rating and Reputation on Beckn Protocol.md +++ b/docs/proposals/BECKN-RFC-Rating and Reputation on Beckn Protocol.md @@ -132,6 +132,14 @@ Once the rating handshake is complete, the Rating should happen via the followin 4. The Rating Receiver must call the on_rating action on the Rating Sender's API. the message must contain any additional information that may be required after the rating is complete. (Requires further elaboration) + +### Communication Sequence + + +<figure> +<img align="center" src="https://github.com/beckn/protocol-specifications/blob/draft/docs/images/rating%20handshake.png"> +</figure> + Rating Ledger Architecture ========================== @@ -160,4 +168,4 @@ To verify the rating of a Rateable Object in the catalog, the Rating Sender must If this value matches the rating value sent in the catalog, then the rating is accurate. A margin of error may be introduced in the Network Rating Policy  specifying the number of significant digits to be used while comparing the average rating with the received rating. -If the rating value does not match or is not within the margin of error, then the Rating Sender should report the error to the Network Facilitator. \ No newline at end of file +If the rating value does not match or is not within the margin of error, then the Rating Sender should report the error to the Network Facilitator. From 88e2c26abad73a8fac59b1c24c64f14bb2b6fd33 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <comments@beckn.org> Date: Thu, 31 Mar 2022 17:48:08 +0530 Subject: [PATCH 041/183] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 68dbea10..9b6d4e22 100644 --- a/README.md +++ b/README.md @@ -95,7 +95,7 @@ The BPPs immediately respond with ACKs. Soon after, the BPPs call the `on_search Sometimes the BG may query a Registry via the `lookup` API to get the BPP addresses and then broadcast the message to the BPPs. -The transaction via the BG is encrypted and the BG has no visibility into the transaction information contained in the `message` field and only uses the `context` header to perform BPP discovery and routing. +It is possible to encrypt the `message` information transmitted via a BG. In that case,BG will have no visibility into the transaction information contained in the `message` field and only uses the `context` header to perform BPP discovery and routing. If the `message` data is not encrypted, then it is **not recommended** to send PII data during `search` as it is typically not required to discover products and services. # Acknowledgments From 4845a8aedbd2a1436d1522510fbe63226d779203 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <comments@beckn.org> Date: Thu, 31 Mar 2022 19:57:20 +0530 Subject: [PATCH 042/183] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9b6d4e22..352c3652 100644 --- a/README.md +++ b/README.md @@ -95,7 +95,7 @@ The BPPs immediately respond with ACKs. Soon after, the BPPs call the `on_search Sometimes the BG may query a Registry via the `lookup` API to get the BPP addresses and then broadcast the message to the BPPs. -It is possible to encrypt the `message` information transmitted via a BG. In that case,BG will have no visibility into the transaction information contained in the `message` field and only uses the `context` header to perform BPP discovery and routing. If the `message` data is not encrypted, then it is **not recommended** to send PII data during `search` as it is typically not required to discover products and services. +To protect the privacy and confidentiality of the user, it is possible to encrypt the `message` information transmitted via a BG. In that case,BG will have no visibility into the transaction information contained in the `message` field and only uses the `context` header to perform BPP discovery and routing. # Acknowledgments From fec401da4f8e47005d1027b66ecdf63f4f494c71 Mon Sep 17 00:00:00 2001 From: techframewirk <65583767+techframewirk@users.noreply.github.com> Date: Tue, 5 Apr 2022 15:53:33 +0530 Subject: [PATCH 043/183] Added link to community guidelines Added link to community guidelines in CONTRIBUTION.md --- CONTRIBUTION.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTION.md b/CONTRIBUTION.md index 80043e45..b4bab842 100644 --- a/CONTRIBUTION.md +++ b/CONTRIBUTION.md @@ -241,3 +241,4 @@ Not all future new features will be introduced in this way. Some new features im While governance of the specification is the role of the CWG, the evolution of the specification happens through the participation of members of the developer community at large. Any person willing to contribute to the effort is welcome, and contributions may include filing or participating in issues, creating pull requests, or helping others with such activities. +However, during any interaction with the community or its members, there is a code of conduct and a set of community guidelines that everyone is expected to adhere to. Please find the details [here](https://becknprotocol.io/community-guidelines/). \ No newline at end of file From 044271a8930c2586b049307e78d409bed3c0d099 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Mon, 18 Jul 2022 05:44:42 +0530 Subject: [PATCH 044/183] removed space --- core/v0/api/core.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 6e73b81f..eb42820c 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -76,8 +76,6 @@ paths: - context - message - - responses: '200': description: Acknowledgement of message received From 31839bc83f0c29f0ea62ec73d234c0c10026831a Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Mon, 18 Jul 2022 05:45:05 +0530 Subject: [PATCH 045/183] Added full address string --- core/v0/api/core.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index eb42820c..0b200efc 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1367,6 +1367,8 @@ components: description: Describes the postal address of a location. This is the address that can be accessed by mail.<br>This has properties like door number, name of the address, building number, street, locality, ward, state and country, and area code<br>This schema is used in the following locations <br><ul><li>location.address</li><li>billing.address</li></ul><br>This is used in the following situations.<br><ul><li>This is typically used during the discovery stage when specifying the address of a provider. For example- When specifying the address of a store</li><li>This is typically used during the order stage when specifying the billing address of a consumer</li><li>This is typically used during the order stage when specifying the address where fulfillment starts. For example- When specifying pickup location</li><li>This is typically used during the order stage when specifying the address where fulfillment ends. For example- When specifying drop location</li></ul><br>This is used to allow the fulfillment agent to reach the exact location of fulfillment start or end. This is done because, just GPS coordinates may not be enough to reach the exact points of fulfillment. The postal address provides granularity till the door number of a physical location. <br>This is used by the BAP to send the billing address of the user to the BPP for creating an order.<br>This is used by the user to physically go to the store location during store-pickup.<br>This is used by the fulfillment agent to physically go to the provider's location to pickup an order<br>This is used by the fulfillment agent to physically go to the consumer's location to deliver an order<br>This is used by a BPP for saving the billing address for confirming an order<br>The address can be used by the consumer app to geolocate the position of a provider's store on a map. <br>The address can be used by the agent's app to geolocate the position of the start of fulfillment on a map<br>The address can be used by the agent to physically go to the exact location where a fulfillment starts of ends.<br>The address will be saved as the billing address for the order created by the BPP type: object properties: + full: + type: string door: type: string description: Door / Shop number of the address From 3078eadd508a8a46584c47e0bf6f8228824d349a Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Mon, 18 Jul 2022 05:45:54 +0530 Subject: [PATCH 046/183] Added space --- core/v0/api/core.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 0b200efc..1341bcac 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1399,6 +1399,7 @@ components: area_code: type: string description: 'Area code. This can be Pincode, ZIP code or any equivalent' + Agent: description: Describes the direct performer or driver or executor of the fulfillment of an order. In the healthcare domain it can be a doctor while in the mobility domain it can be a taxi driver.<br>This has properties such as name, image, dob, gender, cred, tags, phone, email and rateable<br>This schema is used in the agent property of the Fulfillment schema object<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP wants to convey details of the person who will be fulfilling the order so that the customer can make an informed decision about the product or service they need to purchase</li><li>This is typically used in the fulfillment stage when the BPP assigns an agent to fulfill the order post confirmation of the same</li></ul><br>This is used to allow the BPP to send the details of the person fulfilling the order to the end user. allOf: @@ -1408,6 +1409,7 @@ components: properties: rateable: $ref: '#/components/schemas/Rateable' + Authorization: description: Describes an authorization mechanism used in the order lifecycle. Can be used to attach authorization token to any interaction.<br>This has properties like type, token, valid_from, valid_to and status<br>This is used in the following situations.<br><ul><li>Typically in the fulfillment stage when BPP sends an authorization mechanism that the BAP needs to use for authorizing any interaction</li></ul><br>This is used to allow a user to authorize the validity of their order with a person executing the order so that fulfillment of the order can start/end. This is also used as proof of presence of the customer so that a person executing the order can start/end the fulfillment.<br>This can be used by the user to start fulfillment by providing the token as proof of presence.<br>This can be used by the user as a proof of purchase of service to a person executing the order at start/end of fulfillment<br>This can be used by the user to end fulfillment by providing the token as proof of completion of service.<br><br>The authorization mechanism can be used in several ways to authorize the start or end of a fulfillment.<br>In the mobility domain a BPP which renders taxi services may give an OTP to the BAP after confirming the order. The end user will give the OTP to the taxi driver as proof of presence to start the taxi service<br>In the logistics domain a BPP that renders courier services can give an OTP to the BAP while the delivery service is being performed by a delivery agent. The end user will give the OTP to the delivery agent so that they can mark the package as successfully delivered.<br>In the mobility domain a public transit BPP can send a signed QR code string to the BAP. The BAP will render it as a QR code which the end user will present to a ticketing employee who can read the QR code using their device and authenticate the validity of the ticket type: object From 95c46119fae498bc6aec4b65e19ae37834584025 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Mon, 18 Jul 2022 05:46:29 +0530 Subject: [PATCH 047/183] Added jcard field in contact --- core/v0/api/core.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 1341bcac..e16c2e0d 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1559,12 +1559,21 @@ components: description: Describes the contact information of an entity including phone number or an email ID<br>This has properties like phone,email,tags<br>This is used to allow the BPP or BAP to send contact details of a person. type: object properties: + name: + '#/components/schemas/Name' + address: + $ref: '#/components/schemas/Address' phone: type: string email: type: string + jcard: + type: object + description: A Jcard object as per draft-ietf-jcardcal-jcard-03 specification tags: $ref: '#/components/schemas/Tags' + + Context: description: Describes the context header of the message being sent.<br>This has properties like domain,country,city,action,code_version,bap_id,bap_uri,bpp_id,bpp_uri,transaction_id,message-id,timestamp,key,ttl type: object From 5c9b83fb58ef218a62b4cdfc7d1657c7d7f33aaf Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Mon, 18 Jul 2022 05:47:27 +0530 Subject: [PATCH 048/183] Added Organization schema --- core/v0/api/core.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index e16c2e0d..1dd12501 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2020,6 +2020,17 @@ components: type: string time: $ref: '#/components/schemas/Time' + + Organization: + type: object + properties: + descriptor: + $ref: '#/components/schemas/Descriptor' + address: + $ref: '#/components/schemas/Address' + contact: + $ref: '#/components/schemas/Contact' + Name: type: string description: 'Describes the name of a person in format: ./{given_name}/{honorific_prefix}/{first_name}/{middle_name}/{last_name}/{honorific_suffix}' From 715c5d45b0e023d997586845b3a58ec7168fa101 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Mon, 18 Jul 2022 05:48:00 +0530 Subject: [PATCH 049/183] Removed format restrictions on Name schema --- core/v0/api/core.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 1dd12501..8f03a73c 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2033,8 +2033,7 @@ components: Name: type: string - description: 'Describes the name of a person in format: ./{given_name}/{honorific_prefix}/{first_name}/{middle_name}/{last_name}/{honorific_suffix}' - pattern: '^\./[^/]+/[^/]*/[^/]*/[^/]*/[^/]*/[^/]*$' + description: 'Describes the name of a person' Offer: description: Describes how a product or a service will be rendered at a reduced price to the user<br>This has properties like id,descriptor,location_ids,category_ids,item_ids,time From c2a6d5a2232986314e81e03a2a1d6ec05d2735fa Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Mon, 18 Jul 2022 05:49:23 +0530 Subject: [PATCH 050/183] Added space --- core/v0/api/core.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 8f03a73c..642bd47b 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2236,6 +2236,7 @@ components: type: string tags: $ref: '#/components/schemas/Tags' + Policy: description: Describes a policy.<br>This has properties like id_description,parent_policy_id,time type: object From 1c7811ba88d3d6dc41b8db5550b143701060a7d9 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:09:19 +0530 Subject: [PATCH 051/183] Fixed order object --- core/v0/api/core.yaml | 71 ++----------------------------------------- 1 file changed, 2 insertions(+), 69 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 642bd47b..76ef275f 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -509,32 +509,7 @@ paths: type: object properties: order: - type: object - properties: - provider: - $ref: '#/components/schemas/Provider' - provider_location: - $ref: '#/components/schemas/Location' - items: - type: array - items: - allOf: - - $ref: '#/components/schemas/Item' - - properties: - quantity: - $ref: '#/components/schemas/ItemQuantity' - add_ons: - type: array - items: - $ref: '#/components/schemas/AddOn' - offers: - type: array - items: - $ref: '#/components/schemas/Offer' - quote: - $ref: '#/components/schemas/Quotation' - required: - - order + $ref: '#/components/schemas/Order' error: $ref: '#/components/schemas/Error' required: @@ -576,49 +551,7 @@ paths: type: object properties: order: - type: object - properties: - provider: - type: object - properties: - id: - $ref: '#/components/schemas/Provider/properties/id' - provider_location: - type: object - properties: - id: - $ref: '#/components/schemas/Location/properties/id' - items: - type: array - items: - type: object - properties: - id: - $ref: '#/components/schemas/Item/properties/id' - quantity: - $ref: '#/components/schemas/ItemQuantity/properties/selected' - add_ons: - type: array - items: - type: object - properties: - id: - $ref: '#/components/schemas/AddOn/properties/id' - offers: - type: array - items: - type: object - properties: - id: - $ref: '#/components/schemas/Offer/properties/id' - billing: - $ref: '#/components/schemas/Billing' - fulfillment: - $ref: '#/components/schemas/Fulfillment' - quote: - $ref: '#/components/schemas/Quotation' - payment: - $ref: '#/components/schemas/Payment' + $ref: '#/components/schemas/Order' required: - order error: From 58975d1f7362c08fdaeff4a42125c4ac53174972 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:09:41 +0530 Subject: [PATCH 052/183] Added Feedback Form --- core/v0/api/core.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 76ef275f..166740c8 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -812,7 +812,8 @@ paths: context: $ref: '#/components/schemas/Context' message: - $ref: '#/components/schemas/RatingAck' + feedback: + $ref: '#/components/schemas/FeedbackForm' error: $ref: '#/components/schemas/Error' required: From 7b09467f07fe5f0d865de8223241d6e770104cf9 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:10:02 +0530 Subject: [PATCH 053/183] Removed ProxyAuth header --- core/v0/api/core.yaml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 166740c8..abd668c4 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1263,16 +1263,12 @@ components: in: header name: Authorization description: 'Signature of message body using BAP or BPP subscriber''s signing public key. <br/><br/>Format:<br/><br/><code>Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code>' - GatewaySubscriberAuth: - type: apiKey - in: header - name: Proxy-Authorization - description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>Proxy-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code><p><b>Note:</b>This header will be deprecated soon and will no longer be supported in future releases. New implementors are requested to use the X-Gateway-Authorization header. Existing implementations are requested to migrate their header to the new header. The deprecation date will be set after discussion as per the standard specification governance process.</p>' GatewaySubscriberAuthNew: type: apiKey in: header name: X-Gateway-Authorization description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code>' + schemas: Ack: description: Describes the acknowledgement message a BPP, BAP or BG sends as response to any beckn API calls. This can represent the acknowledged or not acknowledged status response.<br>This has one property status<br>This schema is used in the response of all the beckn API calls<br>This is used to convey the acknowledgement status of a beckn API call received by a network participant. If the network participant received the API call successfully and has validated the request is as per protocol specifications and signature verified it can send back an ACK as status. Or else it will send NACK as status. The validation done at this point is only technical in nature (validating if the schema is as per specification, if the signature and caller is valid, if the endpoint itself is implemented) and no functional validation (as per business logic) needs to be done before sending this. From 21598b256dc114f6d8f697680deabbd2bb74f10b Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:11:25 +0530 Subject: [PATCH 054/183] Added / removed unnecessary spaces --- core/v0/api/core.yaml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index abd668c4..beca44bc 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1282,6 +1282,7 @@ components: - NACK required: - status + AddOn: description: Describes an ancillary item (products/services) sold to the buyer of a main product or service<br>This has properties like id,descriptor,price<br>This schema is used in the addons array in the Order schema object type: object @@ -1293,6 +1294,7 @@ components: $ref: '#/components/schemas/Descriptor' price: $ref: '#/components/schemas/Price' + Address: description: Describes the postal address of a location. This is the address that can be accessed by mail.<br>This has properties like door number, name of the address, building number, street, locality, ward, state and country, and area code<br>This schema is used in the following locations <br><ul><li>location.address</li><li>billing.address</li></ul><br>This is used in the following situations.<br><ul><li>This is typically used during the discovery stage when specifying the address of a provider. For example- When specifying the address of a store</li><li>This is typically used during the order stage when specifying the billing address of a consumer</li><li>This is typically used during the order stage when specifying the address where fulfillment starts. For example- When specifying pickup location</li><li>This is typically used during the order stage when specifying the address where fulfillment ends. For example- When specifying drop location</li></ul><br>This is used to allow the fulfillment agent to reach the exact location of fulfillment start or end. This is done because, just GPS coordinates may not be enough to reach the exact points of fulfillment. The postal address provides granularity till the door number of a physical location. <br>This is used by the BAP to send the billing address of the user to the BPP for creating an order.<br>This is used by the user to physically go to the store location during store-pickup.<br>This is used by the fulfillment agent to physically go to the provider's location to pickup an order<br>This is used by the fulfillment agent to physically go to the consumer's location to deliver an order<br>This is used by a BPP for saving the billing address for confirming an order<br>The address can be used by the consumer app to geolocate the position of a provider's store on a map. <br>The address can be used by the agent's app to geolocate the position of the start of fulfillment on a map<br>The address can be used by the agent to physically go to the exact location where a fulfillment starts of ends.<br>The address will be saved as the billing address for the order created by the BPP type: object @@ -1361,6 +1363,7 @@ components: status: type: string description: Status of the token + Billing: description: Describes the billing details of an entity.<br>This has properties like name,organization,address,email,phone,time,tax_number, created_at,updated_at type: object @@ -1449,6 +1452,7 @@ components: type: string description: Time after which catalog has to be refreshed format: date-time + Category: description: Describes a type or division of providers or items regarded as having one or more shared characteristics<br>This has properties like id,parent_category_id,descriptor,time,tags<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP wants to categorize the products or services in its catalog as additional information about the product or service </li><li>This is typically used in the discovery stage when the BPP wants to categorize the products or services in its catalog because the price of the same product or service can change based on the category </li><li>This is typically used in the discovery stage when the BPP wants to categorize the products or services in its catalog as additional information about the product or service </li></ul> type: object @@ -1464,6 +1468,7 @@ components: $ref: '#/components/schemas/Time' tags: $ref: '#/components/schemas/Tags' + Circle: description: Describes a circular region of a specified radius centered at a specified GPS coordinate.<br>This has properties like gps,radius<br>This is used when a circular area needs to be represented as a location. type: object @@ -1475,6 +1480,7 @@ components: required: - gps - radius + City: description: Describes a city or a town<br>This has properties like name,code type: object @@ -1485,6 +1491,7 @@ components: code: type: string description: City code + Contact: description: Describes the contact information of an entity including phone number or an email ID<br>This has properties like phone,email,tags<br>This is used to allow the BPP or BAP to send contact details of a person. type: object @@ -1502,7 +1509,6 @@ components: description: A Jcard object as per draft-ietf-jcardcal-jcard-03 specification tags: $ref: '#/components/schemas/Tags' - Context: description: Describes the context header of the message being sent.<br>This has properties like domain,country,city,action,code_version,bap_id,bap_uri,bpp_id,bpp_uri,transaction_id,message-id,timestamp,key,ttl @@ -1584,6 +1590,7 @@ components: - bap_id - bap_uri - timestamp + Country: description: Describes a country.<br>This has properties like name,code type: object @@ -1918,12 +1925,14 @@ components: type: boolean tags: $ref: '#/components/schemas/Tags' + Language: description: Describes a specific language using a language code.<br>This has properties like code type: object properties: code: type: string + Location: description: Describes the location of something, for example, where an event is happening, where a store is located, or where an action takes place<br>This has properties like id,descriptor,gps,address,station code,city,country,circle,polygon,3d space,time type: object @@ -2011,6 +2020,7 @@ components: type: string descriptor: $ref: '#/components/schemas/Descriptor' + Order: description: Describes an order which contains the terms, details, status and identifier of a transaction between a BAP and a BPP. This is usually an exchange of goods or services for money.<br>This has properties like id,state,provider,items,add_ons,offers,documents,billings,fulfillment,quote,payment,created_at,updated_at<br>This is used in the following situations.<br><ul><li>This is typically used in the order stage when the BAP sends the details of the order it wishes to create</li><li>This is typically used in the fulfillment stage when the BPP/BAP sends the order details</li></ul> type: object @@ -2351,6 +2361,7 @@ components: items: type: string format: date-time + State: description: Describes the state of an order or fulfillment<br>This has properties like descriptor, updated_at,updated_by type: object @@ -2363,6 +2374,7 @@ components: updated_by: type: string description: ID of entity which changed the state + Subscriber: type: object description: Any entity which wants to authenticate itself on a network. This can be a BAP, BPP, BG, BPPR or a BGR.<br>This has properties like subscriber_id,type, cb_url,domain, city, country, sigining_public_key, encryption_public_key,status,created, updated expiries @@ -2432,6 +2444,7 @@ components: description: Describes a tag. This is a simple key-value store which is used to contain extended metadata additionalProperties: type: string + Time: description: Describes time in its various forms. It can be a single point in time; duration; or a structured timetable of operations<br>This has properties like label, time stamp,duration,range, days, schedule type: object From 72cc4e31250dd1489d182f0c9364eafb5b682108 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:18:42 +0530 Subject: [PATCH 055/183] Removed required fields --- core/v0/api/core.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index beca44bc..ff4da4e2 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1390,9 +1390,7 @@ components: updated_at: type: string format: date-time - required: - - name - - phone + Cancellation: description: Describes the ACK response type: object From 99fb5daa16dba8be2f26795767f31998f0381c62 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:19:01 +0530 Subject: [PATCH 056/183] added CargoItem schema --- core/v0/api/core.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index ff4da4e2..a1bcef88 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1420,6 +1420,16 @@ components: $ref: '#/components/schemas/Option/properties/id' additional_description: $ref: '#/components/schemas/Descriptor' + + CargoItem: + type: object + properties: + descriptor: + $ref: '#/components/schemas/Descriptor' + dimensions: + $ref: '#/components/schemas/Dimensions' + + Catalog: description: Describes the products or services offered by a BPP. This is typically sent as the response to a search intent from a BAP. The payment terms, offers and terms of fulfillment supported by the BPP can also be included here. The BPP can show hierarchical nature of products/services in its catalog using the parent_category_id in categories. The BPP can also send a ttl (time to live) in the context which is the duration for which a BAP can cache the catalog and use the cached catalog. <br>This has properties like bbp/descriptor,bbp/categories,bbp/fulfillments,bbp/payments,bbp/offers,bbp/providers and exp<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP sends the details of the products and services it offers as response to a search intent from the BAP. </li></ul> type: object From 916c9ec311f88df211c000c3ae58ce5296cde563 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:19:37 +0530 Subject: [PATCH 057/183] added WIP Verifiable Credential schema --- core/v0/api/core.yaml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index a1bcef88..cb0553b0 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1609,6 +1609,36 @@ components: code: type: string description: Country code as per ISO 3166-1 and ISO 3166-2 format + + Credential: + description: Describes a credential of an entity - Person or Organization + type: object + properties: + id: + type: string + type: + type: string + default: 'VerifiableCredential' + issuer: + type: string + issuance_date: + type: string + format: date-time + credential_subject: + type: object + properties: + id: + type: string + additionalProperties: + type: object + credential_schema: + type: object + properties: + id: + type: string + type: + type: string + DecimalValue: description: Describes a numerical value in decimal form type: string From 1792eb0493ddd9842b065c231f068c018608601b Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:20:00 +0530 Subject: [PATCH 058/183] Added video as a property in descriptor --- core/v0/api/core.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index cb0553b0..83366f59 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1665,6 +1665,9 @@ components: audio: type: string format: uri + video: + type: string + format: uri 3d_render: type: string format: uri From e6fc24c0d9bc27feda65dd062740a7ef2359478a Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:20:27 +0530 Subject: [PATCH 059/183] Added Item Quantity as a property of Item --- core/v0/api/core.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 83366f59..66f969a9 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1946,6 +1946,8 @@ components: $ref: '#/components/schemas/Descriptor' price: $ref: '#/components/schemas/Price' + quantity: + $ref: '#/components/schemas/ItemQuantity' category_id: $ref: '#/components/schemas/Category/properties/id' fulfillment_id: From 36e3ff9e878db8cea7d2fabbcfa5c720d4e69cd3 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:20:52 +0530 Subject: [PATCH 060/183] Added payment_id to Item to reference Payment terms --- core/v0/api/core.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 66f969a9..28ad5b38 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1956,6 +1956,8 @@ components: $ref: '#/components/schemas/Rating/properties/value' location_id: $ref: '#/components/schemas/Location/properties/id' + payment_id: + $ref: '#/components/schemas/Payment/properties/id' time: $ref: '#/components/schemas/Time' rateable: From 46e9f5e63048b91cb632cc273618eb3a4ce973d6 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:21:36 +0530 Subject: [PATCH 061/183] Updated Order object --- core/v0/api/core.yaml | 52 +++++++++++++------------------------------ 1 file changed, 16 insertions(+), 36 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 28ad5b38..f83b0946 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2076,57 +2076,37 @@ components: state: type: string provider: - type: object - properties: - id: - $ref: '#/components/schemas/Provider/properties/id' - locations: - type: array - maxItems: 1 - items: - type: object - properties: - id: - $ref: '#/components/schemas/Location/properties/id' - required: - - id + $ref: '#/components/schemas/Provider' items: type: array items: - type: object - properties: - id: - $ref: '#/components/schemas/Item/properties/id' - quantity: - $ref: '#/components/schemas/ItemQuantity/properties/selected' - required: - - id + $ref: '#/components/schemas/Item' add_ons: type: array items: - type: object - properties: - id: - $ref: '#/components/schemas/AddOn/properties/id' - required: - - id + $ref: '#/components/schemas/AddOn' offers: type: array items: - type: object - properties: - id: - $ref: '#/components/schemas/Offer/properties/id' - required: - - id + $ref: '#/components/schemas/Offer' documents: type: array items: $ref: '#/components/schemas/Document' billing: $ref: '#/components/schemas/Billing' - fulfillment: - $ref: '#/components/schemas/Fulfillment' + fulfillments: + type: array + items: + $ref: '#/components/schemas/Fulfillment' + cancellation_policy: + $ref: '#/components/schemas/CancellationPolicy' + return_policy: + $ref: '#/components/schemas/ReturnPolicy' + replacement_policy: + $ref: '#/components/schemas/ReplacementPolicy' + update_policy: + $ref: '#/components/schemas/UpdatePolicy' quote: $ref: '#/components/schemas/Quotation' payment: From 1c3ab14599360aa382bba29c0f1620b59f32c456 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:22:01 +0530 Subject: [PATCH 062/183] Removed Old Organization schema --- core/v0/api/core.yaml | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index f83b0946..af177107 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2005,16 +2005,6 @@ components: time: $ref: '#/components/schemas/Time' - Organization: - type: object - properties: - descriptor: - $ref: '#/components/schemas/Descriptor' - address: - $ref: '#/components/schemas/Address' - contact: - $ref: '#/components/schemas/Contact' - Name: type: string description: 'Describes the name of a person' @@ -2119,13 +2109,14 @@ components: format: date-time Organization: - description: Describes an organization such as a school, NGO, corporation, club, company etc.<br>This has properties like name,cred type: object properties: - name: - type: string - cred: - type: string + descriptor: + $ref: '#/components/schemas/Descriptor' + address: + $ref: '#/components/schemas/Address' + contact: + $ref: '#/components/schemas/Contact' Page: description: Describes a page in a search result From 705f3bb8f7c18a45b0a2fea7ce9c060d0cef2503 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:22:17 +0530 Subject: [PATCH 063/183] Added payload schema --- core/v0/api/core.yaml | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index af177107..6d589f8d 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2126,7 +2126,26 @@ components: type: string next_id: type: string - + + Payload: + type: object + properties: + persons: + type: object + properties: + count: + type: string + list: + items: + $ref: '#/components/schemas/Person' + cargo: + type: object + properties: + count: + type: string + list: + items: + $ref: '#/components/schemas/CargoItem' Payment: description: Describes the payment mechanism to be used for the order.<br>This has properties like uri,tl_method,params,type,status,time. For more info please check BECKN-RFC-002 <a href="https://github.com/beckn/protocol-specifications/blob/core-0.9.4-draft/docs/protocol-drafts/BECKN-002-Payments-On-Beckn-Enabled-Networks.md">Payments on Beckn-Enabled Networks</a> From 9e27bee290f97cdb1b21ff775be19313096d3622 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:23:10 +0530 Subject: [PATCH 064/183] Removed tl_method property from Payment --- core/v0/api/core.yaml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 6d589f8d..39e2d61f 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2155,13 +2155,6 @@ components: type: string description: 'A payment uri to be called by the BAP. If empty, then the payment is to be done offline. The details of payment should be present in the params object. If ```tl_method``` = http/get, then the payment details will be sent as url params. Two url param values, ```$transaction_id``` and ```$amount``` are mandatory. And example url would be : https://www.example.com/pay?txid=$transaction_id&amount=$amount&vpa=upiid&payee=shopez&billno=1234' format: uri - tl_method: - type: string - enum: - - http/get - - http/post - - payto - - upi params: type: object properties: From c802e942315e44232daefd0bde89c9d5e98ab95a Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:23:58 +0530 Subject: [PATCH 065/183] Added bank related params and vpas in Payment schema --- core/v0/api/core.yaml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 39e2d61f..30e69698 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2167,10 +2167,12 @@ components: $ref: '#/components/schemas/Price/properties/value' currency: $ref: '#/components/schemas/Price/properties/currency' - additionalProperties: - type: string - required: - - currency + bank_code: + type: string + bank_account_number: + type: string + virtual_payment_address: + type: string type: type: string enum: From 6d9db93ed5d7aa1808b585988c9dcf0bab2f3500 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:24:37 +0530 Subject: [PATCH 066/183] Added id to person schema --- core/v0/api/core.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 30e69698..67bc0f78 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2192,6 +2192,9 @@ components: description: Describes a person as any individual<br>This has the properties like name,image,dob,gender,cred,tags type: object properties: + id: + type: string + description: Describes the identity of the person name: $ref: '#/components/schemas/Name' image: From 6f8bb9b601ce16804f6bad076415691888aa017c Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:25:33 +0530 Subject: [PATCH 067/183] Added credentials in Person schema --- core/v0/api/core.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 67bc0f78..fb53a79d 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2205,8 +2205,10 @@ components: gender: type: string description: 'Gender of something, typically a Person, but possibly also fictional characters, animals, etc. While Male and Female may be used, text strings are also acceptable for people who do not identify as a binary gender' - cred: - type: string + creds: + type: array + items: + $ref: '#/components/schemas/Credential' tags: $ref: '#/components/schemas/Tags' From cba04a0ab382c9b90d0571346511fa83deae700e Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:27:13 +0530 Subject: [PATCH 068/183] Added feedback url as a response to a rating call --- core/v0/api/core.yaml | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index fb53a79d..660ee92f 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2327,30 +2327,27 @@ components: type: object properties: rating_category: - description: Category of the object being rated + description: Category of the entity being rated type: string id: description: Id of the object being rated type: string value: description: Rating value given to the object - type: number - minimum: 0 - feedback_form: - $ref: '#/components/schemas/FeedbackForm' - feedback_id: - $ref: '#/components/schemas/FeedbackUrl/properties/params/properties/feedback_id' + type: string RatingAck: description: Describes the acknowledgement that feedback or rating has been recorded by the BPP.<br> type: object properties: - feedback_ack: - description: If feedback has been recorded or not - type: boolean rating_ack: - description: If rating has been recorded or not type: boolean + feedback_ack: + type: boolean + feedback_url: + description: URL to a feedback form sent in response to a rating received + type: string + format: uri Scalar: description: Describes a scalar quantity.<br>This has properties like value, estimated_value, computed_value,range, unit From 517528fac423fff90dc88e24f27a7ed790587165 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:28:18 +0530 Subject: [PATCH 069/183] Updated Scalar schema fields to DecimalValue --- core/v0/api/core.yaml | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 660ee92f..9088b86b 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2359,23 +2359,20 @@ components: - CONSTANT - VARIABLE value: - type: number + $ref: '#/components/schemas/DecimalValue' estimated_value: - type: number + type: '#/components/schemas/DecimalValue' computed_value: - type: number + type: '#/components/schemas/DecimalValue' range: type: object properties: min: - type: number + type: '#/components/schemas/DecimalValue' max: - type: number + type: '#/components/schemas/DecimalValue' unit: type: string - required: - - value - - unit Schedule: description: Describes schedule as a repeating time period used to describe a regularly recurring event. At a minimum a schedule will specify frequency which describes the interval between occurrences of the event. Additional information can be provided to specify the schedule more precisely. This includes identifying the timestamps(s) of when the event will take place. Schedules may also have holidays to exclude a specific day from the schedule.<br>This has properties like frequency, holidays, times From 8eb777562f4d98b90b1bf600b35f0f088e767c36 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:43:47 +0530 Subject: [PATCH 070/183] Added cancellation terms --- core/v0/api/core.yaml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 9088b86b..0ba5b59c 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1421,6 +1421,23 @@ components: additional_description: $ref: '#/components/schemas/Descriptor' + CancellationTerms: + type: object + properties: + cancel_by: + type: string + format: date-time + refund_eligible: + type: boolean + refund_percentage: + type: integer + minimum: 0 + maximum: 100 + other_terms: + type: array + items: + type: string + CargoItem: type: object properties: From 6d733063d473a0dd04e66a175e29e8012254b7d0 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:44:08 +0530 Subject: [PATCH 071/183] Added order update terms --- core/v0/api/core.yaml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 0ba5b59c..db25974a 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2366,6 +2366,36 @@ components: type: string format: uri + ReplacementTerms: + type: object + properties: + replace_by: + type: string + format: date-time + replacement_eligible: + type: boolean + other_terms: + type: array + items: + type: string + + ReturnTerms: + type: object + properties: + return_by: + type: string + format: date-time + refund_eligible: + type: boolean + refund_percentage: + type: integer + minimum: 0 + maximum: 100 + other_terms: + type: array + items: + type: string + Scalar: description: Describes a scalar quantity.<br>This has properties like value, estimated_value, computed_value,range, unit type: object From 1463cb968871f8fd4cc08acb0735b5f85e2684aa Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:44:28 +0530 Subject: [PATCH 072/183] Added order update terms --- core/v0/api/core.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index db25974a..01ca791a 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2564,6 +2564,17 @@ components: - active - inactive + UpdateTerms: + type: object + properties: + update_by: + type: string + format: date-time + other_terms: + type: array + items: + type: string + Vehicle: description: Describes a vehicle is a device that is designed or used to transport people or cargo over land, water, air, or through space.<br>This has properties like category, capacity, make, model, size,variant,color,energy_type,registration type: object From dbc28b8de0a1c822c7f04a88e41e6c839a9bdcbd Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:46:05 +0530 Subject: [PATCH 073/183] Added cancellation, update, return and replacement terms in Order schema --- core/v0/api/core.yaml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 01ca791a..fa8088d7 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2106,14 +2106,14 @@ components: type: array items: $ref: '#/components/schemas/Fulfillment' - cancellation_policy: - $ref: '#/components/schemas/CancellationPolicy' - return_policy: - $ref: '#/components/schemas/ReturnPolicy' - replacement_policy: - $ref: '#/components/schemas/ReplacementPolicy' - update_policy: - $ref: '#/components/schemas/UpdatePolicy' + cancellation_terms: + $ref: '#/components/schemas/CancellationTerms' + return_terms: + $ref: '#/components/schemas/ReturnTerms' + replacement_terms: + $ref: '#/components/schemas/ReplacementTerms' + update_terms: + $ref: '#/components/schemas/UpdateTerms' quote: $ref: '#/components/schemas/Quotation' payment: From d5c967826b90e230168eb1cdaf0f96cda07cfe55 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:48:15 +0530 Subject: [PATCH 074/183] Updated version number to 1.0.0-draft --- core/v0/api/core.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index fa8088d7..fa4c57b5 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2,7 +2,7 @@ openapi: 3.0.0 info: title: Beckn Core API description: Beckn Core API specification - version: 0.9.3 + version: 1.0.0-draft security: - SubscriberAuth: [] From 91b1cd2ae9616771ed2f056b9b574f4ee029bcf0 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:51:41 +0530 Subject: [PATCH 075/183] Removed gateway subscriber auth --- core/v0/api/core.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index fa4c57b5..151b0035 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -6,7 +6,6 @@ info: security: - SubscriberAuth: [] - - GatewaySubscriberAuth: [] - GatewaySubscriberAuthNew: [] paths: /search: From 4134f6c03c6c42968eff1e250851a09fc126ef7a Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:53:08 +0530 Subject: [PATCH 076/183] Bug fixes in openapi file --- core/v0/api/core.yaml | 755 ++++++++++++++++++++++-------------------- 1 file changed, 396 insertions(+), 359 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 151b0035..ba66847f 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -22,17 +22,17 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: intent: - $ref: '#/components/schemas/Intent' + $ref: "#/components/schemas/Intent" required: - context - message responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -43,11 +43,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /select: @@ -63,12 +63,12 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: order: - $ref: '#/components/schemas/Order' + $ref: "#/components/schemas/Order" required: - order required: @@ -76,7 +76,7 @@ paths: - message responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -87,11 +87,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /init: @@ -107,19 +107,19 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: order: - $ref: '#/components/schemas/Order' + $ref: "#/components/schemas/Order" required: - order required: - context - message responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -130,11 +130,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /confirm: @@ -150,19 +150,19 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: order: - $ref: '#/components/schemas/Order' + $ref: "#/components/schemas/Order" required: - order required: - context - message responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -173,11 +173,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /status: @@ -193,19 +193,19 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: order_id: - $ref: '#/components/schemas/Order/properties/id' + $ref: "#/components/schemas/Order/properties/id" required: - order_id required: - context - message responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -216,11 +216,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /track: @@ -236,12 +236,12 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: order_id: - $ref: '#/components/schemas/Order/properties/id' + $ref: "#/components/schemas/Order/properties/id" callback_url: type: string format: uri @@ -251,7 +251,7 @@ paths: - context - message responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -262,11 +262,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /cancel: @@ -282,23 +282,23 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: order_id: - $ref: '#/components/schemas/Order/properties/id' + $ref: "#/components/schemas/Order/properties/id" cancellation_reason_id: - $ref: '#/components/schemas/Option/properties/id' + $ref: "#/components/schemas/Option/properties/id" descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" required: - order_id required: - context - message responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -309,11 +309,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /update: @@ -329,7 +329,7 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: @@ -337,7 +337,7 @@ paths: description: 'Comma separated values of order objects being updated. For example: ```"update_target":"item,billing,fulfillment"```' type: string order: - $ref: '#/components/schemas/Order' + $ref: "#/components/schemas/Order" required: - update_target - order @@ -345,7 +345,7 @@ paths: - context - message responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -356,11 +356,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /rating: @@ -376,14 +376,14 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: - $ref: '#/components/schemas/Rating' + $ref: "#/components/schemas/Rating" required: - context - message responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -394,11 +394,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message @@ -415,7 +415,7 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: @@ -426,7 +426,7 @@ paths: - context - message responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -437,11 +437,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message @@ -459,20 +459,20 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: catalog: - $ref: '#/components/schemas/Catalog' + $ref: "#/components/schemas/Catalog" required: - catalog error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - context responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -483,11 +483,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - context /on_select: @@ -503,18 +503,18 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: order: - $ref: '#/components/schemas/Order' + $ref: "#/components/schemas/Order" error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - context responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -525,11 +525,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /on_init: @@ -545,20 +545,20 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: order: - $ref: '#/components/schemas/Order' + $ref: "#/components/schemas/Order" required: - order error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - context responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -569,11 +569,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /on_confirm: @@ -589,20 +589,20 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: order: - $ref: '#/components/schemas/Order' + $ref: "#/components/schemas/Order" required: - order error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - context responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -613,11 +613,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /on_track: @@ -633,20 +633,20 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: tracking: - $ref: '#/components/schemas/Tracking' + $ref: "#/components/schemas/Tracking" required: - tracking error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - context responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -657,11 +657,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /on_cancel: @@ -677,20 +677,20 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: order: - $ref: '#/components/schemas/Order' + $ref: "#/components/schemas/Order" required: - order error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - context responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -701,11 +701,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /on_update: @@ -721,20 +721,20 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: order: - $ref: '#/components/schemas/Order' + $ref: "#/components/schemas/Order" required: - order error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - context responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -745,11 +745,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /on_status: @@ -765,20 +765,20 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: order: - $ref: '#/components/schemas/Order' + $ref: "#/components/schemas/Order" required: - order error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - context responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -789,11 +789,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /on_rating: @@ -809,16 +809,18 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: - feedback: - $ref: '#/components/schemas/FeedbackForm' + type: object + properties: + feedback: + $ref: "#/components/schemas/FeedbackForm" error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - context responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -829,11 +831,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /on_support: @@ -849,7 +851,7 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: @@ -863,11 +865,11 @@ paths: type: string format: uri error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - context responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -878,11 +880,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message @@ -899,9 +901,9 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -912,11 +914,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message @@ -933,16 +935,16 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: cancellation_reasons: type: array items: - $ref: '#/components/schemas/Option' + $ref: "#/components/schemas/Option" responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -953,11 +955,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message @@ -974,9 +976,9 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -987,11 +989,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message @@ -1008,13 +1010,13 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" return_reasons: type: array items: - $ref: '#/components/schemas/Option' + $ref: "#/components/schemas/Option" responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -1025,11 +1027,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message @@ -1046,9 +1048,9 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -1059,11 +1061,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message @@ -1080,13 +1082,13 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' - rating_categories: - type: array - items: - $ref: '#/components/schemas/Rating/properties/rating_category' + $ref: "#/components/schemas/Context" + rating_categories: + type: array + items: + $ref: "#/components/schemas/Rating/properties/rating_category" responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -1097,11 +1099,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message @@ -1118,9 +1120,9 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -1131,11 +1133,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message @@ -1152,13 +1154,13 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" feedback_categories: type: array items: - $ref: '#/components/schemas/Rating/properties/rating_category' + $ref: "#/components/schemas/Rating/properties/rating_category" responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -1169,14 +1171,14 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message - + /get_feedback_form: post: tags: @@ -1190,16 +1192,16 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: rating_value: - $ref: '#/components/schemas/Rating/properties/value' + $ref: "#/components/schemas/Rating/properties/value" rating_category: - $ref: '#/components/schemas/Rating/properties/rating_category' + $ref: "#/components/schemas/Rating/properties/rating_category" responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -1210,11 +1212,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message @@ -1224,19 +1226,19 @@ paths: - BAP Meta APIs description: Get a feedback form from the BPP requestBody: - description: Feedback form sent by the BPP + description: Feedback form sent by the BPP content: application/json: schema: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: - $ref: '#/components/schemas/Feedback' + $ref: "#/components/schemas/Feedback" responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -1247,11 +1249,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message @@ -1275,7 +1277,7 @@ components: properties: status: type: string - description: 'Describe the status of the ACK response. If schema validation passes, status is ACK else it is NACK' + description: "Describe the status of the ACK response. If schema validation passes, status is ACK else it is NACK" enum: - ACK - NACK @@ -1288,11 +1290,11 @@ components: properties: id: type: string - description: 'ID of the add-on. This follows the syntax {item.id}/add-on/{add-on unique id} for item specific add-on OR ' + description: "ID of the add-on. This follows the syntax {item.id}/add-on/{add-on unique id} for item specific add-on OR " descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" price: - $ref: '#/components/schemas/Price' + $ref: "#/components/schemas/Price" Address: description: Describes the postal address of a location. This is the address that can be accessed by mail.<br>This has properties like door number, name of the address, building number, street, locality, ward, state and country, and area code<br>This schema is used in the following locations <br><ul><li>location.address</li><li>billing.address</li></ul><br>This is used in the following situations.<br><ul><li>This is typically used during the discovery stage when specifying the address of a provider. For example- When specifying the address of a store</li><li>This is typically used during the order stage when specifying the billing address of a consumer</li><li>This is typically used during the order stage when specifying the address where fulfillment starts. For example- When specifying pickup location</li><li>This is typically used during the order stage when specifying the address where fulfillment ends. For example- When specifying drop location</li></ul><br>This is used to allow the fulfillment agent to reach the exact location of fulfillment start or end. This is done because, just GPS coordinates may not be enough to reach the exact points of fulfillment. The postal address provides granularity till the door number of a physical location. <br>This is used by the BAP to send the billing address of the user to the BPP for creating an order.<br>This is used by the user to physically go to the store location during store-pickup.<br>This is used by the fulfillment agent to physically go to the provider's location to pickup an order<br>This is used by the fulfillment agent to physically go to the consumer's location to deliver an order<br>This is used by a BPP for saving the billing address for confirming an order<br>The address can be used by the consumer app to geolocate the position of a provider's store on a map. <br>The address can be used by the agent's app to geolocate the position of the start of fulfillment on a map<br>The address can be used by the agent to physically go to the exact location where a fulfillment starts of ends.<br>The address will be saved as the billing address for the order created by the BPP @@ -1305,7 +1307,7 @@ components: description: Door / Shop number of the address name: type: string - description: 'Name of address if applicable. Example, shop name' + description: "Name of address if applicable. Example, shop name" building: type: string description: Name of the building or block @@ -1314,7 +1316,7 @@ components: description: Street name or number locality: type: string - description: 'Name of the locality, apartments' + description: "Name of the locality, apartments" ward: type: string description: Name or number of the ward if applicable @@ -1329,23 +1331,23 @@ components: description: Country name area_code: type: string - description: 'Area code. This can be Pincode, ZIP code or any equivalent' + description: "Area code. This can be Pincode, ZIP code or any equivalent" Agent: description: Describes the direct performer or driver or executor of the fulfillment of an order. In the healthcare domain it can be a doctor while in the mobility domain it can be a taxi driver.<br>This has properties such as name, image, dob, gender, cred, tags, phone, email and rateable<br>This schema is used in the agent property of the Fulfillment schema object<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP wants to convey details of the person who will be fulfilling the order so that the customer can make an informed decision about the product or service they need to purchase</li><li>This is typically used in the fulfillment stage when the BPP assigns an agent to fulfill the order post confirmation of the same</li></ul><br>This is used to allow the BPP to send the details of the person fulfilling the order to the end user. allOf: - - $ref: '#/components/schemas/Person' - - $ref: '#/components/schemas/Contact' + - $ref: "#/components/schemas/Person" + - $ref: "#/components/schemas/Contact" - type: object properties: rateable: - $ref: '#/components/schemas/Rateable' + $ref: "#/components/schemas/Rateable" Authorization: description: Describes an authorization mechanism used in the order lifecycle. Can be used to attach authorization token to any interaction.<br>This has properties like type, token, valid_from, valid_to and status<br>This is used in the following situations.<br><ul><li>Typically in the fulfillment stage when BPP sends an authorization mechanism that the BAP needs to use for authorizing any interaction</li></ul><br>This is used to allow a user to authorize the validity of their order with a person executing the order so that fulfillment of the order can start/end. This is also used as proof of presence of the customer so that a person executing the order can start/end the fulfillment.<br>This can be used by the user to start fulfillment by providing the token as proof of presence.<br>This can be used by the user as a proof of purchase of service to a person executing the order at start/end of fulfillment<br>This can be used by the user to end fulfillment by providing the token as proof of completion of service.<br><br>The authorization mechanism can be used in several ways to authorize the start or end of a fulfillment.<br>In the mobility domain a BPP which renders taxi services may give an OTP to the BAP after confirming the order. The end user will give the OTP to the taxi driver as proof of presence to start the taxi service<br>In the logistics domain a BPP that renders courier services can give an OTP to the BAP while the delivery service is being performed by a delivery agent. The end user will give the OTP to the delivery agent so that they can mark the package as successfully delivered.<br>In the mobility domain a public transit BPP can send a signed QR code string to the BAP. The BAP will render it as a QR code which the end user will present to a ticketing employee who can read the QR code using their device and authenticate the validity of the ticket type: object properties: - type: + type: type: string description: Type of authorization mechanism used token: @@ -1353,11 +1355,11 @@ components: description: Token used for authorization valid_from: type: string - format: date-time + format: date-time description: Timestamp in RFC3339 format from which token is valid valid_to: type: string - format: date-time + format: date-time description: Timestamp in RFC3339 format until which token is valid status: type: string @@ -1371,16 +1373,16 @@ components: description: Personal details of the customer needed for billing. type: string organization: - $ref: '#/components/schemas/Organization' + $ref: "#/components/schemas/Organization" address: - $ref: '#/components/schemas/Address' + $ref: "#/components/schemas/Address" email: type: string format: email phone: type: string time: - $ref: '#/components/schemas/Time' + $ref: "#/components/schemas/Time" tax_number: type: string created_at: @@ -1404,21 +1406,21 @@ components: policies: type: array items: - $ref: '#/components/schemas/Policy' + $ref: "#/components/schemas/Policy" time: type: string format: date-time cancelled_by: type: string reasons: - $ref: '#/components/schemas/Option' + $ref: "#/components/schemas/Option" selected_reason: type: object properties: id: - $ref: '#/components/schemas/Option/properties/id' + $ref: "#/components/schemas/Option/properties/id" additional_description: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" CancellationTerms: type: object @@ -1441,37 +1443,36 @@ components: type: object properties: descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" dimensions: - $ref: '#/components/schemas/Dimensions' - + $ref: "#/components/schemas/Dimensions" Catalog: description: Describes the products or services offered by a BPP. This is typically sent as the response to a search intent from a BAP. The payment terms, offers and terms of fulfillment supported by the BPP can also be included here. The BPP can show hierarchical nature of products/services in its catalog using the parent_category_id in categories. The BPP can also send a ttl (time to live) in the context which is the duration for which a BAP can cache the catalog and use the cached catalog. <br>This has properties like bbp/descriptor,bbp/categories,bbp/fulfillments,bbp/payments,bbp/offers,bbp/providers and exp<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP sends the details of the products and services it offers as response to a search intent from the BAP. </li></ul> type: object properties: bpp/descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" bpp/categories: type: array items: - $ref: '#/components/schemas/Category' + $ref: "#/components/schemas/Category" bpp/fulfillments: type: array items: - $ref: '#/components/schemas/Fulfillment' + $ref: "#/components/schemas/Fulfillment" bpp/payments: type: array items: - $ref: '#/components/schemas/Payment' + $ref: "#/components/schemas/Payment" bpp/offers: type: array items: - $ref: '#/components/schemas/Offer' + $ref: "#/components/schemas/Offer" bpp/providers: type: array items: - $ref: '#/components/schemas/Provider' + $ref: "#/components/schemas/Provider" exp: type: string description: Time after which catalog has to be refreshed @@ -1485,22 +1486,22 @@ components: type: string description: Unique id of the category parent_category_id: - $ref: '#/components/schemas/Category/properties/id' + $ref: "#/components/schemas/Category/properties/id" descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" time: - $ref: '#/components/schemas/Time' + $ref: "#/components/schemas/Time" tags: - $ref: '#/components/schemas/Tags' + $ref: "#/components/schemas/Tags" Circle: description: Describes a circular region of a specified radius centered at a specified GPS coordinate.<br>This has properties like gps,radius<br>This is used when a circular area needs to be represented as a location. type: object properties: gps: - $ref: '#/components/schemas/Gps' + $ref: "#/components/schemas/Gps" radius: - $ref: '#/components/schemas/Scalar' + $ref: "#/components/schemas/Scalar" required: - gps - radius @@ -1521,9 +1522,9 @@ components: type: object properties: name: - '#/components/schemas/Name' + $ref: "#/components/schemas/Name" address: - $ref: '#/components/schemas/Address' + $ref: "#/components/schemas/Address" phone: type: string email: @@ -1532,18 +1533,18 @@ components: type: object description: A Jcard object as per draft-ietf-jcardcal-jcard-03 specification tags: - $ref: '#/components/schemas/Tags' - + $ref: "#/components/schemas/Tags" + Context: description: Describes the context header of the message being sent.<br>This has properties like domain,country,city,action,code_version,bap_id,bap_uri,bpp_id,bpp_uri,transaction_id,message-id,timestamp,key,ttl type: object properties: domain: - $ref: '#/components/schemas/Domain' + $ref: "#/components/schemas/Domain" country: - $ref: '#/components/schemas/Country/properties/code' + $ref: "#/components/schemas/Country/properties/code" city: - $ref: '#/components/schemas/City/properties/code' + $ref: "#/components/schemas/City/properties/code" action: type: string description: Defines the Beckn API call. Any actions other than the enumerated actions are not supported by Beckn Protocol @@ -1634,7 +1635,7 @@ components: type: string type: type: string - default: 'VerifiableCredential' + default: "VerifiableCredential" issuer: type: string issuance_date: @@ -1654,11 +1655,11 @@ components: type: string type: type: string - + DecimalValue: description: Describes a numerical value in decimal form type: string - pattern: '[+-]?([0-9]*[.])?[0-9]+' + pattern: "[+-]?([0-9]*[.])?[0-9]+" Descriptor: description: Describes the description used to describe or identify a real world object<br>This has properties like name,code,symbol,short_desc,long_desc,images,audio,3d_render @@ -1677,7 +1678,7 @@ components: images: type: array items: - $ref: '#/components/schemas/Image' + $ref: "#/components/schemas/Image" audio: type: string format: uri @@ -1693,12 +1694,12 @@ components: type: object properties: length: - $ref: '#/components/schemas/Scalar' + $ref: "#/components/schemas/Scalar" breadth: - $ref: '#/components/schemas/Scalar' + $ref: "#/components/schemas/Scalar" height: - $ref: '#/components/schemas/Scalar' - + $ref: "#/components/schemas/Scalar" + Document: description: Describes a piece of written or printed matter in electronic form that provides information or evidence or that serves as an official record. This will be given as a URL. In the case of sensitive information being exchanged, such documents may be encrypted and additional authorization such as an an OTP or password may be implemented when the URL is accessed.<br>This has properties like url,label<br>This is used in the following situations.<br><ul><li>This is typically used in the order stage if any documents from the user are needed by the BPP to confirm the order</li><li>This is typically used in the fulfilment and post fulfillment stage if the BPP needs to send any documents related to the order to the user</li></ul><br>This is used to allow documents to be exchanged between the BAP and the BPP type: object @@ -1708,7 +1709,7 @@ components: format: uri label: type: string - + Domain: description: Described the sector, industry or field for which the current beckn transaction is for. Examples of domains are mobility, local retail, logistics etc. Each network can choose its own codes for specifying a domain within the network. type: string @@ -1731,7 +1732,7 @@ components: - JSON-SCHEMA-ERROR code: type: string - description: 'Beckn specific error code. For full list of error codes, refer to docs/protocol-drafts/BECKN-RFC-005-ERROR-CODES-DRAFT-01.md of this repo' + description: "Beckn specific error code. For full list of error codes, refer to docs/protocol-drafts/BECKN-RFC-005-ERROR-CODES-DRAFT-01.md of this repo" path: type: string description: Path to json schema generating the error. Used only during json schema validation errors @@ -1747,16 +1748,23 @@ components: type: object properties: feedback_form: - $ref: '#/components/schemas/FeedbackForm' + $ref: "#/components/schemas/FeedbackForm" feedback_url: +<<<<<<< HEAD $ref: '#/components/schemas/FeedbackUrl' FeedbackForm: description: Describes a feedback form that a BPP can send to get feedback from the BAP. The BAP render this and will send the response of the form in this same structure.<br>This has properties like description,id,parent_id,question,answer,answer_type<br>This is used in the following situations.<br><ul><li>This is typically used in the post fulfillment stage when a BAP sends feedback for a service or product or a fulfillment agent provided by the BPP in a feedback form</li><li>This is typically used in the post fulfillment stage when the BPP sends the feedback form that needs to be used by the BAP</li></ul> +======= + $ref: "#/components/schemas/FeedbackUrl" + + FeedbackForm: + description: Describes a feedback form that a BPP can send to get feedback from the BAP +>>>>>>> Bug fixes in openapi file type: array items: - $ref: '#/components/schemas/FeedbackFormElement' - + $ref: "#/components/schemas/FeedbackFormElement" + FeedbackFormElement: description: Describes a single element in the feedback form. It can be question or an answer to the question.<br>This has properties like id,parent_id,question,answer,answer_type type: object @@ -1764,21 +1772,21 @@ components: id: type: string parent_id: - $ref: '#/components/schemas/FeedbackFormElement/properties/id' + $ref: "#/components/schemas/FeedbackFormElement/properties/id" question: description: Specifies the question to which the answer options will be contained in the child FeedbackFormElements type: string answer: - description: Specifies an answer option to which the question will be in the FeedbackFormElement specified in parent_id + description: Specifies an answer option to which the question will be in the FeedbackFormElement specified in parent_id type: string answer_type: description: Specifies how the answer option should be rendered. type: string - enum : + enum: - radio - checkbox - text - + FeedbackUrl: description: Describes the feedback URL that an end customer can use to provide feedback to the BPP for products or services.<br>This has properties like url,tl_method,params<br>This is used in the following situations.<br><ul><li>This is typically used in the post fulfillment stage when the BPP sends the feedback URL that needs to be used by the BAP for providing feedback for a service or product or fulfillment agent</li></ul> type: object @@ -1803,9 +1811,6 @@ components: required: - feedback_id - - - Fulfillment: description: Describes how a single product/service will be rendered/fulfilled to the end customer<br>This has properties like id,type,provider_id,rating,state,tracking, customer,agent,person,contact,vehicle,start,end,rateable,tags<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP sends the fulfillment terms to the BAP</li><li>This is typically used in the order stage when the BPP sends the fulfillment terms to the BAP</li><li>This is typically used in the fulfillment stage when the BPP sends the status and current details of fulfillment to the BAP</li></ul> type: object @@ -1817,11 +1822,11 @@ components: type: string description: This describes the type of fulfillment provider_id: - $ref: '#/components/schemas/Provider/properties/id' + $ref: "#/components/schemas/Provider/properties/id" rating: - $ref: '#/components/schemas/Rating/properties/value' + $ref: "#/components/schemas/Rating/properties/value" state: - $ref: '#/components/schemas/State' + $ref: "#/components/schemas/State" tracking: type: boolean description: Indicates whether the fulfillment allows tracking @@ -1830,81 +1835,85 @@ components: type: object properties: person: - $ref: '#/components/schemas/Person' + $ref: "#/components/schemas/Person" contact: - $ref: '#/components/schemas/Contact' + $ref: "#/components/schemas/Contact" agent: - $ref: '#/components/schemas/Agent' + $ref: "#/components/schemas/Agent" person: - $ref: '#/components/schemas/Person' + $ref: "#/components/schemas/Person" contact: - $ref: '#/components/schemas/Contact' + $ref: "#/components/schemas/Contact" vehicle: - $ref: '#/components/schemas/Vehicle' + $ref: "#/components/schemas/Vehicle" start: description: Details on the start of fulfillment type: object properties: location: - $ref: '#/components/schemas/Location' + $ref: "#/components/schemas/Location" time: - $ref: '#/components/schemas/Time' + $ref: "#/components/schemas/Time" instructions: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" contact: - $ref: '#/components/schemas/Contact' + $ref: "#/components/schemas/Contact" person: - $ref: '#/components/schemas/Person' + $ref: "#/components/schemas/Person" authorization: - $ref: '#/components/schemas/Authorization' + $ref: "#/components/schemas/Authorization" end: description: Details on the end of fulfillment type: object properties: location: - $ref: '#/components/schemas/Location' + $ref: "#/components/schemas/Location" time: - $ref: '#/components/schemas/Time' + $ref: "#/components/schemas/Time" instructions: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" contact: - $ref: '#/components/schemas/Contact' + $ref: "#/components/schemas/Contact" person: - $ref: '#/components/schemas/Person' + $ref: "#/components/schemas/Person" authorization: - $ref: '#/components/schemas/Authorization' + $ref: "#/components/schemas/Authorization" rateable: - $ref: '#/components/schemas/Rateable' + $ref: "#/components/schemas/Rateable" tags: - $ref: '#/components/schemas/Tags' + $ref: "#/components/schemas/Tags" Gps: description: Describes a GPS coordinates which is a unique identifier of a precise geographic location on the earth.<br> type: string pattern: '^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$' Image: +<<<<<<< HEAD description: 'Image of an object. <br/><br/> A url based image will look like <br/><br/>```uri:https://path/to/image``` <br/><br/> An image can also be sent as a data string. For example : <br/><br/> ```data:js87y34ilhriuho84r3i4```' +======= + description: "Image of an object. <br/><br/> A url based image will look like <br/><br/>```uri:http://path/to/image``` <br/><br/> An image can also be sent as a data string. For example : <br/><br/> ```data:js87y34ilhriuho84r3i4```" +>>>>>>> Bug fixes in openapi file type: string Intent: description: Intent of a user. Used in the discovery stage for declaring the intent of the user. BAP can declare the intent of the consumer including <ul><li>What they want (A product, service, offer)</li><li>Who they want (A seller, service provider, agent etc)</li><li>Where they want it and where they want it from</li><li>When they want it (start and end time of fulfillment</li><li>How they want to pay for it</li></ul><br>This has properties like descriptor,provider,fulfillment,payment,category,offer,item,tags<br>This is typically used by the BAP to send the purpose of the user's search to the BPP. This will be used by the BPP to find products or services it offers that may match the user's intent.<br>For example, in Mobility, the mobility consumer declares a mobility intent. In this case, the mobility consumer declares information that describes various aspects of their journey like,<ul><li>Where would they like to begin their journey (intent.fulfillment.start.location)</li><li>Where would they like to end their journey (intent.fulfillment.end.location)</li><li>When would they like to begin their journey (intent.fulfillment.start.time)</li><li>When would they like to end their journey (intent.fulfillment.end.time)</li><li>Who is the transport service provider they would like to avail services from (intent.provider)</li><li>Who is traveling (This is not recommended in public networks) (intent.fulfillment.customer)</li><li>What kind of fare product would they like to purchase (intent.item)</li><li>What add-on services would they like to avail</li><li>What offers would they like to apply on their booking (intent.offer)</li><li>What category of services would they like to avail (intent.category)</li><li>What additional luggage are they carrying</li><li>How would they like to pay for their journey (intent.payment)</li></ul><br>For example, in health domain, a consumer declares the intent for a lab booking the describes various aspects of their booking like,<ul><li>Where would they like to get their scan/test done (intent.fulfillment.start.location)</li><li>When would they like to get their scan/test done (intent.fulfillment.start.time)</li><li>When would they like to get the results of their test/scan (intent.fulfillment.end.time)</li><li>Who is the service provider they would like to avail services from (intent.provider)</li><li>Who is getting the test/scan (intent.fulfillment.customer)</li><li>What kind of test/scan would they like to purchase (intent.item)</li><li>What category of services would they like to avail (intent.category)</li><li>How would they like to pay for their journey (intent.payment)</li></ul> type: object properties: descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" provider: - $ref: '#/components/schemas/Provider' + $ref: "#/components/schemas/Provider" fulfillment: - $ref: '#/components/schemas/Fulfillment' + $ref: "#/components/schemas/Fulfillment" payment: - $ref: '#/components/schemas/Payment' + $ref: "#/components/schemas/Payment" category: - $ref: '#/components/schemas/Category' + $ref: "#/components/schemas/Category" offer: - $ref: '#/components/schemas/Offer' + $ref: "#/components/schemas/Offer" item: - $ref: '#/components/schemas/Item' + $ref: "#/components/schemas/Item" tags: - $ref: '#/components/schemas/Tags' - + $ref: "#/components/schemas/Tags" + ItemQuantity: description: Describes the count or amount of an item<br>This has properties like allocated,available,maximum,minimum,selected type: object @@ -1916,7 +1925,7 @@ components: type: integer minimum: 0 measure: - $ref: '#/components/schemas/Scalar' + $ref: "#/components/schemas/Scalar" available: type: object properties: @@ -1924,7 +1933,7 @@ components: type: integer minimum: 0 measure: - $ref: '#/components/schemas/Scalar' + $ref: "#/components/schemas/Scalar" maximum: type: object properties: @@ -1932,7 +1941,7 @@ components: type: integer minimum: 1 measure: - $ref: '#/components/schemas/Scalar' + $ref: "#/components/schemas/Scalar" minimum: type: object properties: @@ -1940,7 +1949,7 @@ components: type: integer minimum: 0 measure: - $ref: '#/components/schemas/Scalar' + $ref: "#/components/schemas/Scalar" selected: type: object properties: @@ -1948,7 +1957,7 @@ components: type: integer minimum: 0 measure: - $ref: '#/components/schemas/Scalar' + $ref: "#/components/schemas/Scalar" Item: description: Describes a product or a service offered to the end consumer by the provider. In the mobility domain item can represent a fare product like one way journey while in the logistics domain it can represent the delivery service offering while in the local retail domain it can represent a product like a grocery item.<br>This has properties like id,parent_item_id,descriptor,price,category_id,fulfillment_id,rating,time,location_id,time,rateable,matched,related,recommended, tags<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP sends the catalog of products or services it offers to the BAP in the items array</li><li>This is typically used in the order stage when the BAP sends the details of the item the user wants to purchase</li><li>This is typically used in the fulfillment stage when the BPP/BAP sends the order object containing the details of the products or services purchased in the order</li></ul> type: object @@ -1957,27 +1966,27 @@ components: description: This is the most unique identifier of a service item. An example of an Item ID could be the SKU of a product. type: string parent_item_id: - $ref: '#/components/schemas/Item/properties/id' + $ref: "#/components/schemas/Item/properties/id" descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" price: - $ref: '#/components/schemas/Price' + $ref: "#/components/schemas/Price" quantity: - $ref: '#/components/schemas/ItemQuantity' + $ref: "#/components/schemas/ItemQuantity" category_id: - $ref: '#/components/schemas/Category/properties/id' + $ref: "#/components/schemas/Category/properties/id" fulfillment_id: - $ref: '#/components/schemas/Fulfillment/properties/id' + $ref: "#/components/schemas/Fulfillment/properties/id" rating: - $ref: '#/components/schemas/Rating/properties/value' + $ref: "#/components/schemas/Rating/properties/value" location_id: - $ref: '#/components/schemas/Location/properties/id' + $ref: "#/components/schemas/Location/properties/id" payment_id: - $ref: '#/components/schemas/Payment/properties/id' + $ref: "#/components/schemas/Payment/properties/id" time: - $ref: '#/components/schemas/Time' + $ref: "#/components/schemas/Time" rateable: - $ref: '#/components/schemas/Rateable' + $ref: "#/components/schemas/Rateable" matched: type: boolean related: @@ -1985,7 +1994,7 @@ components: recommended: type: boolean tags: - $ref: '#/components/schemas/Tags' + $ref: "#/components/schemas/Tags" Language: description: Describes a specific language using a language code.<br>This has properties like code @@ -2001,29 +2010,42 @@ components: id: type: string descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" gps: - $ref: '#/components/schemas/Gps' + $ref: "#/components/schemas/Gps" address: - $ref: '#/components/schemas/Address' + $ref: "#/components/schemas/Address" station_code: type: string city: - $ref: '#/components/schemas/City' + $ref: "#/components/schemas/City" country: - $ref: '#/components/schemas/Country' + $ref: "#/components/schemas/Country" circle: - $ref: '#/components/schemas/Circle' + $ref: "#/components/schemas/Circle" polygon: type: string 3dspace: type: string time: - $ref: '#/components/schemas/Time' + $ref: "#/components/schemas/Time" + +<<<<<<< HEAD +======= + Organization: + type: object + properties: + descriptor: + $ref: "#/components/schemas/Descriptor" + address: + $ref: "#/components/schemas/Address" + contact: + $ref: "#/components/schemas/Contact" +>>>>>>> Bug fixes in openapi file Name: type: string - description: 'Describes the name of a person' + description: "Describes the name of a person" Offer: description: Describes how a product or a service will be rendered at a reduced price to the user<br>This has properties like id,descriptor,location_ids,category_ids,item_ids,time @@ -2032,21 +2054,21 @@ components: id: type: string descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" location_ids: type: array items: - $ref: '#/components/schemas/Location/properties/id' + $ref: "#/components/schemas/Location/properties/id" category_ids: type: array items: - $ref: '#/components/schemas/Category/properties/id' + $ref: "#/components/schemas/Category/properties/id" item_ids: type: array items: - $ref: '#/components/schemas/Item/properties/id' + $ref: "#/components/schemas/Item/properties/id" time: - $ref: '#/components/schemas/Time' + $ref: "#/components/schemas/Time" Operator: description: Describes the agent of a service @@ -2070,7 +2092,7 @@ components: id: type: string descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" Order: description: Describes an order which contains the terms, details, status and identifier of a transaction between a BAP and a BPP. This is usually an exchange of goods or services for money.<br>This has properties like id,state,provider,items,add_ons,offers,documents,billings,fulfillment,quote,payment,created_at,updated_at<br>This is used in the following situations.<br><ul><li>This is typically used in the order stage when the BAP sends the details of the order it wishes to create</li><li>This is typically used in the fulfillment stage when the BPP/BAP sends the order details</li></ul> @@ -2082,41 +2104,41 @@ components: state: type: string provider: - $ref: '#/components/schemas/Provider' + $ref: "#/components/schemas/Provider" items: type: array items: - $ref: '#/components/schemas/Item' + $ref: "#/components/schemas/Item" add_ons: type: array items: - $ref: '#/components/schemas/AddOn' + $ref: "#/components/schemas/AddOn" offers: type: array items: - $ref: '#/components/schemas/Offer' + $ref: "#/components/schemas/Offer" documents: type: array items: - $ref: '#/components/schemas/Document' + $ref: "#/components/schemas/Document" billing: - $ref: '#/components/schemas/Billing' + $ref: "#/components/schemas/Billing" fulfillments: type: array items: - $ref: '#/components/schemas/Fulfillment' + $ref: "#/components/schemas/Fulfillment" cancellation_terms: - $ref: '#/components/schemas/CancellationTerms' + $ref: "#/components/schemas/CancellationTerms" return_terms: - $ref: '#/components/schemas/ReturnTerms' + $ref: "#/components/schemas/ReturnTerms" replacement_terms: - $ref: '#/components/schemas/ReplacementTerms' + $ref: "#/components/schemas/ReplacementTerms" update_terms: - $ref: '#/components/schemas/UpdateTerms' + $ref: "#/components/schemas/UpdateTerms" quote: - $ref: '#/components/schemas/Quotation' + $ref: "#/components/schemas/Quotation" payment: - $ref: '#/components/schemas/Payment' + $ref: "#/components/schemas/Payment" created_at: type: string format: date-time @@ -2142,7 +2164,7 @@ components: type: string next_id: type: string - + Payload: type: object properties: @@ -2153,7 +2175,7 @@ components: type: string list: items: - $ref: '#/components/schemas/Person' + $ref: "#/components/schemas/Person" cargo: type: object properties: @@ -2161,15 +2183,17 @@ components: type: string list: items: - $ref: '#/components/schemas/CargoItem' + $ref: "#/components/schemas/CargoItem" Payment: description: Describes the payment mechanism to be used for the order.<br>This has properties like uri,tl_method,params,type,status,time. For more info please check BECKN-RFC-002 <a href="https://github.com/beckn/protocol-specifications/blob/core-0.9.4-draft/docs/protocol-drafts/BECKN-002-Payments-On-Beckn-Enabled-Networks.md">Payments on Beckn-Enabled Networks</a> type: object properties: + id: + type: string uri: type: string - description: 'A payment uri to be called by the BAP. If empty, then the payment is to be done offline. The details of payment should be present in the params object. If ```tl_method``` = http/get, then the payment details will be sent as url params. Two url param values, ```$transaction_id``` and ```$amount``` are mandatory. And example url would be : https://www.example.com/pay?txid=$transaction_id&amount=$amount&vpa=upiid&payee=shopez&billno=1234' + description: "A payment uri to be called by the BAP. If empty, then the payment is to be done offline. The details of payment should be present in the params object. If ```tl_method``` = http/get, then the payment details will be sent as url params. Two url param values, ```$transaction_id``` and ```$amount``` are mandatory. And example url would be : https://www.example.com/pay?txid=$transaction_id&amount=$amount&vpa=upiid&payee=shopez&billno=1234" format: uri params: type: object @@ -2180,9 +2204,9 @@ components: transaction_status: type: string amount: - $ref: '#/components/schemas/Price/properties/value' + $ref: "#/components/schemas/Price/properties/value" currency: - $ref: '#/components/schemas/Price/properties/currency' + $ref: "#/components/schemas/Price/properties/currency" bank_code: type: string bank_account_number: @@ -2202,7 +2226,7 @@ components: - PAID - NOT-PAID time: - $ref: '#/components/schemas/Time' + $ref: "#/components/schemas/Time" Person: description: Describes a person as any individual<br>This has the properties like name,image,dob,gender,cred,tags @@ -2212,21 +2236,21 @@ components: type: string description: Describes the identity of the person name: - $ref: '#/components/schemas/Name' + $ref: "#/components/schemas/Name" image: - $ref: '#/components/schemas/Image' + $ref: "#/components/schemas/Image" dob: type: string format: date gender: type: string - description: 'Gender of something, typically a Person, but possibly also fictional characters, animals, etc. While Male and Female may be used, text strings are also acceptable for people who do not identify as a binary gender' + description: "Gender of something, typically a Person, but possibly also fictional characters, animals, etc. While Male and Female may be used, text strings are also acceptable for people who do not identify as a binary gender" creds: type: array items: - $ref: '#/components/schemas/Credential' + $ref: "#/components/schemas/Credential" tags: - $ref: '#/components/schemas/Tags' + $ref: "#/components/schemas/Tags" Policy: description: Describes a policy.<br>This has properties like id_description,parent_policy_id,time @@ -2235,11 +2259,11 @@ components: id: type: string descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" parent_policy_id: - $ref: '#/components/schemas/Policy/properties/id' + $ref: "#/components/schemas/Policy/properties/id" time: - $ref: '#/components/schemas/Time' + $ref: "#/components/schemas/Time" Price: description: Describes the price of a product or service<br>This has properties like currency_value,estimated_value,computed_value,listed_value,offered_value,Minimum_value,maximum_value @@ -2248,80 +2272,84 @@ components: currency: type: string value: - $ref: '#/components/schemas/DecimalValue' + $ref: "#/components/schemas/DecimalValue" estimated_value: - $ref: '#/components/schemas/DecimalValue' + $ref: "#/components/schemas/DecimalValue" computed_value: - $ref: '#/components/schemas/DecimalValue' + $ref: "#/components/schemas/DecimalValue" listed_value: - $ref: '#/components/schemas/DecimalValue' + $ref: "#/components/schemas/DecimalValue" offered_value: - $ref: '#/components/schemas/DecimalValue' + $ref: "#/components/schemas/DecimalValue" minimum_value: - $ref: '#/components/schemas/DecimalValue' + $ref: "#/components/schemas/DecimalValue" maximum_value: - $ref: '#/components/schemas/DecimalValue' - + $ref: "#/components/schemas/DecimalValue" + Provider: +<<<<<<< HEAD description: Describes a service provider. This can be a restaurant, a hospital, a Store etc<br>This has properties like id,descriptor,category_id,rating,time,categories,fulfillment,payments,locations,offers,items,exp,rateables,tags +======= + description: "Describes a service provider. This can be a restaurant, a hospital, a Store etc" +>>>>>>> Bug fixes in openapi file type: object properties: id: type: string - description: 'Id of the provider' + description: "Id of the provider" descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" category_id: type: string - description: 'Category Id of the provider' + description: "Category Id of the provider" rating: - $ref: '#/components/schemas/Rating/properties/value' + $ref: "#/components/schemas/Rating/properties/value" time: - $ref: '#/components/schemas/Time' + $ref: "#/components/schemas/Time" categories: type: array items: - $ref: '#/components/schemas/Category' + $ref: "#/components/schemas/Category" fulfillments: type: array items: - $ref: '#/components/schemas/Fulfillment' + $ref: "#/components/schemas/Fulfillment" payments: type: array items: - $ref: '#/components/schemas/Payment' + $ref: "#/components/schemas/Payment" locations: type: array items: allOf: - - $ref: '#/components/schemas/Location' - - type: object - properties: - rateable: - $ref: '#/components/schemas/Rateable' + - $ref: "#/components/schemas/Location" + - type: object + properties: + rateable: + $ref: "#/components/schemas/Rateable" offers: type: array items: - $ref: '#/components/schemas/Offer' + $ref: "#/components/schemas/Offer" items: type: array items: - $ref: '#/components/schemas/Item' + $ref: "#/components/schemas/Item" exp: type: string description: Time after which catalog has to be refreshed format: date-time rateable: - $ref: '#/components/schemas/Rateable' + $ref: "#/components/schemas/Rateable" tags: - $ref: '#/components/schemas/Tags' + $ref: "#/components/schemas/Tags" Quotation: description: Describes a quote. It is the estimated price of products or services from the BPP.<br>This has properties like price, breakup, ttl type: object properties: price: - $ref: '#/components/schemas/Price' + $ref: "#/components/schemas/Price" breakup: type: array items: @@ -2330,9 +2358,9 @@ components: title: type: string price: - $ref: '#/components/schemas/Price' + $ref: "#/components/schemas/Price" ttl: - $ref: '#/components/schemas/Duration' + $ref: "#/components/schemas/Duration" Rateable: description: Describes if the entity can be rated or not @@ -2351,7 +2379,7 @@ components: value: description: Rating value given to the object type: string - + RatingAck: description: Describes the acknowledgement that feedback or rating has been recorded by the BPP.<br> type: object @@ -2405,18 +2433,18 @@ components: - CONSTANT - VARIABLE value: - $ref: '#/components/schemas/DecimalValue' + $ref: "#/components/schemas/DecimalValue" estimated_value: - type: '#/components/schemas/DecimalValue' + $ref: "#/components/schemas/DecimalValue" computed_value: - type: '#/components/schemas/DecimalValue' + $ref: "#/components/schemas/DecimalValue" range: type: object properties: min: - type: '#/components/schemas/DecimalValue' + $ref: "#/components/schemas/DecimalValue" max: - type: '#/components/schemas/DecimalValue' + $ref: "#/components/schemas/DecimalValue" unit: type: string @@ -2425,7 +2453,7 @@ components: type: object properties: frequency: - $ref: '#/components/schemas/Duration' + $ref: "#/components/schemas/Duration" holidays: type: array items: @@ -2442,7 +2470,7 @@ components: type: object properties: descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" updated_at: type: string format: date-time @@ -2452,7 +2480,11 @@ components: Subscriber: type: object +<<<<<<< HEAD description: Any entity which wants to authenticate itself on a network. This can be a BAP, BPP, BG, BPPR or a BGR.<br>This has properties like subscriber_id,type, cb_url,domain, city, country, sigining_public_key, encryption_public_key,status,created, updated expiries +======= + description: "Any entity which wants to authenticate itself on a network. This can be a BAP, BPP, BG, BPPR or a BGR." +>>>>>>> Bug fixes in openapi file properties: subscriber_id: type: string @@ -2469,11 +2501,11 @@ components: type: string description: Callback URL of the subscriber. The Registry will call this URL's on_subscribe API to validate the subscriber\'s credentials domain: - $ref: '#/components/schemas/Domain' + $ref: "#/components/schemas/Domain" city: - $ref: '#/components/schemas/City/properties/code' + $ref: "#/components/schemas/City/properties/code" country: - $ref: '#/components/schemas/Country/properties/code' + $ref: "#/components/schemas/Country/properties/code" signing_public_key: type: string description: 'Signing Public key of the subscriber. <br/><br/>Any subscriber platform (BAP, BPP, BG) who wants to transact on the network must digitally sign the ```requestBody``` using the corresponding private key of this public key and send it in the transport layer header. In case of ```HTTP``` it is the ```Authorization``` header. <br><br/>The ```Authorization``` will be used to validate the signature of a BAP or BPP.<br/><br/>Furthermore, if an API call is being proxied or multicast by a Beckn Gateway, the BG must use it\''s signing key to digitally sign the ```requestBody``` using the corresponding private key of this public key and send it in the ```X-Gateway-Authorization``` header.' @@ -2513,8 +2545,8 @@ components: ref_id: type: string channels: - $ref: '#/components/schemas/Tags' - + $ref: "#/components/schemas/Tags" + Tags: description: Describes a tag. This is a simple key-value store which is used to contain extended metadata additionalProperties: @@ -2530,7 +2562,7 @@ components: type: string format: date-time duration: - $ref: '#/components/schemas/Duration' + $ref: "#/components/schemas/Duration" range: type: object properties: @@ -2544,11 +2576,16 @@ components: type: string description: comma separated values representing days of the week schedule: - $ref: '#/components/schemas/Schedule' + $ref: "#/components/schemas/Schedule" TrackingData: +<<<<<<< HEAD description: Describes tracking data information to know the status of an object/process or live locations/actions of object and tracking activity<br>This has the GPS coordinates properties $ref: '#/components/schemas/Location/properties/gps' +======= + description: Describes tracking data object during live tracking of an order + $ref: "#/components/schemas/Location/properties/gps" +>>>>>>> Bug fixes in openapi file Tracking: description: Describes as tracking which is useful for knowing the location of time sensitive deliveries.<br>This has properties like URL and status of the object From effeda271c98acee8fcfe0f6c101dcb2ada239e2 Mon Sep 17 00:00:00 2001 From: Venky <venkatramanm@gmail.com> Date: Thu, 21 Jul 2022 17:34:50 +0530 Subject: [PATCH 077/183] Schema fixes --- core/v0/api/core.yaml | 67 +++++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index ba66847f..8818a8aa 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -32,7 +32,7 @@ paths: - context - message responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -76,7 +76,7 @@ paths: - message responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -119,7 +119,7 @@ paths: - context - message responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -162,7 +162,7 @@ paths: - context - message responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -205,7 +205,7 @@ paths: - context - message responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -251,7 +251,7 @@ paths: - context - message responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -298,7 +298,7 @@ paths: - context - message responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -345,7 +345,7 @@ paths: - context - message responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -383,7 +383,7 @@ paths: - context - message responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -426,7 +426,7 @@ paths: - context - message responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -472,7 +472,7 @@ paths: required: - context responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -489,7 +489,7 @@ paths: error: $ref: "#/components/schemas/Error" required: - - context + - message /on_select: post: tags: @@ -514,7 +514,7 @@ paths: required: - context responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -558,7 +558,7 @@ paths: required: - context responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -602,7 +602,7 @@ paths: required: - context responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -646,7 +646,7 @@ paths: required: - context responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -690,7 +690,7 @@ paths: required: - context responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -734,7 +734,7 @@ paths: required: - context responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -778,7 +778,7 @@ paths: required: - context responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -820,7 +820,7 @@ paths: required: - context responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -869,7 +869,7 @@ paths: required: - context responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -903,7 +903,7 @@ paths: context: $ref: "#/components/schemas/Context" responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -944,7 +944,7 @@ paths: items: $ref: "#/components/schemas/Option" responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -978,7 +978,7 @@ paths: context: $ref: "#/components/schemas/Context" responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -1016,7 +1016,7 @@ paths: items: $ref: "#/components/schemas/Option" responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -1050,7 +1050,7 @@ paths: context: $ref: "#/components/schemas/Context" responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -1088,7 +1088,7 @@ paths: items: $ref: "#/components/schemas/Rating/properties/rating_category" responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -1122,7 +1122,7 @@ paths: context: $ref: "#/components/schemas/Context" responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -1160,7 +1160,7 @@ paths: items: $ref: "#/components/schemas/Rating/properties/rating_category" responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -1201,7 +1201,7 @@ paths: rating_category: $ref: "#/components/schemas/Rating/properties/rating_category" responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -1238,7 +1238,7 @@ paths: $ref: "#/components/schemas/Feedback" responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -1269,7 +1269,6 @@ components: in: header name: X-Gateway-Authorization description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code>' - schemas: Ack: description: Describes the acknowledgement message a BPP, BAP or BG sends as response to any beckn API calls. This can represent the acknowledged or not acknowledged status response.<br>This has one property status<br>This schema is used in the response of all the beckn API calls<br>This is used to convey the acknowledgement status of a beckn API call received by a network participant. If the network participant received the API call successfully and has validated the request is as per protocol specifications and signature verified it can send back an ACK as status. Or else it will send NACK as status. The validation done at this point is only technical in nature (validating if the schema is as per specification, if the signature and caller is valid, if the endpoint itself is implemented) and no functional validation (as per business logic) needs to be done before sending this. @@ -1574,7 +1573,7 @@ components: description: Version of Beckn core API specification being used bap_id: type: string - format: uri + # format: uri description: Unique id of the BAP. By default it is the fully qualified domain name of the BAP bap_uri: type: string @@ -1582,7 +1581,7 @@ components: description: URI of the BAP for accepting callbacks. Must have the same domain name as the bap_id bpp_id: type: string - format: uri + # format: uri description: Unique id of the BPP. By default it is the fully qualified domain name of the BPP bpp_uri: type: string From 9e9f316f286f51dc10d4cde199875df077b88f05 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 08:21:13 +0530 Subject: [PATCH 078/183] Removed merge conflicts --- core/v0/api/core.yaml | 104 ++++++++++++++---------------------------- 1 file changed, 34 insertions(+), 70 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 8818a8aa..417048fc 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -32,7 +32,7 @@ paths: - context - message responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -76,7 +76,7 @@ paths: - message responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -119,7 +119,7 @@ paths: - context - message responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -162,7 +162,7 @@ paths: - context - message responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -205,7 +205,7 @@ paths: - context - message responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -251,7 +251,7 @@ paths: - context - message responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -298,7 +298,7 @@ paths: - context - message responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -345,7 +345,7 @@ paths: - context - message responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -383,7 +383,7 @@ paths: - context - message responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -426,7 +426,7 @@ paths: - context - message responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -472,7 +472,7 @@ paths: required: - context responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -489,7 +489,7 @@ paths: error: $ref: "#/components/schemas/Error" required: - - message + - context /on_select: post: tags: @@ -514,7 +514,7 @@ paths: required: - context responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -558,7 +558,7 @@ paths: required: - context responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -602,7 +602,7 @@ paths: required: - context responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -646,7 +646,7 @@ paths: required: - context responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -690,7 +690,7 @@ paths: required: - context responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -734,7 +734,7 @@ paths: required: - context responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -778,7 +778,7 @@ paths: required: - context responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -820,7 +820,7 @@ paths: required: - context responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -869,7 +869,7 @@ paths: required: - context responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -903,7 +903,7 @@ paths: context: $ref: "#/components/schemas/Context" responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -944,7 +944,7 @@ paths: items: $ref: "#/components/schemas/Option" responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -978,7 +978,7 @@ paths: context: $ref: "#/components/schemas/Context" responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -1016,7 +1016,7 @@ paths: items: $ref: "#/components/schemas/Option" responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -1050,7 +1050,7 @@ paths: context: $ref: "#/components/schemas/Context" responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -1088,7 +1088,7 @@ paths: items: $ref: "#/components/schemas/Rating/properties/rating_category" responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -1122,7 +1122,7 @@ paths: context: $ref: "#/components/schemas/Context" responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -1160,7 +1160,7 @@ paths: items: $ref: "#/components/schemas/Rating/properties/rating_category" responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -1201,7 +1201,7 @@ paths: rating_category: $ref: "#/components/schemas/Rating/properties/rating_category" responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -1238,7 +1238,7 @@ paths: $ref: "#/components/schemas/Feedback" responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -1269,6 +1269,7 @@ components: in: header name: X-Gateway-Authorization description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code>' + schemas: Ack: description: Describes the acknowledgement message a BPP, BAP or BG sends as response to any beckn API calls. This can represent the acknowledged or not acknowledged status response.<br>This has one property status<br>This schema is used in the response of all the beckn API calls<br>This is used to convey the acknowledgement status of a beckn API call received by a network participant. If the network participant received the API call successfully and has validated the request is as per protocol specifications and signature verified it can send back an ACK as status. Or else it will send NACK as status. The validation done at this point is only technical in nature (validating if the schema is as per specification, if the signature and caller is valid, if the endpoint itself is implemented) and no functional validation (as per business logic) needs to be done before sending this. @@ -1573,7 +1574,7 @@ components: description: Version of Beckn core API specification being used bap_id: type: string - # format: uri + format: uri description: Unique id of the BAP. By default it is the fully qualified domain name of the BAP bap_uri: type: string @@ -1581,7 +1582,7 @@ components: description: URI of the BAP for accepting callbacks. Must have the same domain name as the bap_id bpp_id: type: string - # format: uri + format: uri description: Unique id of the BPP. By default it is the fully qualified domain name of the BPP bpp_uri: type: string @@ -1749,17 +1750,10 @@ components: feedback_form: $ref: "#/components/schemas/FeedbackForm" feedback_url: -<<<<<<< HEAD - $ref: '#/components/schemas/FeedbackUrl' - - FeedbackForm: - description: Describes a feedback form that a BPP can send to get feedback from the BAP. The BAP render this and will send the response of the form in this same structure.<br>This has properties like description,id,parent_id,question,answer,answer_type<br>This is used in the following situations.<br><ul><li>This is typically used in the post fulfillment stage when a BAP sends feedback for a service or product or a fulfillment agent provided by the BPP in a feedback form</li><li>This is typically used in the post fulfillment stage when the BPP sends the feedback form that needs to be used by the BAP</li></ul> -======= $ref: "#/components/schemas/FeedbackUrl" FeedbackForm: description: Describes a feedback form that a BPP can send to get feedback from the BAP ->>>>>>> Bug fixes in openapi file type: array items: $ref: "#/components/schemas/FeedbackFormElement" @@ -1886,11 +1880,7 @@ components: type: string pattern: '^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$' Image: -<<<<<<< HEAD - description: 'Image of an object. <br/><br/> A url based image will look like <br/><br/>```uri:https://path/to/image``` <br/><br/> An image can also be sent as a data string. For example : <br/><br/> ```data:js87y34ilhriuho84r3i4```' -======= description: "Image of an object. <br/><br/> A url based image will look like <br/><br/>```uri:http://path/to/image``` <br/><br/> An image can also be sent as a data string. For example : <br/><br/> ```data:js87y34ilhriuho84r3i4```" ->>>>>>> Bug fixes in openapi file type: string Intent: description: Intent of a user. Used in the discovery stage for declaring the intent of the user. BAP can declare the intent of the consumer including <ul><li>What they want (A product, service, offer)</li><li>Who they want (A seller, service provider, agent etc)</li><li>Where they want it and where they want it from</li><li>When they want it (start and end time of fulfillment</li><li>How they want to pay for it</li></ul><br>This has properties like descriptor,provider,fulfillment,payment,category,offer,item,tags<br>This is typically used by the BAP to send the purpose of the user's search to the BPP. This will be used by the BPP to find products or services it offers that may match the user's intent.<br>For example, in Mobility, the mobility consumer declares a mobility intent. In this case, the mobility consumer declares information that describes various aspects of their journey like,<ul><li>Where would they like to begin their journey (intent.fulfillment.start.location)</li><li>Where would they like to end their journey (intent.fulfillment.end.location)</li><li>When would they like to begin their journey (intent.fulfillment.start.time)</li><li>When would they like to end their journey (intent.fulfillment.end.time)</li><li>Who is the transport service provider they would like to avail services from (intent.provider)</li><li>Who is traveling (This is not recommended in public networks) (intent.fulfillment.customer)</li><li>What kind of fare product would they like to purchase (intent.item)</li><li>What add-on services would they like to avail</li><li>What offers would they like to apply on their booking (intent.offer)</li><li>What category of services would they like to avail (intent.category)</li><li>What additional luggage are they carrying</li><li>How would they like to pay for their journey (intent.payment)</li></ul><br>For example, in health domain, a consumer declares the intent for a lab booking the describes various aspects of their booking like,<ul><li>Where would they like to get their scan/test done (intent.fulfillment.start.location)</li><li>When would they like to get their scan/test done (intent.fulfillment.start.time)</li><li>When would they like to get the results of their test/scan (intent.fulfillment.end.time)</li><li>Who is the service provider they would like to avail services from (intent.provider)</li><li>Who is getting the test/scan (intent.fulfillment.customer)</li><li>What kind of test/scan would they like to purchase (intent.item)</li><li>What category of services would they like to avail (intent.category)</li><li>How would they like to pay for their journey (intent.payment)</li></ul> @@ -2029,19 +2019,6 @@ components: time: $ref: "#/components/schemas/Time" -<<<<<<< HEAD -======= - Organization: - type: object - properties: - descriptor: - $ref: "#/components/schemas/Descriptor" - address: - $ref: "#/components/schemas/Address" - contact: - $ref: "#/components/schemas/Contact" - ->>>>>>> Bug fixes in openapi file Name: type: string description: "Describes the name of a person" @@ -2286,11 +2263,7 @@ components: $ref: "#/components/schemas/DecimalValue" Provider: -<<<<<<< HEAD description: Describes a service provider. This can be a restaurant, a hospital, a Store etc<br>This has properties like id,descriptor,category_id,rating,time,categories,fulfillment,payments,locations,offers,items,exp,rateables,tags -======= - description: "Describes a service provider. This can be a restaurant, a hospital, a Store etc" ->>>>>>> Bug fixes in openapi file type: object properties: id: @@ -2479,11 +2452,7 @@ components: Subscriber: type: object -<<<<<<< HEAD description: Any entity which wants to authenticate itself on a network. This can be a BAP, BPP, BG, BPPR or a BGR.<br>This has properties like subscriber_id,type, cb_url,domain, city, country, sigining_public_key, encryption_public_key,status,created, updated expiries -======= - description: "Any entity which wants to authenticate itself on a network. This can be a BAP, BPP, BG, BPPR or a BGR." ->>>>>>> Bug fixes in openapi file properties: subscriber_id: type: string @@ -2578,13 +2547,8 @@ components: $ref: "#/components/schemas/Schedule" TrackingData: -<<<<<<< HEAD description: Describes tracking data information to know the status of an object/process or live locations/actions of object and tracking activity<br>This has the GPS coordinates properties $ref: '#/components/schemas/Location/properties/gps' -======= - description: Describes tracking data object during live tracking of an order - $ref: "#/components/schemas/Location/properties/gps" ->>>>>>> Bug fixes in openapi file Tracking: description: Describes as tracking which is useful for knowing the location of time sensitive deliveries.<br>This has properties like URL and status of the object From c8df9f8fb6cf24207f945855dc65f4175ee110fc Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:00:39 +0530 Subject: [PATCH 079/183] Added default reponse codes instead of 200, removed format:uri in bap_id --- core/v0/api/core.yaml | 62 +++++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 32 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 417048fc..25895c45 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -32,7 +32,7 @@ paths: - context - message responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -76,7 +76,7 @@ paths: - message responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -119,7 +119,7 @@ paths: - context - message responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -162,7 +162,7 @@ paths: - context - message responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -205,7 +205,7 @@ paths: - context - message responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -251,7 +251,7 @@ paths: - context - message responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -298,7 +298,7 @@ paths: - context - message responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -345,7 +345,7 @@ paths: - context - message responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -383,7 +383,7 @@ paths: - context - message responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -426,7 +426,7 @@ paths: - context - message responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -472,7 +472,7 @@ paths: required: - context responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -514,7 +514,7 @@ paths: required: - context responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -558,7 +558,7 @@ paths: required: - context responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -602,7 +602,7 @@ paths: required: - context responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -646,7 +646,7 @@ paths: required: - context responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -690,7 +690,7 @@ paths: required: - context responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -734,7 +734,7 @@ paths: required: - context responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -778,7 +778,7 @@ paths: required: - context responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -820,7 +820,7 @@ paths: required: - context responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -869,7 +869,7 @@ paths: required: - context responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -903,7 +903,7 @@ paths: context: $ref: "#/components/schemas/Context" responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -944,7 +944,7 @@ paths: items: $ref: "#/components/schemas/Option" responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -978,7 +978,7 @@ paths: context: $ref: "#/components/schemas/Context" responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -1016,7 +1016,7 @@ paths: items: $ref: "#/components/schemas/Option" responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -1050,7 +1050,7 @@ paths: context: $ref: "#/components/schemas/Context" responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -1088,7 +1088,7 @@ paths: items: $ref: "#/components/schemas/Rating/properties/rating_category" responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -1122,7 +1122,7 @@ paths: context: $ref: "#/components/schemas/Context" responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -1160,7 +1160,7 @@ paths: items: $ref: "#/components/schemas/Rating/properties/rating_category" responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -1201,7 +1201,7 @@ paths: rating_category: $ref: "#/components/schemas/Rating/properties/rating_category" responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -1238,7 +1238,7 @@ paths: $ref: "#/components/schemas/Feedback" responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -1574,7 +1574,6 @@ components: description: Version of Beckn core API specification being used bap_id: type: string - format: uri description: Unique id of the BAP. By default it is the fully qualified domain name of the BAP bap_uri: type: string @@ -1582,7 +1581,6 @@ components: description: URI of the BAP for accepting callbacks. Must have the same domain name as the bap_id bpp_id: type: string - format: uri description: Unique id of the BPP. By default it is the fully qualified domain name of the BPP bpp_uri: type: string From 0ce527ba090567be64b991c91625a79143644c53 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:02:15 +0530 Subject: [PATCH 080/183] Added media files as a property in Descriptor --- core/v0/api/core.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 25895c45..1ffceb0d 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1673,6 +1673,10 @@ components: type: string long_desc: type: string + media: + type: array + items: + $ref: "#/components/schemas/MediaFile" images: type: array items: From b10adfd2edd2486853d7e1621f88e69ba8ba0b40 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:02:51 +0530 Subject: [PATCH 081/183] Added descriptions to ItemQuantity properties --- core/v0/api/core.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 1ffceb0d..c33960a2 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1919,6 +1919,7 @@ components: $ref: "#/components/schemas/Scalar" available: type: object + description: This represents the exact quantity available for purchase of the item. The buyer can only purchase multiples of this properties: count: type: integer @@ -1926,6 +1927,7 @@ components: measure: $ref: "#/components/schemas/Scalar" maximum: + description: This represents the maximum quantity allowed for purchase of the item type: object properties: count: @@ -1934,6 +1936,7 @@ components: measure: $ref: "#/components/schemas/Scalar" minimum: + description: This represents the minimum quantity allowed for purchase of the item type: object properties: count: @@ -1942,6 +1945,7 @@ components: measure: $ref: "#/components/schemas/Scalar" selected: + description: This represents the quantity selected for purchase of the item type: object properties: count: From e88dc0a36ed87324a690bd3f79a483f17237d6e5 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:03:50 +0530 Subject: [PATCH 082/183] Added unitized quantity to ItemQuantity to represent quntity available in a single unit of an Item --- core/v0/api/core.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index c33960a2..2971ad53 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1953,6 +1953,17 @@ components: minimum: 0 measure: $ref: "#/components/schemas/Scalar" + unitized: + description: This represents the quantity available in a single unit of the item + type: object + properties: + count: + type: integer + minimum: 1 + maximum: 1 + measure: + $ref: "#/components/schemas/Scalar" + Item: description: Describes a product or a service offered to the end consumer by the provider. In the mobility domain item can represent a fare product like one way journey while in the logistics domain it can represent the delivery service offering while in the local retail domain it can represent a product like a grocery item.<br>This has properties like id,parent_item_id,descriptor,price,category_id,fulfillment_id,rating,time,location_id,time,rateable,matched,related,recommended, tags<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP sends the catalog of products or services it offers to the BAP in the items array</li><li>This is typically used in the order stage when the BAP sends the details of the item the user wants to purchase</li><li>This is typically used in the fulfillment stage when the BPP/BAP sends the order object containing the details of the products or services purchased in the order</li></ul> type: object From e2c531f574528058f9de1aa38e748176814d227e Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:04:42 +0530 Subject: [PATCH 083/183] Added mediafile type --- core/v0/api/core.yaml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 2971ad53..cf4b9556 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2036,6 +2036,25 @@ components: time: $ref: "#/components/schemas/Time" + MediaFile: + type: object + properties: + filename: + type: string + mimetype: + description: indicates the nature and format of the document, file, or assortment of bytes. MIME types are defined and standardized in IETF's RFC 6838 + type: string + url: + description: The URL of the document + type: string + format: uri + signature: + description: The digital signature of the file signed by the sender + type: string + dsa: + description: The signing algorithm used by the sender + type: string + Name: type: string description: "Describes the name of a person" From d0cc033ea1e1b32df4eaec0c285e5722a97a7547 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:05:06 +0530 Subject: [PATCH 084/183] Added double quotes instead of signle quotes in certain places --- core/v0/api/core.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index cf4b9556..74369773 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2162,11 +2162,11 @@ components: type: object properties: descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" address: - $ref: '#/components/schemas/Address' + $ref: "#/components/schemas/Address" contact: - $ref: '#/components/schemas/Contact' + $ref: "#/components/schemas/Contact" Page: description: Describes a page in a search result @@ -2584,7 +2584,7 @@ components: TrackingData: description: Describes tracking data information to know the status of an object/process or live locations/actions of object and tracking activity<br>This has the GPS coordinates properties - $ref: '#/components/schemas/Location/properties/gps' + $ref: "#/components/schemas/Location/properties/gps" Tracking: description: Describes as tracking which is useful for knowing the location of time sensitive deliveries.<br>This has properties like URL and status of the object From 5e1bec84c55767929ab61ba6760a9d974b90ed01 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:41:49 +0530 Subject: [PATCH 085/183] Added external refs in cancellation terms --- core/v0/api/core.yaml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 74369773..b4def7eb 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1423,22 +1423,24 @@ components: $ref: "#/components/schemas/Descriptor" CancellationTerms: + description: Describes the cancellation policy of an item or an order. This can be referenced at an item or order level. type: object properties: + id: + description: ID of the cancellation term + type: string cancel_by: type: string format: date-time refund_eligible: type: boolean - refund_percentage: - type: integer - minimum: 0 - maximum: 100 other_terms: type: array items: type: string - + external_ref: + $ref: "#/components/schemas/MediaFile" + CargoItem: type: object properties: From 3a14dec83713b2322ecefe95abbab63c906163d9 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:42:05 +0530 Subject: [PATCH 086/183] Added confirmation terms --- core/v0/api/core.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index b4def7eb..3527aeaf 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1518,6 +1518,20 @@ components: code: type: string description: City code + + ConfirmationTerms: + description: Describes the terms required to be fulfilled confirm an order + type: object + properties: + req_media: + type: array + items: + $ref: "#/components/schemas/MediaFile" + req_formdata: + $ref: "#/components/schemas/Form" + req_formdata_url: + type: string + format: uri Contact: description: Describes the contact information of an entity including phone number or an email ID<br>This has properties like phone,email,tags<br>This is used to allow the BPP or BAP to send contact details of a person. From f862c022be9020d51c54cc2fb40ab56fc598f0e4 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:42:31 +0530 Subject: [PATCH 087/183] Generalized FeedbackForm to Form --- core/v0/api/core.yaml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 3527aeaf..7cac6305 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1766,29 +1766,30 @@ components: type: object properties: feedback_form: - $ref: "#/components/schemas/FeedbackForm" + $ref: "#/components/schemas/Form" feedback_url: - $ref: "#/components/schemas/FeedbackUrl" + type: string + format: uri - FeedbackForm: + Form: description: Describes a feedback form that a BPP can send to get feedback from the BAP type: array items: - $ref: "#/components/schemas/FeedbackFormElement" + $ref: "#/components/schemas/FormElement" - FeedbackFormElement: + FormElement: description: Describes a single element in the feedback form. It can be question or an answer to the question.<br>This has properties like id,parent_id,question,answer,answer_type type: object properties: id: type: string parent_id: - $ref: "#/components/schemas/FeedbackFormElement/properties/id" + $ref: "#/components/schemas/FormElement/properties/id" question: - description: Specifies the question to which the answer options will be contained in the child FeedbackFormElements + description: Specifies the question to which the answer options will be contained in the child FormElements type: string answer: - description: Specifies an answer option to which the question will be in the FeedbackFormElement specified in parent_id + description: Specifies an answer option to which the question will be in the FormElement specified in parent_id type: string answer_type: description: Specifies how the answer option should be rendered. From dac5c7465b6c11bcda42f6cdcbe8e841493820d1 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:42:53 +0530 Subject: [PATCH 088/183] Removed feedback form url object --- core/v0/api/core.yaml | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 7cac6305..94e86bfc 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1799,30 +1799,6 @@ components: - checkbox - text - FeedbackUrl: - description: Describes the feedback URL that an end customer can use to provide feedback to the BPP for products or services.<br>This has properties like url,tl_method,params<br>This is used in the following situations.<br><ul><li>This is typically used in the post fulfillment stage when the BPP sends the feedback URL that needs to be used by the BAP for providing feedback for a service or product or fulfillment agent</li></ul> - type: object - properties: - url: - description: feedback URL sent by the BPP - type: string - format: uri - tl_method: - type: string - enum: - - http/get - - http/post - params: - type: object - properties: - feedback_id: - type: string - description: This value will be placed in the the $feedback_id url param in case of http/get and in the requestBody http/post requests - additionalProperties: - type: string - required: - - feedback_id - Fulfillment: description: Describes how a single product/service will be rendered/fulfilled to the end customer<br>This has properties like id,type,provider_id,rating,state,tracking, customer,agent,person,contact,vehicle,start,end,rateable,tags<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP sends the fulfillment terms to the BAP</li><li>This is typically used in the order stage when the BPP sends the fulfillment terms to the BAP</li><li>This is typically used in the fulfillment stage when the BPP sends the status and current details of fulfillment to the BAP</li></ul> type: object From 868563a22784290a8ea4d63d59eedfb17d76a375 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:43:13 +0530 Subject: [PATCH 089/183] Added manufacturer property to item --- core/v0/api/core.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 94e86bfc..3f1f2722 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1968,6 +1968,8 @@ components: $ref: "#/components/schemas/Item/properties/id" descriptor: $ref: "#/components/schemas/Descriptor" + manufacturer: + $ref: "#/components/schemas/Organization" price: $ref: "#/components/schemas/Price" quantity: From 0d3e4be947d503d9111e5eeab5a86fe1615be2a5 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:43:48 +0530 Subject: [PATCH 090/183] Added terms to item and order --- core/v0/api/core.yaml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 3f1f2722..bcccfbfa 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1984,6 +1984,18 @@ components: $ref: "#/components/schemas/Location/properties/id" payment_id: $ref: "#/components/schemas/Payment/properties/id" + confirmation_terms: + $ref: "#/components/schemas/ConfirmationTerms" + cancellation_terms: + $ref: "#/components/schemas/CancellationTerms" + return_terms: + $ref: "#/components/schemas/ReturnTerms" + replacement_terms: + $ref: "#/components/schemas/ReplacementTerms" + refund_terms: + $ref: "#/components/schemas/RefundTerms" + update_terms: + $ref: "#/components/schemas/UpdateTerms" time: $ref: "#/components/schemas/Time" rateable: @@ -2134,10 +2146,14 @@ components: type: array items: $ref: "#/components/schemas/Fulfillment" + confirmation_terms: + $ref: "#/components/schemas/ConfirmationTerms" cancellation_terms: $ref: "#/components/schemas/CancellationTerms" return_terms: $ref: "#/components/schemas/ReturnTerms" + refund_terms: + $ref: "#/components/schemas/RefundTerms" replacement_terms: $ref: "#/components/schemas/ReplacementTerms" update_terms: From 0de4246c4f28737b1910b89b288ff8fc1173a535 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:44:12 +0530 Subject: [PATCH 091/183] Added refund terms --- core/v0/api/core.yaml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index bcccfbfa..6e5d934a 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2412,9 +2412,29 @@ components: type: string format: uri + RefundTerms: + type: object + properties: + id: + description: ID of the term + type: string + refund_percentage: + type: integer + minimum: 0 + maximum: 100 + other_terms: + type: array + items: + type: string + external_ref: + $ref: "#/components/schemas/MediaFile" + ReplacementTerms: type: object properties: + id: + description: ID of the replacement term + type: string replace_by: type: string format: date-time From 186d7ca782e97f41cad6e24578604743135cc658 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:44:31 +0530 Subject: [PATCH 092/183] Added id and description --- core/v0/api/core.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 6e5d934a..da65742e 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2444,10 +2444,16 @@ components: type: array items: type: string + external_ref: + $ref: "#/components/schemas/MediaFile" ReturnTerms: + description: Describes the return policy of an item or an order type: object properties: + id: + description: ID of the return term + type: string return_by: type: string format: date-time @@ -2461,6 +2467,8 @@ components: type: array items: type: string + external_ref: + $ref: "#/components/schemas/MediaFile" Scalar: description: Describes a scalar quantity.<br>This has properties like value, estimated_value, computed_value,range, unit @@ -2633,6 +2641,9 @@ components: UpdateTerms: type: object properties: + id: + type: string + description: ID of the update terms update_by: type: string format: date-time @@ -2640,6 +2651,8 @@ components: type: array items: type: string + external_ref: + $ref: "#/components/schemas/MediaFile" Vehicle: description: Describes a vehicle is a device that is designed or used to transport people or cargo over land, water, air, or through space.<br>This has properties like category, capacity, make, model, size,variant,color,energy_type,registration From 7f3faec64829775f18f6613d1de78dacd75b3e64 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Sun, 26 Dec 2021 14:38:15 +0530 Subject: [PATCH 093/183] Added sample proposal --- docs/images/sample.png | Bin 0 -> 4192 bytes docs/proposals/Sample-proposal.md | 42 ++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 docs/images/sample.png create mode 100644 docs/proposals/Sample-proposal.md diff --git a/docs/images/sample.png b/docs/images/sample.png new file mode 100644 index 0000000000000000000000000000000000000000..97b5266af204621c20598b29853dd5f1fda278d8 GIT binary patch literal 4192 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 RAiOdVaj<p4He#;a{vU(vs}=wN literal 0 HcmV?d00001 diff --git a/docs/proposals/Sample-proposal.md b/docs/proposals/Sample-proposal.md new file mode 100644 index 00000000..a4175d4d --- /dev/null +++ b/docs/proposals/Sample-proposal.md @@ -0,0 +1,42 @@ +# Enter Proposal Title Here + +## Status: +Proposal + +## Affected Protocol Versions (Active release versions ONLY, REQUIRED) +* 0.9.3 +* 0.9.2 +* ALL + +## Authors: + +#### John Doe +* _Email address_ : john.doe@example.com +* _Github username_ : [john.doe](https://github.com/john.doe) + +#### Jane Doe +* _Email address_ : jane.doe@example.com +* _Github username_ : [jane.doe](https://github.com/jane.doe) + +# Abstract (150 words max, REQUIRED) + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis a feugiat odio. Pellentesque in vehicula leo. Integer commodo dapibus tortor, sed vehicula enim condimentum ut. Phasellus in ornare nunc. Fusce convallis eros sed neque elementum aliquam. Fusce mauris purus, aliquam in turpis non, egestas eleifend augue. Aliquam sem libero, aliquam sit amet congue sed, faucibus ut arcu. Nam elit felis, vehicula vel ornare et, ultrices id tellus. Phasellus accumsan eleifend ante, ac fringilla erat pharetra tincidunt. Sed pharetra, magna sed feugiat rutrum, orci nulla volutpat mi, non tempor sem ligula tristique dolor. Nullam id justo efficitur, ornare enim id, lobortis sem. + +# Heading (REQUIRED) + +Pellentesque consequat purus ac urna lobortis condimentum. Nullam dignissim justo id turpis gravida tincidunt. Aenean a malesuada augue, nec consectetur lacus. In dapibus eu lectus eget imperdiet. Aenean ut nisl fermentum, interdum est quis, pharetra tellus. Nullam gravida augue ac diam auctor, laoreet viverra enim interdum. Donec eget leo eu lectus sodales fermentum. Duis quis dui pharetra, viverra justo at, dapibus arcu. + +## Subheading +Fusce in luctus mi. Ut sagittis, lectus at varius sollicitudin, est tellus tincidunt nisi, vel vestibulum nisi libero a enim. Duis leo neque, accumsan sed suscipit sed, tempus sed dolor. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nunc sit amet odio semper leo mollis pretium quis ac ante. + +![Sample Image](https://github.com/beckn/protocol-specifications/blob/core-0.9.4-draft/docs/images/sample.png) + + +### Sub-subheading +Aenean tincidunt sollicitudin sem a sodales. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas a eros lacus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Vestibulum nisi sapien, varius ut luctus sit amet, venenatis vitae nisi. Etiam ut magna vitae tortor scelerisque finibus. Duis arcu libero, facilisis non ultrices at, molestie ut ipsum. + + +# References (REQUIRED) + +1. [Name of reference 1](https://URL/to/reference) +2. [Name of reference 2](https://URL/to/reference) From 52469f0394baf922dfec149dccb4dfe1ebef2b57 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Sun, 26 Dec 2021 14:43:08 +0530 Subject: [PATCH 094/183] Renamed RFC file naming format --- ...-Draft-01.md => BECKN-001-Layering-Network-Policy-Draft-01.md} | 0 ...etworks.md => BECKN-002-Payments-On-Beckn-Enabled-Networks.md} | 0 ...t-01.md => BECKN-003-Beckn-Protocol-Communication-Draft-01.md} | 0 ... BECKN-004-Policy-Administration-On-Beckn-Enabled-Networks.md} | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename docs/protocol-drafts/{BECKN-RFC-001-Layering-Network-Policy-Draft-01.md => BECKN-001-Layering-Network-Policy-Draft-01.md} (100%) rename docs/protocol-drafts/{BECKN-RFC-002-Payments-On-Beckn-Enabled-Networks.md => BECKN-002-Payments-On-Beckn-Enabled-Networks.md} (100%) rename docs/protocol-drafts/{BECKN-RFC-003-Beckn-Protocol-Communication-Draft-01.md => BECKN-003-Beckn-Protocol-Communication-Draft-01.md} (100%) rename docs/protocol-drafts/{BECKN-RFC-004-Policy-Administration-On-Beckn-Enabled-Networks.md => BECKN-004-Policy-Administration-On-Beckn-Enabled-Networks.md} (100%) diff --git a/docs/protocol-drafts/BECKN-RFC-001-Layering-Network-Policy-Draft-01.md b/docs/protocol-drafts/BECKN-001-Layering-Network-Policy-Draft-01.md similarity index 100% rename from docs/protocol-drafts/BECKN-RFC-001-Layering-Network-Policy-Draft-01.md rename to docs/protocol-drafts/BECKN-001-Layering-Network-Policy-Draft-01.md diff --git a/docs/protocol-drafts/BECKN-RFC-002-Payments-On-Beckn-Enabled-Networks.md b/docs/protocol-drafts/BECKN-002-Payments-On-Beckn-Enabled-Networks.md similarity index 100% rename from docs/protocol-drafts/BECKN-RFC-002-Payments-On-Beckn-Enabled-Networks.md rename to docs/protocol-drafts/BECKN-002-Payments-On-Beckn-Enabled-Networks.md diff --git a/docs/protocol-drafts/BECKN-RFC-003-Beckn-Protocol-Communication-Draft-01.md b/docs/protocol-drafts/BECKN-003-Beckn-Protocol-Communication-Draft-01.md similarity index 100% rename from docs/protocol-drafts/BECKN-RFC-003-Beckn-Protocol-Communication-Draft-01.md rename to docs/protocol-drafts/BECKN-003-Beckn-Protocol-Communication-Draft-01.md diff --git a/docs/protocol-drafts/BECKN-RFC-004-Policy-Administration-On-Beckn-Enabled-Networks.md b/docs/protocol-drafts/BECKN-004-Policy-Administration-On-Beckn-Enabled-Networks.md similarity index 100% rename from docs/protocol-drafts/BECKN-RFC-004-Policy-Administration-On-Beckn-Enabled-Networks.md rename to docs/protocol-drafts/BECKN-004-Policy-Administration-On-Beckn-Enabled-Networks.md From c9201530a5d5bcf65d64061a5fe0ecca516ef769 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Thu, 20 Jan 2022 20:38:18 +0530 Subject: [PATCH 095/183] Update core.yaml --- core/v0/api/core.yaml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 09ecdadd..06feabc5 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1330,17 +1330,17 @@ components: type: apiKey in: header name: Authorization - description: 'Signature of message body using BAP or BPP subscriber''s signing public key. <br/><br/>Format:<br/><br/><code>Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"</code>' + description: 'Signature of message body using BAP or BPP subscriber''s signing public key. <br/><br/>Format:<br/><br/><code>Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code>' GatewaySubscriberAuth: type: apiKey in: header name: Proxy-Authorization - description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>Proxy-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"</code><p><b>Note:</b>This header will be deprecated soon and will no longer be supported in future releases. New implementors are requested to use the X-Gateway-Authorization header. Existing implementations are requested to migrate their header to the new header. The deprecation date will be set after discussion as per the standard specification governance process.</p>' + description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>Proxy-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code><p><b>Note:</b>This header will be deprecated soon and will no longer be supported in future releases. New implementors are requested to use the X-Gateway-Authorization header. Existing implementations are requested to migrate their header to the new header. The deprecation date will be set after discussion as per the standard specification governance process.</p>' GatewaySubscriberAuthNew: type: apiKey in: header name: X-Gateway-Authorization - description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"</code>' + description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code>' schemas: Ack: description: Describes the ACK response @@ -2194,6 +2194,11 @@ components: - NOT-PAID time: $ref: '#/components/schemas/Time' + collected_by: + type: string + enum: + - BAP + - BPP Person: description: Describes a person. From 8de94a11bd698c9824f65984fa231d24fa08d790 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 21 Jan 2022 12:00:12 +0530 Subject: [PATCH 096/183] Update core.yaml --- core/v0/api/core.yaml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 06feabc5..82b09a95 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2194,11 +2194,6 @@ components: - NOT-PAID time: $ref: '#/components/schemas/Time' - collected_by: - type: string - enum: - - BAP - - BPP Person: description: Describes a person. From 8f629f7cec6e30e468b87a8cfca5629279d95e7a Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 21 Jan 2022 12:14:59 +0530 Subject: [PATCH 097/183] Update core.yaml --- core/v0/api/core.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 82b09a95..06feabc5 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2194,6 +2194,11 @@ components: - NOT-PAID time: $ref: '#/components/schemas/Time' + collected_by: + type: string + enum: + - BAP + - BPP Person: description: Describes a person. From ae13c72282daf67bc8715b21586ff599a2ec7748 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 21 Jan 2022 16:10:48 +0530 Subject: [PATCH 098/183] Update core.yaml --- core/v0/api/core.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 06feabc5..273d8639 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1330,17 +1330,17 @@ components: type: apiKey in: header name: Authorization - description: 'Signature of message body using BAP or BPP subscriber''s signing public key. <br/><br/>Format:<br/><br/><code>Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code>' + description: 'Signature of message body using BAP or BPP subscriber''s signing public key. <br/><br/>Format:<br/><br/><code>Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"</code>' GatewaySubscriberAuth: type: apiKey in: header name: Proxy-Authorization - description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>Proxy-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code><p><b>Note:</b>This header will be deprecated soon and will no longer be supported in future releases. New implementors are requested to use the X-Gateway-Authorization header. Existing implementations are requested to migrate their header to the new header. The deprecation date will be set after discussion as per the standard specification governance process.</p>' + description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>Proxy-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"</code><p><b>Note:</b>This header will be deprecated soon and will no longer be supported in future releases. New implementors are requested to use the X-Gateway-Authorization header. Existing implementations are requested to migrate their header to the new header. The deprecation date will be set after discussion as per the standard specification governance process.</p>' GatewaySubscriberAuthNew: type: apiKey in: header name: X-Gateway-Authorization - description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code>' + description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"</code>' schemas: Ack: description: Describes the ACK response From 732d4534ed296e9252c25a9d147279319b3a2311 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 21 Jan 2022 16:15:35 +0530 Subject: [PATCH 099/183] Update core.yaml --- core/v0/api/core.yaml | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 273d8639..82b09a95 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1330,17 +1330,17 @@ components: type: apiKey in: header name: Authorization - description: 'Signature of message body using BAP or BPP subscriber''s signing public key. <br/><br/>Format:<br/><br/><code>Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"</code>' + description: 'Signature of message body using BAP or BPP subscriber''s signing public key. <br/><br/>Format:<br/><br/><code>Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code>' GatewaySubscriberAuth: type: apiKey in: header name: Proxy-Authorization - description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>Proxy-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"</code><p><b>Note:</b>This header will be deprecated soon and will no longer be supported in future releases. New implementors are requested to use the X-Gateway-Authorization header. Existing implementations are requested to migrate their header to the new header. The deprecation date will be set after discussion as per the standard specification governance process.</p>' + description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>Proxy-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code><p><b>Note:</b>This header will be deprecated soon and will no longer be supported in future releases. New implementors are requested to use the X-Gateway-Authorization header. Existing implementations are requested to migrate their header to the new header. The deprecation date will be set after discussion as per the standard specification governance process.</p>' GatewaySubscriberAuthNew: type: apiKey in: header name: X-Gateway-Authorization - description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"</code>' + description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code>' schemas: Ack: description: Describes the ACK response @@ -2194,11 +2194,6 @@ components: - NOT-PAID time: $ref: '#/components/schemas/Time' - collected_by: - type: string - enum: - - BAP - - BPP Person: description: Describes a person. From bc916bf1a03643c0c367baf853f8adddf8a3c23a Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 21 Jan 2022 16:20:15 +0530 Subject: [PATCH 100/183] Update core.yaml --- core/v0/api/core.yaml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 82b09a95..273d8639 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1330,17 +1330,17 @@ components: type: apiKey in: header name: Authorization - description: 'Signature of message body using BAP or BPP subscriber''s signing public key. <br/><br/>Format:<br/><br/><code>Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code>' + description: 'Signature of message body using BAP or BPP subscriber''s signing public key. <br/><br/>Format:<br/><br/><code>Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"</code>' GatewaySubscriberAuth: type: apiKey in: header name: Proxy-Authorization - description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>Proxy-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code><p><b>Note:</b>This header will be deprecated soon and will no longer be supported in future releases. New implementors are requested to use the X-Gateway-Authorization header. Existing implementations are requested to migrate their header to the new header. The deprecation date will be set after discussion as per the standard specification governance process.</p>' + description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>Proxy-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"</code><p><b>Note:</b>This header will be deprecated soon and will no longer be supported in future releases. New implementors are requested to use the X-Gateway-Authorization header. Existing implementations are requested to migrate their header to the new header. The deprecation date will be set after discussion as per the standard specification governance process.</p>' GatewaySubscriberAuthNew: type: apiKey in: header name: X-Gateway-Authorization - description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code>' + description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"</code>' schemas: Ack: description: Describes the ACK response @@ -2194,6 +2194,11 @@ components: - NOT-PAID time: $ref: '#/components/schemas/Time' + collected_by: + type: string + enum: + - BAP + - BPP Person: description: Describes a person. From 36c7a19b1b4a80c25251b5d96582b46aa8d7f911 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 21 Jan 2022 16:38:20 +0530 Subject: [PATCH 101/183] Create ERROR_CODES.md --- ERROR_CODES.md | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 ERROR_CODES.md diff --git a/ERROR_CODES.md b/ERROR_CODES.md new file mode 100644 index 00000000..f73ade71 --- /dev/null +++ b/ERROR_CODES.md @@ -0,0 +1,84 @@ +# Error Codes for BPP + +## ID: +BECKN-RFC-034 + +## Draft ID +Draft-01 + +## Title: +Error Codes + +## Category: +Network Policy + +## Status: +Protocol Draft + +## Published on: +January 21, 2022 + +## Expires on: +January 20, 2023 or Date of publication of next draft which ever is earlier + +## License: +CC-BY-ND + +## Authors: +1. Ravi Prakash : ravi@becknfoundation.org + +## Reviewers: +1. Sujith Nair : sujith@becknfoundation.org +2. Pramod Varma : pramod@ekstep.org + +## To Comment +All comments to be sent to comments@beckn.org with the subject line: + +>“CSF034-Draft-02 | <Title of your comment>” *(without quotation marks)* + +For example, if you have a comment titled, “What if the payment mode is not supported?”, the Subject line should be, + +>CSF034-Draft-01 | What if the payment mode is not supported? + +## Introduction + This document outlines the error codes which must be returned by a BPP. + + ## Error Codes + |**Code**|**Message**|**Description**| + |---|---|---| + |30000|Invalid request error|Generic invalid request error| + |30001|Provider not found|When BPP is unable to find the provider id sent by the BAP| + |30002|Provider location not found|When BPP is unable to find the provider location id sent by the BAP| + |30003|Provider category not found|When BPP is unable to find the provider category id sent by the BAP| + |30004|Item not found|When BPP is unable to find the item id sent by the BAP| + |30005|Category not found|When BPP is unable to find the category id sent by the BAP| + |30006|Offer not found|When BPP is unable to find the offer id sent by the BAP| + |30007|Add on not found|When the BPP is unable to find the add on id sent by the BAP| + |30008|Fulfillment unavailable|When BPP is unable to find the fulfillment id sent by the BAP| + |30009|Fulfilment provider unavailable|When the BPP is unable to find fulfilment provider id sent by the BAP| + |30010|Order not found|When the BPP is unable to find the order id sent by the BAP| + |30011|Invalid cancellation reason|When the BPP is unable to find the cancellation reason in cancellation_reason_id| + |30012|Invalid update_target|When the BPP is unable to find the update_target in the order object| + |30013|Update inconsistency|When the BPP finds changes in the order object other than the update_target| + |30014|Entity to rate not found|When the BPP is unable to find the entity to rate in id| + |30015|Invalid rating value|When the BPP receives an invalid value as the rating value in value| + |40000|Business Error|Generic business error| + |40001|Action not applicable|When an API endpoint is not implemented by the BPP as it is not required for their use cases and a BAP calls one of these endpoints| + |40002|Item quantity unavailable|When the BPP is unable to select the specified number in order.items[].quantity| + |40003|Quote unavailable|When the quote sent by the BAP is no longer available from the BPP| + |40004|Payment not supported|When the payment object sent by the BAP is not supported by the BPP| + |40005|Tracking not supported|When the BPP does not support tracking for the order in order_id| + |40006|Fulfilment agent unavailable|When an agent for fulfilment is not available| + |50000|Policy Error|Generic Policy Error| + |50001|Cancellation not possible|When the BPP is unable to cancel the order due to it's cancellation policy| + |50002|Updation not possible|When the BPP is unable to update the order due to it's updation policy| + |50003|Unsupported rating category|When the BPP receives an entity to rate which is not supported| + |50004|Support unavailable|When the BPP receives an object if for which it does not provide support| + + ## Acknowledgements + The author would like to thank the following individuals for their contributions in creating the first draft of this document.f (in alphabetical order): + +1. Pramod Varma, Beckn Foundation +2. Sujith Nair, Beckn Foundation + +*Copyright (c) 2022 Beckn Foundation. All rights reserved.* From 2cd564a28518414b01627972abb91ee8c5b5dda8 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 21 Jan 2022 16:55:45 +0530 Subject: [PATCH 102/183] Delete ERROR_CODES.md --- ERROR_CODES.md | 84 -------------------------------------------------- 1 file changed, 84 deletions(-) delete mode 100644 ERROR_CODES.md diff --git a/ERROR_CODES.md b/ERROR_CODES.md deleted file mode 100644 index f73ade71..00000000 --- a/ERROR_CODES.md +++ /dev/null @@ -1,84 +0,0 @@ -# Error Codes for BPP - -## ID: -BECKN-RFC-034 - -## Draft ID -Draft-01 - -## Title: -Error Codes - -## Category: -Network Policy - -## Status: -Protocol Draft - -## Published on: -January 21, 2022 - -## Expires on: -January 20, 2023 or Date of publication of next draft which ever is earlier - -## License: -CC-BY-ND - -## Authors: -1. Ravi Prakash : ravi@becknfoundation.org - -## Reviewers: -1. Sujith Nair : sujith@becknfoundation.org -2. Pramod Varma : pramod@ekstep.org - -## To Comment -All comments to be sent to comments@beckn.org with the subject line: - ->“CSF034-Draft-02 | <Title of your comment>” *(without quotation marks)* - -For example, if you have a comment titled, “What if the payment mode is not supported?”, the Subject line should be, - ->CSF034-Draft-01 | What if the payment mode is not supported? - -## Introduction - This document outlines the error codes which must be returned by a BPP. - - ## Error Codes - |**Code**|**Message**|**Description**| - |---|---|---| - |30000|Invalid request error|Generic invalid request error| - |30001|Provider not found|When BPP is unable to find the provider id sent by the BAP| - |30002|Provider location not found|When BPP is unable to find the provider location id sent by the BAP| - |30003|Provider category not found|When BPP is unable to find the provider category id sent by the BAP| - |30004|Item not found|When BPP is unable to find the item id sent by the BAP| - |30005|Category not found|When BPP is unable to find the category id sent by the BAP| - |30006|Offer not found|When BPP is unable to find the offer id sent by the BAP| - |30007|Add on not found|When the BPP is unable to find the add on id sent by the BAP| - |30008|Fulfillment unavailable|When BPP is unable to find the fulfillment id sent by the BAP| - |30009|Fulfilment provider unavailable|When the BPP is unable to find fulfilment provider id sent by the BAP| - |30010|Order not found|When the BPP is unable to find the order id sent by the BAP| - |30011|Invalid cancellation reason|When the BPP is unable to find the cancellation reason in cancellation_reason_id| - |30012|Invalid update_target|When the BPP is unable to find the update_target in the order object| - |30013|Update inconsistency|When the BPP finds changes in the order object other than the update_target| - |30014|Entity to rate not found|When the BPP is unable to find the entity to rate in id| - |30015|Invalid rating value|When the BPP receives an invalid value as the rating value in value| - |40000|Business Error|Generic business error| - |40001|Action not applicable|When an API endpoint is not implemented by the BPP as it is not required for their use cases and a BAP calls one of these endpoints| - |40002|Item quantity unavailable|When the BPP is unable to select the specified number in order.items[].quantity| - |40003|Quote unavailable|When the quote sent by the BAP is no longer available from the BPP| - |40004|Payment not supported|When the payment object sent by the BAP is not supported by the BPP| - |40005|Tracking not supported|When the BPP does not support tracking for the order in order_id| - |40006|Fulfilment agent unavailable|When an agent for fulfilment is not available| - |50000|Policy Error|Generic Policy Error| - |50001|Cancellation not possible|When the BPP is unable to cancel the order due to it's cancellation policy| - |50002|Updation not possible|When the BPP is unable to update the order due to it's updation policy| - |50003|Unsupported rating category|When the BPP receives an entity to rate which is not supported| - |50004|Support unavailable|When the BPP receives an object if for which it does not provide support| - - ## Acknowledgements - The author would like to thank the following individuals for their contributions in creating the first draft of this document.f (in alphabetical order): - -1. Pramod Varma, Beckn Foundation -2. Sujith Nair, Beckn Foundation - -*Copyright (c) 2022 Beckn Foundation. All rights reserved.* From 1432a6a1d88435ff1dfa15615862add2e1396bf1 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 21 Jan 2022 17:07:01 +0530 Subject: [PATCH 103/183] Update core.yaml --- core/v0/api/core.yaml | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 273d8639..82b09a95 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1330,17 +1330,17 @@ components: type: apiKey in: header name: Authorization - description: 'Signature of message body using BAP or BPP subscriber''s signing public key. <br/><br/>Format:<br/><br/><code>Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"</code>' + description: 'Signature of message body using BAP or BPP subscriber''s signing public key. <br/><br/>Format:<br/><br/><code>Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code>' GatewaySubscriberAuth: type: apiKey in: header name: Proxy-Authorization - description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>Proxy-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"</code><p><b>Note:</b>This header will be deprecated soon and will no longer be supported in future releases. New implementors are requested to use the X-Gateway-Authorization header. Existing implementations are requested to migrate their header to the new header. The deprecation date will be set after discussion as per the standard specification governance process.</p>' + description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>Proxy-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code><p><b>Note:</b>This header will be deprecated soon and will no longer be supported in future releases. New implementors are requested to use the X-Gateway-Authorization header. Existing implementations are requested to migrate their header to the new header. The deprecation date will be set after discussion as per the standard specification governance process.</p>' GatewaySubscriberAuthNew: type: apiKey in: header name: X-Gateway-Authorization - description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(BLAKE-512(signing string))"</code>' + description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code>' schemas: Ack: description: Describes the ACK response @@ -2194,11 +2194,6 @@ components: - NOT-PAID time: $ref: '#/components/schemas/Time' - collected_by: - type: string - enum: - - BAP - - BPP Person: description: Describes a person. From dce702a3d15991e9e8a41f73286f4e4c20c06aba Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Sat, 22 Jan 2022 16:36:42 +0530 Subject: [PATCH 104/183] Create ERROR --- ERROR | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 ERROR diff --git a/ERROR b/ERROR new file mode 100644 index 00000000..10d9a60b --- /dev/null +++ b/ERROR @@ -0,0 +1,76 @@ +# Error Codes for BPP + +## ID: +BECKN-RFC-034 + +## Draft ID +Draft-01 + +## Title: +Error Codes + +## Category: +Network Policy + +## Status: +Protocol Draft + +## Published on: +January 21, 2022 + +## Expires on: +January 20, 2023 or Date of publication of next draft which ever is earlier + +## License: +CC-BY-ND + +## Authors: +1. Ravi Prakash : ravi@becknfoundation.org + +## Reviewers: +1. Sujith Nair : sujith@becknfoundation.org +2. Pramod Varma : pramod@ekstep.org + +## Introduction + This document outlines the error codes which must be returned by a BPP. + + ## Error Codes + |**Code**|**Message**|**Description**| + |---|---|---| + |30000|Invalid request error|Generic invalid request error| + |30001|Provider not found|When BPP is unable to find the provider id sent by the BAP| + |30002|Provider location not found|When BPP is unable to find the provider location id sent by the BAP| + |30003|Provider category not found|When BPP is unable to find the provider category id sent by the BAP| + |30004|Item not found|When BPP is unable to find the item id sent by the BAP| + |30005|Category not found|When BPP is unable to find the category id sent by the BAP| + |30006|Offer not found|When BPP is unable to find the offer id sent by the BAP| + |30007|Add on not found|When the BPP is unable to find the add on id sent by the BAP| + |30008|Fulfillment unavailable|When BPP is unable to find the fulfillment id sent by the BAP| + |30009|Fulfilment provider unavailable|When the BPP is unable to find fulfilment provider id sent by the BAP| + |30010|Order not found|When the BPP is unable to find the order id sent by the BAP| + |30011|Invalid cancellation reason|When the BPP is unable to find the cancellation reason in cancellation_reason_id| + |30012|Invalid update_target|When the BPP is unable to find the update_target in the order object| + |30013|Update inconsistency|When the BPP finds changes in the order object other than the update_target| + |30014|Entity to rate not found|When the BPP is unable to find the entity to rate in id| + |30015|Invalid rating value|When the BPP receives an invalid value as the rating value in value| + |40000|Business Error|Generic business error| + |40001|Action not applicable|When an API endpoint is not implemented by the BPP as it is not required for their use cases and a BAP calls one of these endpoints| + |40002|Item quantity unavailable|When the BPP is unable to select the specified number in order.items[].quantity| + |40003|Quote unavailable|When the quote sent by the BAP is no longer available from the BPP| + |40004|Payment not supported|When the payment object sent by the BAP is not supported by the BPP| + |40005|Tracking not supported|When the BPP does not support tracking for the order in order_id| + |40006|Fulfilment agent unavailable|When an agent for fulfilment is not available| + |50000|Policy Error|Generic Policy Error| + |50001|Cancellation not possible|When the BPP is unable to cancel the order due to it's cancellation policy| + |50002|Updation not possible|When the BPP is unable to update the order due to it's updation policy| + |50003|Unsupported rating category|When the BPP receives an entity to rate which is not supported| + |50004|Support unavailable|When the BPP receives an object if for which it does not provide support| + + ## Acknowledgements + The author would like to thank the following individuals for their contributions in creating the first draft of this document (in alphabetical order): + +1. Pramod Varma, Beckn Foundation +2. Sujith Nair, Beckn Foundation +3. Supriyo Ghosh, ONDC + +*Copyright (c) 2022 Beckn Foundation. All rights reserved.* From 452d1b2f69a49f71de79e953db5630066b3a426c Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Sat, 22 Jan 2022 16:38:10 +0530 Subject: [PATCH 105/183] Rename ERROR to ERROR_CODES.md --- ERROR => ERROR_CODES.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename ERROR => ERROR_CODES.md (100%) diff --git a/ERROR b/ERROR_CODES.md similarity index 100% rename from ERROR rename to ERROR_CODES.md From 813e4389ad9d55596cc847f35653fd0521dc687e Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Tue, 25 Jan 2022 11:49:24 +0530 Subject: [PATCH 106/183] Create BECKN-RFC-005-Error-Codes-Draft-01.md --- .../BECKN-RFC-005-Error-Codes-Draft-01.md | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 docs/protocol-drafts/BECKN-RFC-005-Error-Codes-Draft-01.md diff --git a/docs/protocol-drafts/BECKN-RFC-005-Error-Codes-Draft-01.md b/docs/protocol-drafts/BECKN-RFC-005-Error-Codes-Draft-01.md new file mode 100644 index 00000000..10d9a60b --- /dev/null +++ b/docs/protocol-drafts/BECKN-RFC-005-Error-Codes-Draft-01.md @@ -0,0 +1,76 @@ +# Error Codes for BPP + +## ID: +BECKN-RFC-034 + +## Draft ID +Draft-01 + +## Title: +Error Codes + +## Category: +Network Policy + +## Status: +Protocol Draft + +## Published on: +January 21, 2022 + +## Expires on: +January 20, 2023 or Date of publication of next draft which ever is earlier + +## License: +CC-BY-ND + +## Authors: +1. Ravi Prakash : ravi@becknfoundation.org + +## Reviewers: +1. Sujith Nair : sujith@becknfoundation.org +2. Pramod Varma : pramod@ekstep.org + +## Introduction + This document outlines the error codes which must be returned by a BPP. + + ## Error Codes + |**Code**|**Message**|**Description**| + |---|---|---| + |30000|Invalid request error|Generic invalid request error| + |30001|Provider not found|When BPP is unable to find the provider id sent by the BAP| + |30002|Provider location not found|When BPP is unable to find the provider location id sent by the BAP| + |30003|Provider category not found|When BPP is unable to find the provider category id sent by the BAP| + |30004|Item not found|When BPP is unable to find the item id sent by the BAP| + |30005|Category not found|When BPP is unable to find the category id sent by the BAP| + |30006|Offer not found|When BPP is unable to find the offer id sent by the BAP| + |30007|Add on not found|When the BPP is unable to find the add on id sent by the BAP| + |30008|Fulfillment unavailable|When BPP is unable to find the fulfillment id sent by the BAP| + |30009|Fulfilment provider unavailable|When the BPP is unable to find fulfilment provider id sent by the BAP| + |30010|Order not found|When the BPP is unable to find the order id sent by the BAP| + |30011|Invalid cancellation reason|When the BPP is unable to find the cancellation reason in cancellation_reason_id| + |30012|Invalid update_target|When the BPP is unable to find the update_target in the order object| + |30013|Update inconsistency|When the BPP finds changes in the order object other than the update_target| + |30014|Entity to rate not found|When the BPP is unable to find the entity to rate in id| + |30015|Invalid rating value|When the BPP receives an invalid value as the rating value in value| + |40000|Business Error|Generic business error| + |40001|Action not applicable|When an API endpoint is not implemented by the BPP as it is not required for their use cases and a BAP calls one of these endpoints| + |40002|Item quantity unavailable|When the BPP is unable to select the specified number in order.items[].quantity| + |40003|Quote unavailable|When the quote sent by the BAP is no longer available from the BPP| + |40004|Payment not supported|When the payment object sent by the BAP is not supported by the BPP| + |40005|Tracking not supported|When the BPP does not support tracking for the order in order_id| + |40006|Fulfilment agent unavailable|When an agent for fulfilment is not available| + |50000|Policy Error|Generic Policy Error| + |50001|Cancellation not possible|When the BPP is unable to cancel the order due to it's cancellation policy| + |50002|Updation not possible|When the BPP is unable to update the order due to it's updation policy| + |50003|Unsupported rating category|When the BPP receives an entity to rate which is not supported| + |50004|Support unavailable|When the BPP receives an object if for which it does not provide support| + + ## Acknowledgements + The author would like to thank the following individuals for their contributions in creating the first draft of this document (in alphabetical order): + +1. Pramod Varma, Beckn Foundation +2. Sujith Nair, Beckn Foundation +3. Supriyo Ghosh, ONDC + +*Copyright (c) 2022 Beckn Foundation. All rights reserved.* From e5c71471c138534eeb9159f3fb3903a63b2d86aa Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Tue, 25 Jan 2022 11:50:28 +0530 Subject: [PATCH 107/183] Delete ERROR_CODES.md --- ERROR_CODES.md | 76 -------------------------------------------------- 1 file changed, 76 deletions(-) delete mode 100644 ERROR_CODES.md diff --git a/ERROR_CODES.md b/ERROR_CODES.md deleted file mode 100644 index 10d9a60b..00000000 --- a/ERROR_CODES.md +++ /dev/null @@ -1,76 +0,0 @@ -# Error Codes for BPP - -## ID: -BECKN-RFC-034 - -## Draft ID -Draft-01 - -## Title: -Error Codes - -## Category: -Network Policy - -## Status: -Protocol Draft - -## Published on: -January 21, 2022 - -## Expires on: -January 20, 2023 or Date of publication of next draft which ever is earlier - -## License: -CC-BY-ND - -## Authors: -1. Ravi Prakash : ravi@becknfoundation.org - -## Reviewers: -1. Sujith Nair : sujith@becknfoundation.org -2. Pramod Varma : pramod@ekstep.org - -## Introduction - This document outlines the error codes which must be returned by a BPP. - - ## Error Codes - |**Code**|**Message**|**Description**| - |---|---|---| - |30000|Invalid request error|Generic invalid request error| - |30001|Provider not found|When BPP is unable to find the provider id sent by the BAP| - |30002|Provider location not found|When BPP is unable to find the provider location id sent by the BAP| - |30003|Provider category not found|When BPP is unable to find the provider category id sent by the BAP| - |30004|Item not found|When BPP is unable to find the item id sent by the BAP| - |30005|Category not found|When BPP is unable to find the category id sent by the BAP| - |30006|Offer not found|When BPP is unable to find the offer id sent by the BAP| - |30007|Add on not found|When the BPP is unable to find the add on id sent by the BAP| - |30008|Fulfillment unavailable|When BPP is unable to find the fulfillment id sent by the BAP| - |30009|Fulfilment provider unavailable|When the BPP is unable to find fulfilment provider id sent by the BAP| - |30010|Order not found|When the BPP is unable to find the order id sent by the BAP| - |30011|Invalid cancellation reason|When the BPP is unable to find the cancellation reason in cancellation_reason_id| - |30012|Invalid update_target|When the BPP is unable to find the update_target in the order object| - |30013|Update inconsistency|When the BPP finds changes in the order object other than the update_target| - |30014|Entity to rate not found|When the BPP is unable to find the entity to rate in id| - |30015|Invalid rating value|When the BPP receives an invalid value as the rating value in value| - |40000|Business Error|Generic business error| - |40001|Action not applicable|When an API endpoint is not implemented by the BPP as it is not required for their use cases and a BAP calls one of these endpoints| - |40002|Item quantity unavailable|When the BPP is unable to select the specified number in order.items[].quantity| - |40003|Quote unavailable|When the quote sent by the BAP is no longer available from the BPP| - |40004|Payment not supported|When the payment object sent by the BAP is not supported by the BPP| - |40005|Tracking not supported|When the BPP does not support tracking for the order in order_id| - |40006|Fulfilment agent unavailable|When an agent for fulfilment is not available| - |50000|Policy Error|Generic Policy Error| - |50001|Cancellation not possible|When the BPP is unable to cancel the order due to it's cancellation policy| - |50002|Updation not possible|When the BPP is unable to update the order due to it's updation policy| - |50003|Unsupported rating category|When the BPP receives an entity to rate which is not supported| - |50004|Support unavailable|When the BPP receives an object if for which it does not provide support| - - ## Acknowledgements - The author would like to thank the following individuals for their contributions in creating the first draft of this document (in alphabetical order): - -1. Pramod Varma, Beckn Foundation -2. Sujith Nair, Beckn Foundation -3. Supriyo Ghosh, ONDC - -*Copyright (c) 2022 Beckn Foundation. All rights reserved.* From 30a2fea45df2e9898a82a0651644d65256aad6fd Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Tue, 25 Jan 2022 11:58:09 +0530 Subject: [PATCH 108/183] Update core.yaml --- core/v0/api/core.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 82b09a95..fd03b7a3 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1725,7 +1725,7 @@ components: - JSON-SCHEMA-ERROR code: type: string - description: 'Beckn specific error code. For full list of error codes, refer to error_codes.md in the root folder of this repo' + description: 'Beckn specific error code. For full list of error codes, refer to docs/protocol-drafts/BECKN-RFC-005-ERROR-CODES-DRAFT-01.md of this repo' path: type: string description: Path to json schema generating the error. Used only during json schema validation errors From 4f047dc9a96111b47d77391ae3b1769bffff9b8a Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Tue, 25 Jan 2022 13:05:31 +0530 Subject: [PATCH 109/183] Create BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md --- ...006-Signing-Beckn-APIs-In-HTTP-Draft-01.md | 409 ++++++++++++++++++ 1 file changed, 409 insertions(+) create mode 100644 docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md diff --git a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md new file mode 100644 index 00000000..7fe08765 --- /dev/null +++ b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md @@ -0,0 +1,409 @@ +# Signing Beckn APIs in HTTP +## Introduction +When communicating over HTTP using Beckn APIs, the subscribers need to authenticate themselves to perform transactions with other subscribers. Due to the commercial nature of the transactions, every request/callback pair is considered to be a "contract" between two parties. Therefore, it is imperative that all requests and callbacks are digitally signed by the sender and subsequently verified by the receiver. +Furthermore, it is also desirable to ensure that the message was not altered or tampered with during transit. +This document describes a way for network subscribers (BAP/BPPs) and proxy subscribers (BGs) to simultaneously add authentication and message integrity to HTTP messages by using digital signatures. How the signatures are generated and the format of those signatures is out of scope of this document and can be found in this IETF document - [Signing HTTP Messages](https://tools.ietf.org/id/draft-cavage-http-signatures-12.html) +This document specifies the algorithms used in generating the keys, how to construct the signing strings being passed in the headers. Also, it specifies clearly the format of the HTTP headers used for authenticating BAP, BPPs and BGs. + +## Subscriber Authentication +The BAP and BPP subscriber is expected to send an Authorization header (as defined in [RFC 7235](https://tools.ietf.org/id/draft-cavage-http-signatures-12.html#RFC7235), [Section 4.1](https://tools.ietf.org/html/rfc7235#section-2.1)) where the "auth-scheme" is "Signature" and the "auth-param" parameters meet the requirements listed in Section 2 of [this](https://tools.ietf.org/id/draft-cavage-http-signatures-12.html) document. +The BG subscriber is expected to send a X-Gateway-Authorization header where the "auth-scheme" is "Signature" and the "auth-param" parameters meet the requirements listed in Section 2 of [this](https://tools.ietf.org/id/draft-cavage-http-signatures-12.html) document. + +Below is the format of a BAP/BPP Authorization header in the typical HTTP Signature format: + +`Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(ed25519_sign(signing string))"` + + +The BG will send its signature in the X-Gateway-Authorization header in the exact same format as shown below. + +`X-Gateway-Authorization:Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}" algorithm="ed25519" created="1606970629" expires="1607030629" headers="(created) (expires) digest" signature="Base64(ed25519_sign(signing string))"` + +## Hashing Algorithm +For computing the digest of the request body, the hashing function will use the BLAKE-512 (2b) hashing algorithm. BLAKE is a cryptographic hash function based on Dan Bernstein's ChaCha stream cipher. For more documentation on the BLAKE-512(2b) algorithm, please go to [RFC7693](https://tools.ietf.org/html/rfc7693). + +Example of [hash](https://en.wikipedia.org/wiki/BLAKE_(hash_function)#BLAKE2b_algorithm) : + +`BLAKE2b-512("The quick brown fox jumps over the lazy dog") = +a8add4bdddfd93e4877d2746e62817b116364a1fa7bc148d95090bc7333b3673f82401cf7aa2e4cb1ecd90296e3f14cb5413f8ed77be73045b13914cdcd6a918` + +The above hex value encoded in base64 is as below : + +`qK3Uvd39k+SHfSdG5igXsRY2Sh+nvBSNlQkLxzM7NnP4JAHPeqLkyx7NkCluPxTLVBP47Xe+cwRbE5FM3NapGA==` + +## Signing Algorithm +To digitally sign the singing string, the subscribers should use the "ed25519" signature scheme. + +### Example Flow (BAP <=> BG <=> BPP) + +### Step 1 : BAP signs request and calls BG +Let the below be the request body in this example : + +`{"context":{"domain":"nic2004:60212","country":"IND","city":"Kochi","action":"search","core_version":"0.9.1","bap_id":"bap.stayhalo.in","bap_uri":"https://8f9f-49-207-209-131.ngrok.io/protocol/","transaction_id":"e6d9f908-1d26-4ff3-a6d1-3af3d3721054","message_id":"a2fe6d52-9fe4-4d1a-9d0b-dccb8b48522d","timestamp":"2022-01-04T09:17:55.971Z","ttl":"P1M"},"message":{"intent":{"fulfillment":{"start":{"location":{"gps":"10.108768, 76.347517"}},"end":{"location":{"gps":"10.102997, 76.353480"}}}}}}` + +Let BAP’s keys be : + +`signing_public_key=awGPjRK6i/Vg/lWr+0xObclVxlwZXvTjWYtlu6NeOHk= +signing_private_key=lP3sHA+9gileOkXYJXh4Jg8tK0gEEMbf9yCPnFpbldhrAY+NErqL9WD+Vav7TE5tyVXGXBle9ONZi2W7o144eQ==` + +The BAP performs the following steps to create the Authorization header +1. Generate the digest of the request body using the BLAKE-512 hashing function + +`b6lf6lRgOweajukcvcLsagQ2T60+85kRh/Rd2bdS+TG/5ALebOEgDJfyCrre/1+BMu5nA94o4DT3pTFXuUg7sw==` + +2. Generate the created field. The `created` field expresses when the signature was created. The value MUST be a Unix timestamp integer value. A signature with a `created` timestamp value that is in the future MUST NOT be processed. + +`(created): 1641287875` + +3. Generate the expires field. The `expires` field expresses when the signature ceases to be valid. The value MUST be a Unix timestamp integer value. A signature with an `expires` timestamp value that is in the past MUST NOT be processed. + +`(expires): 1641291475` + +4. Concatenate the three values, i.e the `created`, `expires` and `digest` in the format as shown below. The below string is the signing string which the BAP is going to use to sign the request + +`(created): 1641287875 +(expires): 1641291475 +digest: BLAKE-512=b6lf6lRgOweajukcvcLsagQ2T60+85kRh/Rd2bdS+TG/5ALebOEgDJfyCrre/1+BMu5nA94o4DT3pTFXuUg7sw==` + +5. The BAP will then sign this string using it's registered signing private key via the Ed25519 Signature Scheme + +7. Finally the BAP will generate a base64 encoded string of the signature and insert it into the signature parameter of the Authorization header + +`cjbhP0PFyrlSCNszJM1F/YmHDVAWsZqJUPzojnE/7TJU3fJ/rmIlgaUHEr5E0/2PIyf0tpSnWtT6cyNNlpmoAQ==` + +7. Finally the Authorization header will look like this. (Let's assume subscriber_id = example-bap.com, unique_key_id = bap1234) + +`Signature keyId="example-bap.com|bap1234|ed25519",algorithm="ed25519",created="1641287875",expires="1641291475",headers="(created) (expires) digest",signature="cjbhP0PFyrlSCNszJM1F/YmHDVAWsZqJUPzojnE/7TJU3fJ/rmIlgaUHEr5E0/2PIyf0tpSnWtT6cyNNlpmoAQ=="` + +8. Finally the BAP includes the Authorization header in the request and calls the BG API + + +**Note:** +1. The difference between the `created` and the `expires` field should be equal to the TTL of the request context. +2. Also, the `expires` value should not be more than the expiration time of the key used for signing the request. If the expires value appears to be going beyond the lifespan of the signing key, generate a new key and update it on the registry OR use an existing registered key with an expiry time greater than the `expires` value of the signature. + + + +### Step 2 : BG verifies BAP signature +The BG performs the following steps to authenticate the BAP and also ensure message integrity. + +1. BG gets keyId from the Authorization header + +`example-bap.com|bap1234|ed25519` + +2. BG splits the keyId string into subscriber ID, Unique Key ID and algorithm using the delimiter "|". +3. The keyId uses the format {subscriber id}|{unique_key_id}|{signing algorithm} . If the signing algorithm extracted from the keyId does not match the value of the algorithm parameter in the Authorization header, then the BG should return an 401 unauthorised error. +4. The keyId also contains a unique_key_id which is used when the BAP has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple types of subscribers +5. The BG will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id.It will receive the public key of the BAP : + +`awGPjRK6i/Vg/lWr+0xObclVxlwZXvTjWYtlu6NeOHk=` + +6. If no valid key is found, the BPP must return a NACK response with 401 Unauthorised response code. +7. BG will use the BAP's public key to verify the signature. If signature is verified, the BAP is considered to be authenticated. If not BG should return a 401 error +8. If the signature is not verified, the BG must return a NACK response with 401 Unauthorised response code with a WWW-Authenticate header. For example, for an invalid signature, the BG must return the following: + +**Headers:** + +HTTP/1.1 401 Unauthorized + +WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) digest" + +... + +**Request Body:** + +{ + + "message": { + + "ack": { + + "status": "NACK" + + } + + } + +} + + + +### Step 3 : BG signs request before forwarding request to BPP +Let the BG’s keys be : + +`signing_public_key=7YRZXVeIJ0/Va56vYgzT1Uirg6mnq3FY0MBZY9DJft0= +signing_private_key=hJ5sCmbe7s9Wateq6QAdBGloVSkLuLHWOXcRkzrMcVLthFldV4gnT9Vrnq9iDNPVSKuDqaercVjQwFlj0Ml+3Q==` + +Before forwarding the request to the BPP, the BG performs the following steps to create the X-Gateway-Authorization header. + +1. Generate the digest of the request body using the BLAKE-512 hashing function + +`b6lf6lRgOweajukcvcLsagQ2T60+85kRh/Rd2bdS+TG/5ALebOEgDJfyCrre/1+BMu5nA94o4DT3pTFXuUg7sw==` + +2. Generate the `created` field. The `created` field expresses when the signature was created. The value MUST be a Unix timestamp integer value. A signature with a `created` timestamp value that is in the future MUST NOT be processed. + +`(created): 1641287885` + +3. Generate the `expires` field. The `expires` field expresses when the signature ceases to be valid. The value MUST be a Unix timestamp integer value. A signature with an `expires` timestamp value that is in the past MUST NOT be processed. + +`(expires): 1641291485` + +4. Concatenate the three values, i.e the `created`, `expires` and `digest` in the format as shown below. The below string is the signing string which the BG is going to use to sign the request + +`(created): 1641287885 +(expires): 1641291485 +digest: BLAKE-512=b6lf6lRgOweajukcvcLsagQ2T60+85kRh/Rd2bdS+TG/5ALebOEgDJfyCrre/1+BMu5nA94o4DT3pTFXuUg7sw==` + +5. The BG will then sign this string using it's registered signing private key via the Ed25519 Signature Scheme +6. Finally the BG will generate a base64 encoded string of the signature and insert it into the signature parameter of the X-Gateway-Authorization header + +`hJ5sCmbe7s9Wateq6QAdBGloVSkLuLHWOXcRkzrMcVLthFldV4gnT9Vrnq9iDNPVSKuDqaercVjQwFlj0Ml+3Q==` + +7. Finally the X-Gateway-Authorization header will look like this. (Let's assume subscriber_id = example-bg.com, unique_key_id = bg3456) + +`Signature keyId="example-bg.com|bg3456|ed25519",algorithm="ed25519",created="1641287885",expires="1641287885",headers="(created) (expires) digest",signature="hJ5sCmbe7s9Wateq6QAdBGloVSkLuLHWOXcRkzrMcVLthFldV4gnT9Vrnq9iDNPVSKuDqaercVjQwFlj0Ml+3Q=="` + +8. Finally the BG includes the X-Gateway-Authorization header in the request and calls the BPP search API + +**Note:** +3. The difference between the `created` and the `expires` field should be equal to the TTL of the request. +4. Also, the `expires` value should not be more than the expiration time of the key used for signing the request. If the expires value appears to be going beyond the lifespan of the signing key, generate a new key and update it on the registry via subscribe API OR use an existing registered key with an expiry time greater than the `expires` value of the signature + + + +### Step 4 : BPP verifies BG signature +The BPP performs the following steps to authenticate the BAP and the BG and also ensure message integrity. + +1. Get keyId from the X-Gateway-Authorization header + +`example-bg.com|bg3456|ed25519` + +2. Split the keyID string using the delimiter `|`. As we know, the subscriber ID is the registered domain name of the subscriber and follows the format{subdomain}.{domain}.{extension}. +3. The keyID uses the format {subscriber id}|{unique_public_key_id}|{signing algorithm} . If the signing algorithm extracted from the keyId does not match the value of the algorithm field in the X-Gateway-Authorization header, then the BPP should return an error. +4. The keyID also contains a unique_public_key_id which is used when the BG has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple subscribers +5. The BG will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id. It will get the BG’s public key : + +`The BG will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id. It will get the BG’s public key :` + +`If no valid key is found, the BPP must return a NACK response with 401 Unauthorised response code.` + +6. If no valid key is found, the BPP must return a NACK response with 401 Unauthorised response code. +7. BPP will use the BG's public key to verify the signature. If the signature is verified, the BG is considered to be authenticated. +8. If the signature is not verified, the BPP must return a NACK response with 401 Unauthorised response code with a Proxy-Authenticate header. For example, for an invalid BG signature, the BPP must return the following: + +**Headers:** + +HTTP/1.1 401 Unauthorized + +Proxy-Authenticate: Signature realm="example-bpp.com",headers="(created) (expires) digest" + +... + +**Request Body:** + +{ + + "message": { + + "ack": { + + "status": "NACK" + + } + + } + +} + + + +### Step 5 : BPP verifies BAP signature +The BPP performs the following steps to authenticate the BAP and also ensure message integrity during transit. + +1. BPP gets keyId from the Authorization header +2. BPP splits the keyID string using the delimiter `|`. +3. The keyID uses the format {subscriber id}|{unique_key_id}|{signing algorithm} . If the signing algorithm extracted from the keyId does not match the value of the algorithm field in the Authorization header, then the BPP should return an error. +4. The keyId also contains a unique_public_key_id which is used when the BAP has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple types of subscribers +5. The BPP will now look up the registry for the public key of the BAP by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the BAP's public key matching the subscriber_id and unique_key_id. +6. BG will use the BAP's public key to verify the signature. If signature is verified, the BAP is considered to be authenticated. If not BG should return a 401 error +7. If the signature is not verified, the BG must return a NACK response with 401 Unauthorised response code with a WWW-Authenticate header. For example, for an invalid signature, the BPP must return the following: + +**Headers** + +HTTP/1.1 401 Unauthorized + +WWW-Authenticate: Signature realm="example-bpp.com",headers="(created) (expires) digest" + +... + +**Request Body** + +{ + + "message": { + + "ack": { + + "status": "NACK" + + } + + } + +} + + + +### Step 6 : BPP signs callback and calls BG +The BPP performs the following steps to create the Authorization header + +1. Generate the digest of the request body using the BLAKE-512 hashing function +2. Generate the created field. The `created` field expresses when the signature was created. The value MUST be a Unix timestamp integer value. A signature with a `created` timestamp value that is in the future MUST NOT be processed. +3. Generate the expires field. The `expires` field expresses when the signature ceases to be valid. The value MUST be a Unix timestamp integer value. A signature with an `expires` timestamp value that is in the past MUST NOT be processed. +4. Concatenate the three values, i.e the `created`, `expires` and `digest` in the format as shown below. The below string is the signing string which the BPP is going to use to sign the request + +`(created): 1402170695 +(expires): 1402170995 +digest: BLAKE-512=X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=` + +5. Sign this string using it's registered signing private key via the ed25519 Signature Scheme +6. Generate a base64 encoded string of the signature and insert it into the signature parameter of the Authorization header +7. The final Authorization header will look like this. (Let's assume subscriber_id = example-bpp.com, unique_key_id = bpp5678) + +`Signature keyId="example-bpp.com|bpp5678|ed25519",algorithm="ed25519",created="1641287885",expires="1641287885",headers="(created) (expires) digest",signature="hJ5sCmbe7s9Wateq6QAdBGloVSkLuLHWOXcRkzrMcVLthFldV4gnT9Vrnq9iDNPVSKuDqaercVjQwFlj0Ml+3Q=="` + +9. Finally the BPP includes the Authorization header in the request and calls the BG API + + + +### Step 7 : BG verifies BPP signature +The BG performs the following steps to authenticate the BPP and also ensure message integrity. + +1. BG gets keyId from the Authorization header +2. BG splits the keyId string into subscriber ID, Unique Key ID and algorithm using the delimiter "|". +3. The keyId uses the format {subscriber id}|{unique_key_id}|{signing algorithm} . If the signing algorithm extracted from the keyId does not match the value of the algorithm parameter in the Authorization header, then the BG should return an 401 unauthorised error. +4. The keyId also contains a unique_key_id which is used when the BPP has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple types of subscribers +5. The BG will now look up the registry for the public key of the BPP by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the BPP's public key matching the subscriber_id and unique_key_id +6. BG will use the BPP's public key to verify the signature. If signature is verified, the BPP is considered to be authenticated. If not BG should return a 401 error +7. If the signature is not verified, the BG must return a NACK response with 401 Unauthorised response code with a WWW-Authenticate header. For example, for an invalid signature, the BG must return the following: + +**Headers** + +HTTP/1.1 401 Unauthorized + +WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) digest" + +... + +**Request Body** + +{ + + "message": { + + "ack": { + + "status": "NACK" + + } + + } + +} + + +### Step 8 : BG signs callback before calling BAP +Before forwarding the request to the BAP, the BG performs the following steps to create the X-Gateway-Authorization header + +1. Generate the digest of the request body using the BLAKE-512 hashing function +2. Generate the `created` field. The `created` field expresses when the signature was created. The value MUST be a Unix timestamp integer value. A signature with a `created` timestamp value that is in the future MUST NOT be processed. +3. Generate the `expires` field. The `expires` field expresses when the signature ceases to be valid. The value MUST be a Unix timestamp integer value. A signature with an `expires` timestamp value that is in the past MUST NOT be processed. +4. Concatenate the three values, i.e the `created`, `expires` and `digest` in the format as shown below. The below string is the signing string which the BG is going to use to sign the request + +`(created): 1402170695 + +(expires): 1402170995 + +digest: BLAKE-512=X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=` + +5. The BG will then sign this string using it's registered signing private key via the ed25519 Signature Scheme +6. Finally the BG will generate a base64 encoded string of the signature and insert it into the signature parameter of the X-Gateway-Authorization header +7. Finally the X-Gateway-Authorization header will look like this. (Let's assume subscriber_id = example-bg.com, unique_key_id = bg3456) + +`Signature keyId="example-bg.com|bg3456|ed25519",algorithm="ed25519",created="1641287885",expires="1641287885",headers="(created) (expires) digest",signature="hJ5sCmbe7s9Wateq6QAdBGloVSkLuLHWOXcRkzrMcVLthFldV4gnT9Vrnq9iDNPVSKuDqaercVjQwFlj0Ml+3Q=="` + +9. Finally the BG includes the X-Gateway-Authorization header in the request and calls the BAP API + +**Note:** + +1. The difference between the `created` and the `expires` field should be equal to the TTL of the request. +2. Also, the `expires` value should not be more than the expiration time of the key used for signing the request. If the expires value appears to be going beyond the lifespan of the signing key, generate a new key and update it on the registry via subscribe API OR use an existing registered key with an expiry time greater than the `expires` value of the signature + + +### Step 9 : BAP verifies BG signature +The BAP performs the following steps to authenticate the BAP and the BG and also ensure message integrity. + +8. Get keyId from the X-Gateway-Authorization header +9. Split the keyID string using the delimiter `|`. +10. The keyID uses the format {subscriber id}|{unique_public_key_id}|{signing algorithm} . If the signing algorithm extracted from the keyId does not match the value of the algorithm field in the X-Gateway-Authorization header, then the BPP should return an error. +11. The keyID also contains a unique_public_key_id which is used when the BG has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple subscribers +12. The BAP will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id. If no valid key is found, the BPP must return +13. BPP will use the BG's public key to verify the signature. If signature is verified, the BG is considered to be authenticated. +14. If the signature is not verified, the BPP must return a NACK response with 401 Unauthorised response code with a Proxy-Authenticate header. For example, for an invalid BG signature, the BAP must return the following: + +**Headers** + +HTTP/1.1 401 Unauthorized + +/Proxy-Authenticate: Signature realm="example-bap.com",headers="(created) (expires) digest" + +... + +**Request Body** + +{ + + "message": { + + "ack": { + + "status": "NACK" + + } + + } + +} + + +### Step 10 : BAP verifies BPP signature +The BAP performs the following steps to authenticate the BAP and also ensure message integrity during transit. + +1. BAP gets keyId from the Authorization header +2. BAP splits the keyID string using the delimiter `|`. +3. The keyID uses the format {subscriber id}|{unique_public_key_id}|{signing algorithm} . If the signing algorithm extracted from the keyId does not match the value of the algorithm field in the Authorization header, then the BAP should return an error. +4. The keyId also contains a unique_public_key_id which is used when the BPP has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple types of subscribers +5. The BAP will now look up the registry for the public key of the BPP by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the BPP's public key matching the subscriber_id and unique_key_id +6. BAP will use the BPP's public key to verify the signature. If signature is verified, the BPP is considered to be authenticated. +7. If the signature is not verified, the BAP must return a NACK response with 401 Unauthorised response code with a WWW-Authenticate header. For example, for an invalid BPP signature, the BAP must return the following: + +**Headers** + +HTTP/1.1 401 Unauthorized + +WWW-Authenticate: Signature realm="example-bap.com",headers="(created) (expires) digest" + +... + + +**Request Body:** + +{ + + "message": { + + "ack": { +  "status": "NACK" + } + +} +} From e287d9fc86bc4351e2ef6d219e0a843548a7f37c Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Tue, 25 Jan 2022 13:07:30 +0530 Subject: [PATCH 110/183] Update BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md --- .../BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md index 7fe08765..daf4af5c 100644 --- a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md +++ b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md @@ -403,7 +403,9 @@ WWW-Authenticate: Signature realm="example-bap.com",headers="(created) (expires) "ack": {   "status": "NACK" +  } } + } From 628eb7fc295da94d1ca2a27d7c2858b0dbb71433 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Tue, 25 Jan 2022 13:11:13 +0530 Subject: [PATCH 111/183] Update BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md --- ...006-Signing-Beckn-APIs-In-HTTP-Draft-01.md | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md index daf4af5c..8a8c852b 100644 --- a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md +++ b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md @@ -117,11 +117,11 @@ WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) "ack": { - "status": "NACK" +  "status": "NACK" - } + } - } + } } @@ -206,11 +206,11 @@ Proxy-Authenticate: Signature realm="example-bpp.com",headers="(created) (expire "ack": { - "status": "NACK" +  "status": "NACK" - } + } - } + } } @@ -243,11 +243,11 @@ WWW-Authenticate: Signature realm="example-bpp.com",headers="(created) (expires) "ack": { - "status": "NACK" +  "status": "NACK" - } + } - } + } } @@ -302,11 +302,11 @@ WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) "ack": { - "status": "NACK" +  "status": "NACK" - } + } - } + } } @@ -366,11 +366,11 @@ HTTP/1.1 401 Unauthorized "ack": { - "status": "NACK" +  "status": "NACK" - } + } - } + } } @@ -406,6 +406,5 @@ WWW-Authenticate: Signature realm="example-bap.com",headers="(created) (expires)  } -} - + } } From c53557e8c32eb7752bf4a1ef1bb55cb881613b29 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Tue, 25 Jan 2022 13:27:20 +0530 Subject: [PATCH 112/183] Update BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md --- ...006-Signing-Beckn-APIs-In-HTTP-Draft-01.md | 65 +++++++++---------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md index 8a8c852b..42f1d9a5 100644 --- a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md +++ b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md @@ -2,7 +2,7 @@ ## Introduction When communicating over HTTP using Beckn APIs, the subscribers need to authenticate themselves to perform transactions with other subscribers. Due to the commercial nature of the transactions, every request/callback pair is considered to be a "contract" between two parties. Therefore, it is imperative that all requests and callbacks are digitally signed by the sender and subsequently verified by the receiver. Furthermore, it is also desirable to ensure that the message was not altered or tampered with during transit. -This document describes a way for network subscribers (BAP/BPPs) and proxy subscribers (BGs) to simultaneously add authentication and message integrity to HTTP messages by using digital signatures. How the signatures are generated and the format of those signatures is out of scope of this document and can be found in this IETF document - [Signing HTTP Messages](https://tools.ietf.org/id/draft-cavage-http-signatures-12.html) +This document describes a way for network subscribers (BAP/BPPs) and proxy subscribers (BGs) to simultaneously add authentication and message integrity to HTTP messages by using digital signatures. How the signatures are generated and the format of those signatures is out of scope of this document and can be found in this IETF document - [Signing HTTP Messages](https://tools.ietf.org/id/draft-cavage-http-signatures-12.html). This document specifies the algorithms used in generating the keys, how to construct the signing strings being passed in the headers. Also, it specifies clearly the format of the HTTP headers used for authenticating BAP, BPPs and BGs. ## Subscriber Authentication @@ -92,13 +92,13 @@ The BG performs the following steps to authenticate the BAP and also ensure mess 2. BG splits the keyId string into subscriber ID, Unique Key ID and algorithm using the delimiter "|". 3. The keyId uses the format {subscriber id}|{unique_key_id}|{signing algorithm} . If the signing algorithm extracted from the keyId does not match the value of the algorithm parameter in the Authorization header, then the BG should return an 401 unauthorised error. -4. The keyId also contains a unique_key_id which is used when the BAP has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple types of subscribers +4. The keyId also contains a unique_key_id which is used when the BAP has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple types of subscribers. 5. The BG will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id.It will receive the public key of the BAP : `awGPjRK6i/Vg/lWr+0xObclVxlwZXvTjWYtlu6NeOHk=` 6. If no valid key is found, the BPP must return a NACK response with 401 Unauthorised response code. -7. BG will use the BAP's public key to verify the signature. If signature is verified, the BAP is considered to be authenticated. If not BG should return a 401 error +7. BG will use the BAP's public key to verify the signature. If signature is verified, the BAP is considered to be authenticated. If not BG should return a 401 error. 8. If the signature is not verified, the BG must return a NACK response with 401 Unauthorised response code with a WWW-Authenticate header. For example, for an invalid signature, the BG must return the following: **Headers:** @@ -179,13 +179,11 @@ The BPP performs the following steps to authenticate the BAP and the BG and also 2. Split the keyID string using the delimiter `|`. As we know, the subscriber ID is the registered domain name of the subscriber and follows the format{subdomain}.{domain}.{extension}. 3. The keyID uses the format {subscriber id}|{unique_public_key_id}|{signing algorithm} . If the signing algorithm extracted from the keyId does not match the value of the algorithm field in the X-Gateway-Authorization header, then the BPP should return an error. -4. The keyID also contains a unique_public_key_id which is used when the BG has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple subscribers +4. The keyID also contains a unique_public_key_id which is used when the BG has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple subscribers. 5. The BG will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id. It will get the BG’s public key : `The BG will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id. It will get the BG’s public key :` -`If no valid key is found, the BPP must return a NACK response with 401 Unauthorised response code.` - 6. If no valid key is found, the BPP must return a NACK response with 401 Unauthorised response code. 7. BPP will use the BG's public key to verify the signature. If the signature is verified, the BG is considered to be authenticated. 8. If the signature is not verified, the BPP must return a NACK response with 401 Unauthorised response code with a Proxy-Authenticate header. For example, for an invalid BG signature, the BPP must return the following: @@ -219,12 +217,12 @@ Proxy-Authenticate: Signature realm="example-bpp.com",headers="(created) (expire ### Step 5 : BPP verifies BAP signature The BPP performs the following steps to authenticate the BAP and also ensure message integrity during transit. -1. BPP gets keyId from the Authorization header +1. BPP gets keyId from the Authorization header. 2. BPP splits the keyID string using the delimiter `|`. -3. The keyID uses the format {subscriber id}|{unique_key_id}|{signing algorithm} . If the signing algorithm extracted from the keyId does not match the value of the algorithm field in the Authorization header, then the BPP should return an error. -4. The keyId also contains a unique_public_key_id which is used when the BAP has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple types of subscribers +3. The keyID uses the format {subscriber id}|{unique_key_id}|{signing algorithm}. If the signing algorithm extracted from the keyId does not match the value of the algorithm field in the Authorization header, then the BPP should return an error. +4. The keyId also contains a unique_public_key_id which is used when the BAP has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple types of subscribers. 5. The BPP will now look up the registry for the public key of the BAP by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the BAP's public key matching the subscriber_id and unique_key_id. -6. BG will use the BAP's public key to verify the signature. If signature is verified, the BAP is considered to be authenticated. If not BG should return a 401 error +6. BG will use the BAP's public key to verify the signature. If signature is verified, the BAP is considered to be authenticated. If not BG should return a 401 error. 7. If the signature is not verified, the BG must return a NACK response with 401 Unauthorised response code with a WWW-Authenticate header. For example, for an invalid signature, the BPP must return the following: **Headers** @@ -256,33 +254,33 @@ WWW-Authenticate: Signature realm="example-bpp.com",headers="(created) (expires) ### Step 6 : BPP signs callback and calls BG The BPP performs the following steps to create the Authorization header -1. Generate the digest of the request body using the BLAKE-512 hashing function +1. Generate the digest of the request body using the BLAKE-512 hashing function. 2. Generate the created field. The `created` field expresses when the signature was created. The value MUST be a Unix timestamp integer value. A signature with a `created` timestamp value that is in the future MUST NOT be processed. 3. Generate the expires field. The `expires` field expresses when the signature ceases to be valid. The value MUST be a Unix timestamp integer value. A signature with an `expires` timestamp value that is in the past MUST NOT be processed. -4. Concatenate the three values, i.e the `created`, `expires` and `digest` in the format as shown below. The below string is the signing string which the BPP is going to use to sign the request +4. Concatenate the three values, i.e the `created`, `expires` and `digest` in the format as shown below. The below string is the signing string which the BPP is going to use to sign the request. `(created): 1402170695 (expires): 1402170995 digest: BLAKE-512=X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=` -5. Sign this string using it's registered signing private key via the ed25519 Signature Scheme -6. Generate a base64 encoded string of the signature and insert it into the signature parameter of the Authorization header -7. The final Authorization header will look like this. (Let's assume subscriber_id = example-bpp.com, unique_key_id = bpp5678) +5. Sign this string using it's registered signing private key via the ed25519 Signature Scheme. +6. Generate a base64 encoded string of the signature and insert it into the signature parameter of the Authorization header. +7. The final Authorization header will look like this. (Let's assume subscriber_id = example-bpp.com, unique_key_id = bpp5678). `Signature keyId="example-bpp.com|bpp5678|ed25519",algorithm="ed25519",created="1641287885",expires="1641287885",headers="(created) (expires) digest",signature="hJ5sCmbe7s9Wateq6QAdBGloVSkLuLHWOXcRkzrMcVLthFldV4gnT9Vrnq9iDNPVSKuDqaercVjQwFlj0Ml+3Q=="` -9. Finally the BPP includes the Authorization header in the request and calls the BG API +9. Finally the BPP includes the Authorization header in the request and calls the BG API. ### Step 7 : BG verifies BPP signature The BG performs the following steps to authenticate the BPP and also ensure message integrity. -1. BG gets keyId from the Authorization header +1. BG gets keyId from the Authorization header. 2. BG splits the keyId string into subscriber ID, Unique Key ID and algorithm using the delimiter "|". 3. The keyId uses the format {subscriber id}|{unique_key_id}|{signing algorithm} . If the signing algorithm extracted from the keyId does not match the value of the algorithm parameter in the Authorization header, then the BG should return an 401 unauthorised error. -4. The keyId also contains a unique_key_id which is used when the BPP has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple types of subscribers -5. The BG will now look up the registry for the public key of the BPP by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the BPP's public key matching the subscriber_id and unique_key_id +4. The keyId also contains a unique_key_id which is used when the BPP has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple types of subscribers. +5. The BG will now look up the registry for the public key of the BPP by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the BPP's public key matching the subscriber_id and unique_key_id. 6. BG will use the BPP's public key to verify the signature. If signature is verified, the BPP is considered to be authenticated. If not BG should return a 401 error 7. If the signature is not verified, the BG must return a NACK response with 401 Unauthorised response code with a WWW-Authenticate header. For example, for an invalid signature, the BG must return the following: @@ -314,10 +312,10 @@ WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) ### Step 8 : BG signs callback before calling BAP Before forwarding the request to the BAP, the BG performs the following steps to create the X-Gateway-Authorization header -1. Generate the digest of the request body using the BLAKE-512 hashing function +1. Generate the digest of the request body using the BLAKE-512 hashing function. 2. Generate the `created` field. The `created` field expresses when the signature was created. The value MUST be a Unix timestamp integer value. A signature with a `created` timestamp value that is in the future MUST NOT be processed. 3. Generate the `expires` field. The `expires` field expresses when the signature ceases to be valid. The value MUST be a Unix timestamp integer value. A signature with an `expires` timestamp value that is in the past MUST NOT be processed. -4. Concatenate the three values, i.e the `created`, `expires` and `digest` in the format as shown below. The below string is the signing string which the BG is going to use to sign the request +4. Concatenate the three values, i.e the `created`, `expires` and `digest` in the format as shown below. The below string is the signing string which the BG is going to use to sign the request. `(created): 1402170695 @@ -325,30 +323,30 @@ Before forwarding the request to the BAP, the BG performs the following steps to digest: BLAKE-512=X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=` -5. The BG will then sign this string using it's registered signing private key via the ed25519 Signature Scheme -6. Finally the BG will generate a base64 encoded string of the signature and insert it into the signature parameter of the X-Gateway-Authorization header -7. Finally the X-Gateway-Authorization header will look like this. (Let's assume subscriber_id = example-bg.com, unique_key_id = bg3456) +5. The BG will then sign this string using it's registered signing private key via the ed25519 Signature Scheme. +6. Finally the BG will generate a base64 encoded string of the signature and insert it into the signature parameter of the X-Gateway-Authorization header. +7. Finally the X-Gateway-Authorization header will look like this. (Let's assume subscriber_id = example-bg.com, unique_key_id = bg3456). `Signature keyId="example-bg.com|bg3456|ed25519",algorithm="ed25519",created="1641287885",expires="1641287885",headers="(created) (expires) digest",signature="hJ5sCmbe7s9Wateq6QAdBGloVSkLuLHWOXcRkzrMcVLthFldV4gnT9Vrnq9iDNPVSKuDqaercVjQwFlj0Ml+3Q=="` -9. Finally the BG includes the X-Gateway-Authorization header in the request and calls the BAP API +8. Finally the BG includes the X-Gateway-Authorization header in the request and calls the BAP API. **Note:** 1. The difference between the `created` and the `expires` field should be equal to the TTL of the request. -2. Also, the `expires` value should not be more than the expiration time of the key used for signing the request. If the expires value appears to be going beyond the lifespan of the signing key, generate a new key and update it on the registry via subscribe API OR use an existing registered key with an expiry time greater than the `expires` value of the signature +2. Also, the `expires` value should not be more than the expiration time of the key used for signing the request. If the expires value appears to be going beyond the lifespan of the signing key, generate a new key and update it on the registry via subscribe API OR use an existing registered key with an expiry time greater than the `expires` value of the signature. ### Step 9 : BAP verifies BG signature The BAP performs the following steps to authenticate the BAP and the BG and also ensure message integrity. -8. Get keyId from the X-Gateway-Authorization header -9. Split the keyID string using the delimiter `|`. -10. The keyID uses the format {subscriber id}|{unique_public_key_id}|{signing algorithm} . If the signing algorithm extracted from the keyId does not match the value of the algorithm field in the X-Gateway-Authorization header, then the BPP should return an error. -11. The keyID also contains a unique_public_key_id which is used when the BG has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple subscribers -12. The BAP will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id. If no valid key is found, the BPP must return -13. BPP will use the BG's public key to verify the signature. If signature is verified, the BG is considered to be authenticated. -14. If the signature is not verified, the BPP must return a NACK response with 401 Unauthorised response code with a Proxy-Authenticate header. For example, for an invalid BG signature, the BAP must return the following: +1. Get keyId from the X-Gateway-Authorization header +2. Split the keyID string using the delimiter `|`. +3. The keyID uses the format {subscriber id}|{unique_public_key_id}|{signing algorithm} . If the signing algorithm extracted from the keyId does not match the value of the algorithm field in the X-Gateway-Authorization header, then the BPP should return an error. +4. The keyID also contains a unique_public_key_id which is used when the BG has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple subscribers +5. The BAP will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id. If no valid key is found, the BPP must return +6. BPP will use the BG's public key to verify the signature. If signature is verified, the BG is considered to be authenticated. +7. If the signature is not verified, the BPP must return a NACK response with 401 Unauthorised response code with a Proxy-Authenticate header. For example, for an invalid BG signature, the BAP must return the following: **Headers** @@ -407,4 +405,5 @@ WWW-Authenticate: Signature realm="example-bap.com",headers="(created) (expires)  }  } + } From bcf0601c7521d6056f95b8fe184f5585714bb94f Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 28 Jan 2022 12:47:52 +0530 Subject: [PATCH 113/183] Update BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md --- ...006-Signing-Beckn-APIs-In-HTTP-Draft-01.md | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md index 42f1d9a5..95541833 100644 --- a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md +++ b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md @@ -103,15 +103,15 @@ The BG performs the following steps to authenticate the BAP and also ensure mess **Headers:** -HTTP/1.1 401 Unauthorized +`HTTP/1.1 401 Unauthorized WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) digest" -... +...` **Request Body:** -{ +`{ "message": { @@ -123,7 +123,7 @@ WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires)  } -} +}` @@ -182,7 +182,7 @@ The BPP performs the following steps to authenticate the BAP and the BG and also 4. The keyID also contains a unique_public_key_id which is used when the BG has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple subscribers. 5. The BG will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id. It will get the BG’s public key : -`The BG will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id. It will get the BG’s public key :` +The BG will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id. It will get the BG’s public key : 6. If no valid key is found, the BPP must return a NACK response with 401 Unauthorised response code. 7. BPP will use the BG's public key to verify the signature. If the signature is verified, the BG is considered to be authenticated. @@ -190,15 +190,15 @@ The BPP performs the following steps to authenticate the BAP and the BG and also **Headers:** -HTTP/1.1 401 Unauthorized +`HTTP/1.1 401 Unauthorized Proxy-Authenticate: Signature realm="example-bpp.com",headers="(created) (expires) digest" -... +...` **Request Body:** -{ +`{ "message": { @@ -210,7 +210,7 @@ Proxy-Authenticate: Signature realm="example-bpp.com",headers="(created) (expire  } -} +}` @@ -227,15 +227,15 @@ The BPP performs the following steps to authenticate the BAP and also ensure mes **Headers** -HTTP/1.1 401 Unauthorized +`HTTP/1.1 401 Unauthorized WWW-Authenticate: Signature realm="example-bpp.com",headers="(created) (expires) digest" -... +...` **Request Body** -{ +`{ "message": { @@ -247,7 +247,7 @@ WWW-Authenticate: Signature realm="example-bpp.com",headers="(created) (expires)  } -} +}` @@ -286,15 +286,15 @@ The BG performs the following steps to authenticate the BPP and also ensure mess **Headers** -HTTP/1.1 401 Unauthorized +`HTTP/1.1 401 Unauthorized WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) digest" -... +...` **Request Body** -{ +`{ "message": { @@ -306,7 +306,7 @@ WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires)  } -} +}` ### Step 8 : BG signs callback before calling BAP @@ -350,15 +350,15 @@ The BAP performs the following steps to authenticate the BAP and the BG and also **Headers** -HTTP/1.1 401 Unauthorized +`HTTP/1.1 401 Unauthorized /Proxy-Authenticate: Signature realm="example-bap.com",headers="(created) (expires) digest" -... +...` **Request Body** -{ +`{ "message": { @@ -370,7 +370,7 @@ HTTP/1.1 401 Unauthorized  } -} +}` ### Step 10 : BAP verifies BPP signature @@ -386,16 +386,16 @@ The BAP performs the following steps to authenticate the BAP and also ensure mes **Headers** -HTTP/1.1 401 Unauthorized +`HTTP/1.1 401 Unauthorized WWW-Authenticate: Signature realm="example-bap.com",headers="(created) (expires) digest" -... +...` **Request Body:** -{ +`{ "message": { @@ -406,4 +406,4 @@ WWW-Authenticate: Signature realm="example-bap.com",headers="(created) (expires)  } -} +}` From a59bf3db5afef724d7839a0ce489fb99059daccb Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 28 Jan 2022 12:50:15 +0530 Subject: [PATCH 114/183] Update BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md --- .../BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md index 95541833..f573849f 100644 --- a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md +++ b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md @@ -95,7 +95,7 @@ The BG performs the following steps to authenticate the BAP and also ensure mess 4. The keyId also contains a unique_key_id which is used when the BAP has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple types of subscribers. 5. The BG will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id.It will receive the public key of the BAP : -`awGPjRK6i/Vg/lWr+0xObclVxlwZXvTjWYtlu6NeOHk=` +` awGPjRK6i/Vg/lWr+0xObclVxlwZXvTjWYtlu6NeOHk=` 6. If no valid key is found, the BPP must return a NACK response with 401 Unauthorised response code. 7. BG will use the BAP's public key to verify the signature. If signature is verified, the BAP is considered to be authenticated. If not BG should return a 401 error. From 73ca0a0304c141093c4e02e7c340f5968c74e783 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 28 Jan 2022 12:53:18 +0530 Subject: [PATCH 115/183] Update BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md --- .../BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md index f573849f..ca8c2395 100644 --- a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md +++ b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md @@ -95,7 +95,7 @@ The BG performs the following steps to authenticate the BAP and also ensure mess 4. The keyId also contains a unique_key_id which is used when the BAP has uploaded multiple public keys to a registry OR when the same domain is being used for implementing multiple types of subscribers. 5. The BG will now look up the registry for the public key of the subscriber by sending the subscriber_id and the unique_key_id via the lookup API or by retrieving a cached copy of the subscriber's public key matching the subscriber_id and unique_key_id.It will receive the public key of the BAP : -` awGPjRK6i/Vg/lWr+0xObclVxlwZXvTjWYtlu6NeOHk=` +`awGPjRK6i/Vg/lWr+0xObclVxlwZXvTjWYtlu6NeOHk=` 6. If no valid key is found, the BPP must return a NACK response with 401 Unauthorised response code. 7. BG will use the BAP's public key to verify the signature. If signature is verified, the BAP is considered to be authenticated. If not BG should return a 401 error. @@ -103,11 +103,11 @@ The BG performs the following steps to authenticate the BAP and also ensure mess **Headers:** -`HTTP/1.1 401 Unauthorized +`HTTP/1.1 401 Unauthorized` -WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) digest" +`WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) digest"` -...` +... **Request Body:** From 9202e1755534a99618a4b288b2381022b72169ce Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 28 Jan 2022 12:55:18 +0530 Subject: [PATCH 116/183] Update BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md --- .../BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md index ca8c2395..32dd5513 100644 --- a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md +++ b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md @@ -103,11 +103,9 @@ The BG performs the following steps to authenticate the BAP and also ensure mess **Headers:** -`HTTP/1.1 401 Unauthorized` - -`WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) digest"` - -... +`HTTP/1.1 401 Unauthorized +WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) digest" +...` **Request Body:** From 922754ad27dd680a09574c6aa8df7405c36b755c Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 28 Jan 2022 12:56:31 +0530 Subject: [PATCH 117/183] Update BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md --- .../BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md index 32dd5513..f5752b6b 100644 --- a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md +++ b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md @@ -110,17 +110,11 @@ WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) **Request Body:** `{ - "message": { - "ack": { -   "status": "NACK" -  } -  } - }` From 8d58f93b90f6eb03d092bdd62f61a00fa97e2da8 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 28 Jan 2022 13:00:43 +0530 Subject: [PATCH 118/183] Update BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md --- ...006-Signing-Beckn-APIs-In-HTTP-Draft-01.md | 75 +++++-------------- 1 file changed, 18 insertions(+), 57 deletions(-) diff --git a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md index f5752b6b..8f53ce24 100644 --- a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md +++ b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md @@ -112,9 +112,9 @@ WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) `{ "message": { "ack": { -  "status": "NACK" - } - } +"status": "NACK" +} +} }` @@ -183,25 +183,17 @@ The BG will now look up the registry for the public key of the subscriber by sen **Headers:** `HTTP/1.1 401 Unauthorized - Proxy-Authenticate: Signature realm="example-bpp.com",headers="(created) (expires) digest" - ...` **Request Body:** `{ - "message": { - "ack": { - -  "status": "NACK" - - } - - } - +"status": "NACK" +} +} }` @@ -220,25 +212,17 @@ The BPP performs the following steps to authenticate the BAP and also ensure mes **Headers** `HTTP/1.1 401 Unauthorized - WWW-Authenticate: Signature realm="example-bpp.com",headers="(created) (expires) digest" - ...` **Request Body** `{ - "message": { - "ack": { - -  "status": "NACK" - - } - - } - +"status": "NACK" +} +} }` @@ -279,25 +263,17 @@ The BG performs the following steps to authenticate the BPP and also ensure mess **Headers** `HTTP/1.1 401 Unauthorized - WWW-Authenticate: Signature realm="example-bg.com",headers="(created) (expires) digest" - ...` **Request Body** `{ - "message": { - "ack": { - -  "status": "NACK" - - } - - } - +"status": "NACK" +} +} }` @@ -343,25 +319,17 @@ The BAP performs the following steps to authenticate the BAP and the BG and also **Headers** `HTTP/1.1 401 Unauthorized - /Proxy-Authenticate: Signature realm="example-bap.com",headers="(created) (expires) digest" - ...` **Request Body** `{ - "message": { - "ack": { - -  "status": "NACK" - - } - - } - +"status": "NACK" +} +} }` @@ -379,23 +347,16 @@ The BAP performs the following steps to authenticate the BAP and also ensure mes **Headers** `HTTP/1.1 401 Unauthorized - WWW-Authenticate: Signature realm="example-bap.com",headers="(created) (expires) digest" - ...` **Request Body:** `{ - "message": { - "ack": { -  "status": "NACK" - - } - - } - +"status": "NACK" +} +} }` From 3dd089585073eb2b3e48c30e416b2f8b5d4ac209 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Fri, 28 Jan 2022 13:02:21 +0530 Subject: [PATCH 119/183] Update BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md --- .../BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md index 8f53ce24..e1d3221d 100644 --- a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md +++ b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md @@ -286,9 +286,7 @@ Before forwarding the request to the BAP, the BG performs the following steps to 4. Concatenate the three values, i.e the `created`, `expires` and `digest` in the format as shown below. The below string is the signing string which the BG is going to use to sign the request. `(created): 1402170695 - (expires): 1402170995 - digest: BLAKE-512=X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=` 5. The BG will then sign this string using it's registered signing private key via the ed25519 Signature Scheme. From 79a6c291ced6f0b7f40b768482b922fadc986f3e Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Sat, 5 Feb 2022 00:41:22 +0530 Subject: [PATCH 120/183] Update BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md --- .../BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md index e1d3221d..b38df75b 100644 --- a/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md +++ b/docs/protocol-drafts/BECKN-RFC-006-Signing-Beckn-APIs-In-HTTP-Draft-01.md @@ -16,7 +16,7 @@ Below is the format of a BAP/BPP Authorization header in the typical HTTP Signat The BG will send its signature in the X-Gateway-Authorization header in the exact same format as shown below. -`X-Gateway-Authorization:Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}" algorithm="ed25519" created="1606970629" expires="1607030629" headers="(created) (expires) digest" signature="Base64(ed25519_sign(signing string))"` +`X-Gateway-Authorization:Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}", algorithm="ed25519", created="1606970629", expires="1607030629", headers="(created) (expires) digest", signature="Base64(ed25519_sign(signing string))"` ## Hashing Algorithm For computing the digest of the request body, the hashing function will use the BLAKE-512 (2b) hashing algorithm. BLAKE is a cryptographic hash function based on Dan Bernstein's ChaCha stream cipher. For more documentation on the BLAKE-512(2b) algorithm, please go to [RFC7693](https://tools.ietf.org/html/rfc7693). From f6fcd965f241e978d8be12e6f6ae2ab1f1c7587c Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Sun, 6 Feb 2022 19:37:51 +0530 Subject: [PATCH 121/183] Update core.yaml --- core/v0/api/core.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index fd03b7a3..b8ef9085 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2164,6 +2164,8 @@ components: enum: - http/get - http/post + - payto + - upi params: type: object properties: From b3114f001a3c24de96f1edf1faf6d9f3da350ca3 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Mon, 14 Feb 2022 14:12:49 +0530 Subject: [PATCH 122/183] Update BECKN-002-Payments-On-Beckn-Enabled-Networks.md --- .../BECKN-002-Payments-On-Beckn-Enabled-Networks.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/protocol-drafts/BECKN-002-Payments-On-Beckn-Enabled-Networks.md b/docs/protocol-drafts/BECKN-002-Payments-On-Beckn-Enabled-Networks.md index 87e30399..35e10106 100644 --- a/docs/protocol-drafts/BECKN-002-Payments-On-Beckn-Enabled-Networks.md +++ b/docs/protocol-drafts/BECKN-002-Payments-On-Beckn-Enabled-Networks.md @@ -133,7 +133,7 @@ Payment Collection by a BAP and settled at the end of the month to a bank accoun { "collected_by": "bap", "uri": "payto://bank/98273982749428?amount=$currency:$value&ifsc=$ifsc&message=hello", - "method": "PAYTO", + "tl_method": "PAYTO", "type": "POST_FULFILLMENT", "status": "NOT-PAID", "params": { @@ -155,7 +155,7 @@ Immediate payment on order placement to a UPI Endpoint ``` { "uri": "payto://upi/example@upi?amount=$currency:$value&message=hello", - "method": "PAYTO", + "tl_method": "UPI", "type": "ON-ORDER", "status": "NOT-PAID", "params": { @@ -171,7 +171,7 @@ Transfer to a Payment Gateway Endpoint ``` { "uri": "https://pay.example.com?amount=$value&cur=$currency", - "method": "PAYTO", + "tl_method": "HTTP/POST", "type": "ON-ORDER", "status": "NOT-PAID", "params": { From 3abcc4be79aeecd3237eb6cda305f0c69c8ab4a1 Mon Sep 17 00:00:00 2001 From: Supriyo Ghosh <32829776+BLR-0118@users.noreply.github.com> Date: Mon, 14 Feb 2022 16:40:26 +0530 Subject: [PATCH 123/183] Update BECKN-002-Payments-On-Beckn-Enabled-Networks.md --- ...-002-Payments-On-Beckn-Enabled-Networks.md | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/docs/protocol-drafts/BECKN-002-Payments-On-Beckn-Enabled-Networks.md b/docs/protocol-drafts/BECKN-002-Payments-On-Beckn-Enabled-Networks.md index 35e10106..2c6984cd 100644 --- a/docs/protocol-drafts/BECKN-002-Payments-On-Beckn-Enabled-Networks.md +++ b/docs/protocol-drafts/BECKN-002-Payments-On-Beckn-Enabled-Networks.md @@ -155,7 +155,7 @@ Immediate payment on order placement to a UPI Endpoint ``` { "uri": "payto://upi/example@upi?amount=$currency:$value&message=hello", - "tl_method": "UPI", + "tl_method": "PAYTO", "type": "ON-ORDER", "status": "NOT-PAID", "params": { @@ -181,7 +181,27 @@ Transfer to a Payment Gateway Endpoint } ``` +## Example 4 +Payment Collection by a BAP and settled at the end of the month using UPI before 15th of February 2022 +``` +{ + "collected_by": "bap", + "uri": "upi://pay?pa=UPIID@oksbi&pn=NAME&&tr=123456789&cu=INR&am=200", + "tl_method": "UPI", + "type": "POST_FULFILLMENT", + "status": "NOT-PAID", + "params": { + "value": "200", + "currency": "INR" + }, + "time": { + "range": { + "end": "2022-02-15 00:00:00" + } + } +} +``` From 685627374e379ec2415dbbdde37be8521235bb0d Mon Sep 17 00:00:00 2001 From: techframewirk <65583767+techframewirk@users.noreply.github.com> Date: Mon, 21 Feb 2022 12:41:25 +0530 Subject: [PATCH 124/183] Updated Item description. Old description : Describes an item. Allows for domain extension. Updated description : Describes a product or a service offered to the end consumer by the provider. --- core/v0/api/core.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index b8ef9085..6c89083a 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1944,7 +1944,7 @@ components: measure: $ref: '#/components/schemas/Scalar' Item: - description: Describes an item. Allows for domain extension. + description: Describes a product or a service offered to the end consumer by the provider. type: object properties: id: From 14daa42e0fc8ddb912ad1feaa340f8b78f80c50d Mon Sep 17 00:00:00 2001 From: techframewirk <65583767+techframewirk@users.noreply.github.com> Date: Thu, 10 Mar 2022 14:52:31 +0530 Subject: [PATCH 125/183] rfc-draft01 --- ...Rating and Reputation on Beckn Protocol.md | 163 ++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 docs/proposals/BECKN-RFC-Rating and Reputation on Beckn Protocol.md diff --git a/docs/proposals/BECKN-RFC-Rating and Reputation on Beckn Protocol.md b/docs/proposals/BECKN-RFC-Rating and Reputation on Beckn Protocol.md new file mode 100644 index 00000000..e69d7a87 --- /dev/null +++ b/docs/proposals/BECKN-RFC-Rating and Reputation on Beckn Protocol.md @@ -0,0 +1,163 @@ +# Rating and Reputation on Beckn Protocol + +*Draft 01* + +Author: +======= + +Ravi Prakash (ravi@becknfoundation.org) + +Scope +===== + +This document is intended for anyone wishing to design a Rating and Reputation system for beckn protocol enabled Open Networks. This specification is agnostic of any implementation technology but contains examples of run-time JSON objects for the sake of clarity.  + +Context +======= + +Customers expect quality in any products and services they have bought. To ensure such quality is maintained, providers usually expect their customers to rate their services and products based on how satisfied they are with the product consumed or service rendered. Most e-commerce systems nowadays implement an online rating system that allows their users to rate the products and services bought on that platform. + +Platforms selling physical products usually allow their users to rate the quality of their products and sometimes, the delivery. Business aggregators allow their users to also rate businesses as a whole. Businesses allow their customers to rate the customer support they received. There are many more such entities that can be rated based on the customer's level of satisfaction. + +Typically, a rating system allows the consumer to provide a rating value from 1 to 5 where 1 represents lowest quality of service and 5 represents the highest quality of service. In some cases, fractional ratings are also used for further granularity; and in other cases non-numeric values like "Good" or "Bad''; and Ratings from 1 to 10 are also used. The rating value of a particular product or service is typically made visible to the public. A rating system is expected to be fair and transparent to its users, both customers and providers. + +In the case of beckn protocol, many such platforms connect to each other via beckn and thus present a new challenge of managing rating and reputation on a decentralized network. (Talk about the challenge presented) due to open commerce networks and the purpose of this document. + +For platforms connected to each other in an open commerce network, an interoperable and shared rating and reputation system must be implemented that allows users to rate various entities on the network. The rating system must adhere to the following design principles + +1. Non-repudiability + +2. Privacy protected + +3. Cross-platform compatibility + +Abstract +======== + +This document defines design specifications to create an interoperable, secure and non-repudiable system for managing Rating and Reputation of various physical and virtual entities on beckn-enabled Open Commerce Networks. It describes the various roles involved in the system and their respective functions. It also describes the format in which rating must be transmitted and stored on the network. There are multiple approaches to design a system, each approach has its advantages and limitations. + +Terminology +=========== + +1. **Rating Category**: For example: Agent, Fulfillment, Provider + +2. **Rateable Object**: The runtime object of a Rating Category that can be rated + +3. **Rating Sender**: The actor that rates a Rateable Object + +4. **Rating Receiver**: The actor that receives the rating for a Rateable Object + +Problem +======= + +How to ensure that the customers receive quality services rendered from different providers on an open network? + +Forces +====== + +1. Same Rateable Objects may exist on more than one BPP under different names + +Expected Outcomes after reading this document +============================================= + +After reading this document, the reader should be able to + +1. Understand how ratings work on Open Commerce Networks enabled by beckn protocol + +2. Understand how to connect their platforms to the Rating and Reputation system on open commerce networks.  + +Rating using Beckn Protocol +=========================== + +In beckn, **rating** is done via the rating action. This action allows any NP to rate a Rateable Object of another NP according to the rating policy of the NP. The rating policy of an NP defines, + +1. What can be rated + +2. How to rate + +Communication Protocol for Rating +--------------------------------- + +### Rating Policy Handshake + +Before a NP rates another NP's service, an agreement must be reached between both NPs regarding the rating policy. The agreement is done via the Rating Policy agreement handshake. The sequence of messages to be exchanged in this handshake is shown below. + +1. The Rating Sender should call the **get_rating_categories** action on the Rating Receiver's protocol API. + +2. The Rating receiver must immediately respond with an ACK.  + +3. The Rating Receiver should then send back a list of Rating Categories by calling the **rating_categories** callback action on the Rating Sender's protocol API. The **rating_categories** message should contain the following information + + 1. Name of the Rateable Category. This name should be the same as the name of the Schema from Core Specification. For example, "Agent", or "Provider" + + 2. The equivalent real-world name of the Schema. For example, + `{ "Agent" : "Delivery Rider" }` + + 3. The rating conditions that must be fulfilled before rating that object. Meaning, the message must contain attributes that must be set and what their expected values must be before rating that Object. The attributes must be in the form of a runtime schema path.  For example, + `{ "conditions" : [ { "order.id" : "true", "fulfillment.status" : "COMPLETE"}, { x : y}  ] }` + + 4. The rating conditions must be an array where a single element of that array represents all the conditions that must be fulfilled simultaneously. (AND function).  + + 5. The OR conditions are expressed as the separation between individual elements of the array. Example needed.  + + 6. Post-rating effects such as links to feedback forms + + 1. Feedback_form_url + + 2. Callbacks + + 3. ... + + 7. Rating level type  + +4. The Rating sender must respond with an ACK. + +The Rating Sender must design their business logic to accept rating from the user only when the Rating Receiver's rating conditions are matched during a transaction. + +### Rating Call + +Once the rating handshake is complete, the Rating should happen via the following process. + +1. The Rating Sender should call the rating action on the Rating Receiver's API. The rating message should contain the following information as key/value pairs + +1. The name of the Rating Category: "rating_category" : "Agent" + +2. The UUID of the Rateable Object: "id" : "2324-35454-2324" + +3. The rating value: "value" : "4" + +4. Additional data collected via the feedback form (if required)*  + +3. The Rating Receiver must send an ACK + +4. The Rating Receiver must call the on_rating action on the Rating Sender's API. the message must contain any additional information that may be required after the rating is complete. (Requires further elaboration) + +Rating Ledger Architecture +========================== + +The Rating Ledger is a table containing records with the following fields. This table can be implemented on a centralized database or a decentralized database like a blockchain. + +|Attribute|Description|Example| +|---------|-----------|-------| +|id|Primary key |`<Some UUID>`| +|rateable_object_id|This is a UUID generated by the BPP that is mapped against a unique ID.|| +|total_rating_value|Total Rating Value|4350| +|total_rating_count|Total number of ratings|1000| + +This table can be accessed by implementing the same rating action on its API. It is capable of receiving bulk rating information and publishing the information for all network participants to view without revealing confidential information regarding a rateable entity. + +When a Rating Sender wants to rate a Rateable Object, it must first call the rating action on the Rating Receiver's API. + +At the end of a periodic cycle, say at the end of every day, the Rating Sender must send all the ratings done for the day in bulk. + +The Rating Ledger should compute the cumulative rating value of the Rateable Object by adding the sent value to the last calculated value and updating the record of that rateable object. + +When a Rating Sender wants to verify the rating of a Rateable Entity, it should call the lookup action on the Rating Ledger's API by sending the id of the Rateable Entity. This requires the Rateable Entity's ID and it's average rating to be sent in the catalog during the on_search action. + +To verify the rating of a Rateable Object in the catalog, the Rating Sender must calculate the average rating by dividing the total_rating_value with the total_rating_count. + +`Average Rating Value = total_rating_value / total_rating_count` + +If this value matches the rating value sent in the catalog, then the rating is accurate. A margin of error may be introduced in the Network Rating Policy  specifying the number of significant digits to be used while comparing the average rating with the received rating. + +If the rating value does not match or is not within the margin of error, then the Rating Sender should report the error to the Network Facilitator. \ No newline at end of file From 9a08b265cdc229a574463f597f2374ab4c3ca14b Mon Sep 17 00:00:00 2001 From: techframewirk <65583767+techframewirk@users.noreply.github.com> Date: Tue, 22 Mar 2022 21:17:20 +0530 Subject: [PATCH 126/183] Updated descriptions of schema level objects --- core/v0/api/core.yaml | 100 +++++++++++++++++++++--------------------- 1 file changed, 51 insertions(+), 49 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 6c89083a..f7d48c85 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1343,7 +1343,7 @@ components: description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code>' schemas: Ack: - description: Describes the ACK response + description: Describes the acknowledgement message a BPP, BAP or BG sends as response to any beckn API calls. This can represent the acknowledged or not acknowledged status response.<br>This has properties like status type: object properties: status: @@ -1355,7 +1355,7 @@ components: required: - status AddOn: - description: Describes an add-on + description: Describes an ancillary item sold to the buyer of a main product or service<br>This has properties like id,descriptor,price type: object properties: id: @@ -1366,7 +1366,7 @@ components: price: $ref: '#/components/schemas/Price' Address: - description: Describes an address + description: Describes the postal address of a location. This is the address that can be accessed by mail.<br>This has properties like door number, name of the address, building number, street, locality, ward, state and country, and area code<br>This schema is used in the following locations <br><ul><li>location.address</li><li>billing.address</li></ul><br>This is used in the following situations.<br><ul><li>This is typically used during the discovery stage when specifying the address of a provider. For example When specifying the address of a store</li><li>This is typically used during the order stage when specifying the billing address of a consumer</li><li>This is typically used during the order stage when specifying the address where fulfillment starts. For example When specifying pickup location</li><li>This is typically used during the order stage when specifying the address where fulfillment ends. For example When specifying drop location</li></ul><br>This is used to allow the fulfillment agent to reach the exact location of fulfillment start or end. This is done because, just GPS coordinates may not be enough to reach the exact points of fulfillment. The postal address provides granularity till the door number of a physical location. <br>This is used by the user to physically go to the store location during store-pickup.<br>This is used by the fulfillment agent to physcally go to the provider's location to pickup an order<br>This is used by the fulfillment agent to physcally go to the consumer's location to deliver an order<br>The address can be used by the consumer app to geolocate the position of a provider's store on a map. <br>The address can be used by the agent's app to geolocate the position of the start of fulfillment on a map<br>The address can be used by the agent to physically go to the exact location where a fulfillment starts of ends. type: object properties: door: @@ -1400,7 +1400,7 @@ components: type: string description: 'Area code. This can be Pincode, ZIP code or any equivalent' Agent: - description: Describes an order executor + description: Describes direct performer or driver or executor of an order fulfillment.<br>This has properties such as name, image, dob, gender, cred, tags, phone, email and rateable allOf: - $ref: '#/components/schemas/Person' - $ref: '#/components/schemas/Contact' @@ -1409,7 +1409,7 @@ components: rateable: $ref: '#/components/schemas/Rateable' Authorization: - description: Describes an authorization mechanism + description: Describes an authorization mechanism used in the order lifecycle.<br>This has properties like type, token, valid_from, valid_to and status type: object properties: type: @@ -1430,7 +1430,7 @@ components: type: string description: Status of the token Billing: - description: Describes a billing event + description: Describes the billing details of an entity.<br>This has properties like name,organization,address,email,phone,time,tax_number, created_at,updated_at type: object properties: name: @@ -1488,7 +1488,7 @@ components: additional_description: $ref: '#/components/schemas/Descriptor' Catalog: - description: Describes a BPP catalog + description: Describes the products or services offered by a BPP. This is typically sent as the response to a search intent from a BAP. The payment terms, offers and terms of fulfillment supported by the BPP can also be included here.<br>This has properties like bbp/descriptor,bbp/categories,bbp/fulfillments,bbp/payments,bbp/offers,bbp/providers and exp type: object properties: bpp/descriptor: @@ -1518,7 +1518,7 @@ components: description: Time after which catalog has to be refreshed format: date-time Category: - description: Describes a category + description: Describes a type or division of providers or items regarded as having one or more shared characteristics<br>This has properties like id,parent_category_id,descriptor,time,tags type: object properties: id: @@ -1533,7 +1533,7 @@ components: tags: $ref: '#/components/schemas/Tags' Circle: - description: Describes a circular area on the map + description: Describes a circular region of a specified radius centered at a specified GPS coordinate.<br>This has properties like gps,radius type: object properties: gps: @@ -1544,7 +1544,7 @@ components: - gps - radius City: - description: Describes a city + description: Describes a city or a town<br>This has properties like name,code type: object properties: name: @@ -1554,6 +1554,7 @@ components: type: string description: City code Contact: + description: Describes the contact information of an entity including phone number or an email ID<br>This has properties like phone,email,tags type: object properties: phone: @@ -1563,7 +1564,7 @@ components: tags: $ref: '#/components/schemas/Tags' Context: - description: Describes a beckn message context + description: Describes the context of the message being sent.<br>This has properties like domain,country,city,action,code_version,bap_id,bap_uri,bpp_id,bpp_uri,transaction_id,message-id,timestamp,key,ttl type: object properties: domain: @@ -1643,7 +1644,7 @@ components: - bap_uri - timestamp Country: - description: Describes a country. + description: Describes a country.<br>This has properties like name,code type: object properties: name: @@ -1653,12 +1654,12 @@ components: type: string description: Country code as per ISO 3166-1 and ISO 3166-2 format DecimalValue: - description: Describes a decimal value + description: Describes a numerical value in decimal form type: string pattern: '[+-]?([0-9]*[.])?[0-9]+' Descriptor: - description: Describes the description of a real-world object. + description: Describes the description used to describe or identify a real world object<br>This has properties like name,code,symbol,short_desc,long_desc,images,audio,3d_render type: object properties: name: @@ -1683,7 +1684,7 @@ components: format: uri Dimensions: - description: Describes the dimensions of a real-world object + description: Describes the length, width and height of a real-world object.<br>This has properties like length,breadth,height type: object properties: length: @@ -1694,7 +1695,7 @@ components: $ref: '#/components/schemas/Scalar' Document: - description: Describes a document which can be sent as a url + description: Describes a piece of written or printed matter in electronic form that provides information or evidence or that serves as an official record. This will be given a URL.<br>This has properties like url,label type: object properties: url: @@ -1704,7 +1705,7 @@ components: type: string Domain: - description: Describes the domain of an object + description: Described the sector, industry or field for which the current beckn transaction is for. Examples of domains are mobility, local retail, logistics etc. Each network can choose its own codes for specifying a domain within the network. type: string Duration: @@ -1712,7 +1713,7 @@ components: type: string Error: - description: Describes an error object + description: Describes an error object that is returned by a BAP, BPP or BG as a response or callback to an action by another network participant<br>This has properties like type,code,path,message type: object properties: type: @@ -1737,7 +1738,7 @@ components: - code Feedback: - description: Feedback for a service + description: Describes the mechanism by which a BPP can receive feedback for a service or a product. This can be in the form of a feedback form which can be rendered by the BAP or a URL which the BAP can present to the end customer.<br>This has properties like feedback_forum,feedback_url type: object properties: feedback_form: @@ -1746,13 +1747,13 @@ components: $ref: '#/components/schemas/FeedbackUrl' FeedbackForm: - description: Describes a feedback form that a BPP can send to get feedback from the BAP + description: Describes a feedback form that a BPP can send to get feedback from the BAP. The BAP render this and will send the response of the form in this same structure.<br>This has properties like description,id,parent_id,question,answer,answer_type type: array items: $ref: '#/components/schemas/FeedbackFormElement' FeedbackFormElement: - description: An element in the feedback form. It can be question or an answer to the question. + description: Describes a single element in the feedback form. It can be question or an answer to the question.<br>This has properties like id,parent_id,question,answer,answer_type type: object properties: id: @@ -1774,7 +1775,7 @@ components: - text FeedbackUrl: - description: Describes how a feedback URL will be sent by the BPP + description: Describes the feedback URL that an end customer can use to provide feedback to the BPP for products or services.<br>This has properties like url,tl_method,params type: object properties: url: @@ -1801,7 +1802,7 @@ components: Fulfillment: - description: Describes how a single product/service will be rendered/fulfilled to the end customer + description: Describes how a single product/service will be rendered/fulfilled to the end customer<br>This has properties like id,type,provider_id,rating,state,tracking, customer,agent,person,contact,vehicle,start,end,rateable,tags type: object properties: id: @@ -1872,14 +1873,14 @@ components: tags: $ref: '#/components/schemas/Tags' Gps: - description: Describes a gps coordinate + description: Describes a GPS coordinates which is a unique identifier of a precise geographic location on the earth, usually expressed in alphanumeric characters.<br> type: string pattern: '^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$' Image: description: 'Image of an object. <br/><br/> A url based image will look like <br/><br/>```uri:http://path/to/image``` <br/><br/> An image can also be sent as a data string. For example : <br/><br/> ```data:js87y34ilhriuho84r3i4```' type: string Intent: - description: Intent of a user. Used for searching for services + description: Intent of a user. Used for searching for products or services.<br>This has properties like descriptor,provider,fulfillment,payment,category,offer,item,tags type: object properties: descriptor: @@ -1900,7 +1901,7 @@ components: $ref: '#/components/schemas/Tags' ItemQuantity: - description: Describes count or amount of an item + description: Describes the count or amount of an item<br>This has properties like allocated,available,maximum,minimum,selected type: object properties: allocated: @@ -1944,7 +1945,7 @@ components: measure: $ref: '#/components/schemas/Scalar' Item: - description: Describes a product or a service offered to the end consumer by the provider. + description: Describes a product or a service offered to the end consumer by the provider. In the mobility domain item can represent a fare product like one way journey while in the logistics domain it can represent the delivery service offering while in the local retail domain it can represent a product like a grocery item.<br>This has properties like id,parent_item_id,descriptor,price,category_id,fulfillment_id,rating,time,location_id,time,rateable,matched,related,recommended, tags type: object properties: id: @@ -1978,13 +1979,13 @@ components: tags: $ref: '#/components/schemas/Tags' Language: - description: indicates language code. Beckn supports country codes as per ISO 639.2 standard + description: Describes a specific language using a language code.<br>This has properties like code type: object properties: code: type: string Location: - description: Describes the location of a runtime object. + description: Describes the location of something, for example, where an event is happening, where a store is located, or where an action takes place<br>This has properties like id,descriptor,gps,address,station code,city,country,circle,polygon,3d space,time type: object properties: id: @@ -2015,7 +2016,7 @@ components: pattern: '^\./[^/]+/[^/]*/[^/]*/[^/]*/[^/]*/[^/]*$' Offer: - description: Describes an offer + description: Describes how a product or a service will be rendered at a reduced price to the user<br>This has properties like id,descriptor,location_ids,category_ids,item_ids,time type: object properties: id: @@ -2053,7 +2054,7 @@ components: type: string Option: - description: Describes a selectable option + description: Describes a selectable option<br>This has properties like id,description type: object properties: id: @@ -2061,7 +2062,7 @@ components: descriptor: $ref: '#/components/schemas/Descriptor' Order: - description: Describes the details of an order + description: Describes an order which contains the terms, details, status and identifier of a transaction between a BAP and a BPP. This is usually an exchange of goods or services for money.<br>This has properties like id,state,provider,items,add_ons,offers,documents,billings,fulfillment,quote,payment,created_at,updated_at type: object properties: id: @@ -2133,7 +2134,7 @@ components: format: date-time Organization: - description: Describes an organization + description: Describes an organization such as a school, NGO, corporation, club, company etc.<br>This has properties like name,cred type: object properties: name: @@ -2152,7 +2153,7 @@ components: Payment: - description: Describes a payment + description: Describes the payment mechanism to be used for the order.<br>This has properties like uri,tl_method,params,type,status,time. For more info please check BECKN-RFC-002 <a href="https://github.com/beckn/protocol-specifications/blob/core-0.9.4-draft/docs/protocol-drafts/BECKN-002-Payments-On-Beckn-Enabled-Networks.md">Payments on Beckn-Enabled Networks</a> type: object properties: uri: @@ -2198,7 +2199,7 @@ components: $ref: '#/components/schemas/Time' Person: - description: Describes a person. + description: Describes a person as any individual<br>This has the properties like name,image,dob,gender,cred,tags type: object properties: name: @@ -2216,7 +2217,7 @@ components: tags: $ref: '#/components/schemas/Tags' Policy: - description: Describes a policy. Allows for domain extension. + description: Describes a policy.<br>This has properties like id_description,parent_policy_id,time type: object properties: id: @@ -2229,7 +2230,7 @@ components: $ref: '#/components/schemas/Time' Price: - description: Describes the price of an item. Allows for domain extension. + description: Describes the price of a product or service<br>This has properties like currency_value,estimated_value,computed_value,listed_value,offered_value,Minimum_value,maximum_value type: object properties: currency: @@ -2250,7 +2251,7 @@ components: $ref: '#/components/schemas/DecimalValue' Provider: - description: 'Describes a service provider. This can be a restaurant, a hospital, a Store etc' + description: Describes a service provider. This can be a restaurant, a hospital, a Store etc<br>This has properties like id,descriptor,category_id,rating,time,categories,fulfillment,payments,locations,offers,items,exp,rateables,tags type: object properties: id: @@ -2304,7 +2305,7 @@ components: $ref: '#/components/schemas/Tags' Quotation: - description: Describes a quote + description: Describes a quote. It is the estimated price of products or services from the BPP.<br>This has properties like price, breakup, ttl type: object properties: price: @@ -2322,11 +2323,11 @@ components: $ref: '#/components/schemas/Duration' Rateable: - description: If the entity can be rated or not + description: Describes if the entity can be rated or not type: boolean Rating: - description: Describes the rating of a person or an object. + description: Describes the rating of a person or an object<br>This has properties like rating category,id,value, feedback_id,feedback_form type: object properties: rating_category: @@ -2345,6 +2346,7 @@ components: $ref: '#/components/schemas/FeedbackUrl/properties/params/properties/feedback_id' RatingAck: + description: Describes the acknowledgement that feedback or rating has been recorded by the BPP.<br> type: object properties: feedback_ack: @@ -2355,7 +2357,7 @@ components: type: boolean Scalar: - description: An object representing a scalar quantity. + description: Describes a scalar quantity.<br>This has properties like value, estimated_value, computed_value,range, unit type: object properties: type: @@ -2383,7 +2385,7 @@ components: - unit Schedule: - description: Describes a schedule + description: Describes schedule as a repeating time period used to describe a regularly recurring event. At a minimum a schedule will specify frequency which describes the interval between occurrences of the event. Additional information can be provided to specify the schedule more precisely. This includes identifying the timestamps(s) of when the event will take place. Schedules may also have holidays to exclude a specific day from the schedule.<br>This has properties like frequency, holidays, times type: object properties: frequency: @@ -2399,7 +2401,7 @@ components: type: string format: date-time State: - description: Describes a state + description: Describes the state of an order or fulfillment<br>This has properties like descriptor, updated_at,updated_by type: object properties: descriptor: @@ -2412,7 +2414,7 @@ components: description: ID of entity which changed the state Subscriber: type: object - description: 'Any entity which wants to authenticate itself on a network. This can be a BAP, BPP, BG, BPPR or a BGR.' + description: Any entity which wants to authenticate itself on a network. This can be a BAP, BPP, BG, BPPR or a BGR.<br>This has properties like subscriber_id,type, cb_url,domain, city, country, sigining_public_key, encryption_public_key,status,created, updated expiries properties: subscriber_id: type: string @@ -2480,7 +2482,7 @@ components: additionalProperties: type: string Time: - description: Describes time in its various forms. It can be a single point in time; duration; or a structured timetable of operations + description: Describes time in its various forms. It can be a single point in time; duration; or a structured timetable of operations<br>This has properties like label, time stamp,duration,range, days, schedule type: object properties: label: @@ -2506,11 +2508,11 @@ components: $ref: '#/components/schemas/Schedule' TrackingData: - description: Describes tracking data object during live tracking of an order + description: Describes tracking data information to know the status of an object/process or live locations/actions of object and tracking activity<br>This has the GPS coordinates properties $ref: '#/components/schemas/Location/properties/gps' Tracking: - description: Describes the tracking info of an object + description: Describes as tracking which is useful for knowing the location of time sensitive deliveries.<br>This has properties like URL and status of the object type: object properties: url: @@ -2523,7 +2525,7 @@ components: - inactive Vehicle: - description: Describes the properties of a vehicle used in a mobility service + description: Describes a vehicle is a device that is designed or used to transport people or cargo over land, water, air, or through space.<br>This has properties like category, capacity, make, model, size,variant,color,energy_type,registration type: object properties: category: From 338039f374b47bb06f4eac343ad3ae8a47cfc13b Mon Sep 17 00:00:00 2001 From: techframewirk <65583767+techframewirk@users.noreply.github.com> Date: Fri, 25 Mar 2022 00:47:06 +0530 Subject: [PATCH 127/183] more descriptions --- core/v0/api/core.yaml | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index f7d48c85..1971ce88 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1343,7 +1343,7 @@ components: description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code>' schemas: Ack: - description: Describes the acknowledgement message a BPP, BAP or BG sends as response to any beckn API calls. This can represent the acknowledged or not acknowledged status response.<br>This has properties like status + description: Describes the acknowledgement message a BPP, BAP or BG sends as response to any beckn API calls. This can represent the acknowledged or not acknowledged status response.<br>This has one property status<br>This schema is used in the response of all the beckn API calls<br>This is used to convey the acknowledgement status of a beckn API call received by a network participant. If the network participant received the API call successfully and has validated the request is as per protocol specifications and signature verified it can send back an ACK as status. Or else it will send NACK as status type: object properties: status: @@ -1355,7 +1355,7 @@ components: required: - status AddOn: - description: Describes an ancillary item sold to the buyer of a main product or service<br>This has properties like id,descriptor,price + description: Describes an ancillary item sold to the buyer of a main product or service<br>This has properties like id,descriptor,price<br>This schema is used in the addons array in the Order schema object type: object properties: id: @@ -1366,7 +1366,7 @@ components: price: $ref: '#/components/schemas/Price' Address: - description: Describes the postal address of a location. This is the address that can be accessed by mail.<br>This has properties like door number, name of the address, building number, street, locality, ward, state and country, and area code<br>This schema is used in the following locations <br><ul><li>location.address</li><li>billing.address</li></ul><br>This is used in the following situations.<br><ul><li>This is typically used during the discovery stage when specifying the address of a provider. For example When specifying the address of a store</li><li>This is typically used during the order stage when specifying the billing address of a consumer</li><li>This is typically used during the order stage when specifying the address where fulfillment starts. For example When specifying pickup location</li><li>This is typically used during the order stage when specifying the address where fulfillment ends. For example When specifying drop location</li></ul><br>This is used to allow the fulfillment agent to reach the exact location of fulfillment start or end. This is done because, just GPS coordinates may not be enough to reach the exact points of fulfillment. The postal address provides granularity till the door number of a physical location. <br>This is used by the user to physically go to the store location during store-pickup.<br>This is used by the fulfillment agent to physcally go to the provider's location to pickup an order<br>This is used by the fulfillment agent to physcally go to the consumer's location to deliver an order<br>The address can be used by the consumer app to geolocate the position of a provider's store on a map. <br>The address can be used by the agent's app to geolocate the position of the start of fulfillment on a map<br>The address can be used by the agent to physically go to the exact location where a fulfillment starts of ends. + description: Describes the postal address of a location. This is the address that can be accessed by mail.<br>This has properties like door number, name of the address, building number, street, locality, ward, state and country, and area code<br>This schema is used in the following locations <br><ul><li>location.address</li><li>billing.address</li></ul><br>This is used in the following situations.<br><ul><li>This is typically used during the discovery stage when specifying the address of a provider. For example- When specifying the address of a store</li><li>This is typically used during the order stage when specifying the billing address of a consumer</li><li>This is typically used during the order stage when specifying the address where fulfillment starts. For example- When specifying pickup location</li><li>This is typically used during the order stage when specifying the address where fulfillment ends. For example- When specifying drop location</li></ul><br>This is used to allow the fulfillment agent to reach the exact location of fulfillment start or end. This is done because, just GPS coordinates may not be enough to reach the exact points of fulfillment. The postal address provides granularity till the door number of a physical location. <br>This is used by the BAP to send the billing address of the user to the BPP for creating an order.<br>This is used by the user to physically go to the store location during store-pickup.<br>This is used by the fulfillment agent to physically go to the provider's location to pickup an order<br>This is used by the fulfillment agent to physically go to the consumer's location to deliver an order<br>This is used by a BPP for saving the billing address for confirming an order<br>The address can be used by the consumer app to geolocate the position of a provider's store on a map. <br>The address can be used by the agent's app to geolocate the position of the start of fulfillment on a map<br>The address can be used by the agent to physically go to the exact location where a fulfillment starts of ends.<br>The address will be saved as the billing address for the order created by the BPP type: object properties: door: @@ -1400,7 +1400,7 @@ components: type: string description: 'Area code. This can be Pincode, ZIP code or any equivalent' Agent: - description: Describes direct performer or driver or executor of an order fulfillment.<br>This has properties such as name, image, dob, gender, cred, tags, phone, email and rateable + description: Describes the direct performer or driver or executor of the fulfillment of an order. In the healthcare domain it can be a doctor while in the mobility domain it can be a taxi driver.<br>This has properties such as name, image, dob, gender, cred, tags, phone, email and rateable<br>This schema is used in the agent property of the Fulfillment schema object<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP wants to convey details of the person who will be fulfilling the order so that the customer can make an informed decision about the product or service they need to purchase</li><li>This is typically used in the fulfillment stage when the BPP assigns an agent to fulfill the order post confirmation of the same</li></ul><br>This is used to allow the BPP to send the details of the person fulfilling the order to the end user. allOf: - $ref: '#/components/schemas/Person' - $ref: '#/components/schemas/Contact' @@ -1409,7 +1409,7 @@ components: rateable: $ref: '#/components/schemas/Rateable' Authorization: - description: Describes an authorization mechanism used in the order lifecycle.<br>This has properties like type, token, valid_from, valid_to and status + description: Describes an authorization mechanism used in the order lifecycle.<br>This has properties like type, token, valid_from, valid_to and status<br>This is used in the following situations.<br><ul><li>Typically in the fulfillment stage when BPP sends wants an authorization mechanism that the customer needs to use for starting/ending the fulfillment process</li></ul><br>This is used to allow a user to authorize the validity of their order with an agent so that fulfillment of the order can start/end. This is also used as proof of presence of the customer so that an agent can start/end the fulfillment.<br>This can be used by the user to start fulfillment by providing the token as proof of presence.<br>This can be used by the user as a proof of purchase of service to an agent at start/end of fulfillment<br>This can be used by the user to end fulfillment by providing the token as proof of completion of service.<br><br>The authorization mechanism can be used in several ways to authorize the start or end of a fulfillment.<br>In the mobility domain a BPP which renders taxi services may give an OTP to the BAP after confirming the order. The end user will give the OTP to the agent(taxi driver) as proof of presence to start the taxi service<br>In the logistics domain a BPP that renders courier services can give an OTP to the BAP while the delivery service is being performed the agent. The end user will give the OTP to the agent so that they can mark the package as successfully delivered.<br>In the mobility domain a public transit BPP can send a signed QR code string to the BAP. The BAP will render it as a QR code which the end user will present to a ticketing agent who can read the QR code using their device and authenticate the validity of the ticket type: object properties: type: @@ -1488,7 +1488,7 @@ components: additional_description: $ref: '#/components/schemas/Descriptor' Catalog: - description: Describes the products or services offered by a BPP. This is typically sent as the response to a search intent from a BAP. The payment terms, offers and terms of fulfillment supported by the BPP can also be included here.<br>This has properties like bbp/descriptor,bbp/categories,bbp/fulfillments,bbp/payments,bbp/offers,bbp/providers and exp + description: Describes the products or services offered by a BPP. This is typically sent as the response to a search intent from a BAP. The payment terms, offers and terms of fulfillment supported by the BPP can also be included here.<br>This has properties like bbp/descriptor,bbp/categories,bbp/fulfillments,bbp/payments,bbp/offers,bbp/providers and exp<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP sends the details of the products and services it offers as response to a search intent from the BAP. </li></ul> type: object properties: bpp/descriptor: @@ -1518,7 +1518,7 @@ components: description: Time after which catalog has to be refreshed format: date-time Category: - description: Describes a type or division of providers or items regarded as having one or more shared characteristics<br>This has properties like id,parent_category_id,descriptor,time,tags + description: Describes a type or division of providers or items regarded as having one or more shared characteristics<br>This has properties like id,parent_category_id,descriptor,time,tags<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP wants to categorize the products or services in its catalog as additional information about the product or service </li><li>This is typically used in the discovery stage when the BPP wants to categorize the products or services in its catalog because the price of the same product or service can change based on the category </li><li>This is typically used in the discovery stage when the BPP wants to categorize the products or services in its catalog as additional information about the product or service </li></ul> type: object properties: id: @@ -1533,7 +1533,7 @@ components: tags: $ref: '#/components/schemas/Tags' Circle: - description: Describes a circular region of a specified radius centered at a specified GPS coordinate.<br>This has properties like gps,radius + description: Describes a circular region of a specified radius centered at a specified GPS coordinate.<br>This has properties like gps,radius<br>This is used when a circular area needs to be represented as a location. type: object properties: gps: @@ -1554,7 +1554,7 @@ components: type: string description: City code Contact: - description: Describes the contact information of an entity including phone number or an email ID<br>This has properties like phone,email,tags + description: Describes the contact information of an entity including phone number or an email ID<br>This has properties like phone,email,tags<br>This is used to allow the BPP or BAP to send contact details of a person. type: object properties: phone: @@ -1695,7 +1695,7 @@ components: $ref: '#/components/schemas/Scalar' Document: - description: Describes a piece of written or printed matter in electronic form that provides information or evidence or that serves as an official record. This will be given a URL.<br>This has properties like url,label + description: Describes a piece of written or printed matter in electronic form that provides information or evidence or that serves as an official record. This will be given a URL.<br>This has properties like url,label<br>This is used in the following situations.<br><ul><li>This is typically used in the order stage if any documents from the user are needed by the BPP to confirm the order</li><li>This is typically used in the fulfilment and post fulfillment stage if the BPP needs to send any documents related to the order to the user</li></ul><br>This is used to allow documents to be exchanged between the BAP and the BPP type: object properties: url: @@ -1713,7 +1713,7 @@ components: type: string Error: - description: Describes an error object that is returned by a BAP, BPP or BG as a response or callback to an action by another network participant<br>This has properties like type,code,path,message + description: Describes an error object that is returned by a BAP, BPP or BG as a response or callback to an action by another network participant<br>This has properties like type,code,path,message<br>This schema is used in the response of all the beckn API calls as well as the callback beckn APIs<br>This is used to return the details of an error that happened while processing a beckn API call received by a network participant. type: object properties: type: @@ -1738,7 +1738,7 @@ components: - code Feedback: - description: Describes the mechanism by which a BPP can receive feedback for a service or a product. This can be in the form of a feedback form which can be rendered by the BAP or a URL which the BAP can present to the end customer.<br>This has properties like feedback_forum,feedback_url + description: Describes the mechanism by which a BPP can receive feedback for a service or a product. This can be in the form of a feedback form which can be rendered by the BAP or a URL which the BAP can present to the end customer.<br>This has properties like feedback_forum,feedback_url<br>This is used in the following situations.<br><ul><li>This is typically used in the post fulfillment stage when a BAP sends feedback for a service or product or a fulfillment agent provided by the BPP</li><li>This is typically used in the post fulfillment stage when the BPP sends the feedback form or URL that needs to be used by the BAP</li></ul> type: object properties: feedback_form: @@ -1747,7 +1747,7 @@ components: $ref: '#/components/schemas/FeedbackUrl' FeedbackForm: - description: Describes a feedback form that a BPP can send to get feedback from the BAP. The BAP render this and will send the response of the form in this same structure.<br>This has properties like description,id,parent_id,question,answer,answer_type + description: Describes a feedback form that a BPP can send to get feedback from the BAP. The BAP render this and will send the response of the form in this same structure.<br>This has properties like description,id,parent_id,question,answer,answer_type<br>This is used in the following situations.<br><ul><li>This is typically used in the post fulfillment stage when a BAP sends feedback for a service or product or a fulfillment agent provided by the BPP in a feedback form</li><li>This is typically used in the post fulfillment stage when the BPP sends the feedback form that needs to be used by the BAP</li></ul> type: array items: $ref: '#/components/schemas/FeedbackFormElement' @@ -1775,7 +1775,7 @@ components: - text FeedbackUrl: - description: Describes the feedback URL that an end customer can use to provide feedback to the BPP for products or services.<br>This has properties like url,tl_method,params + description: Describes the feedback URL that an end customer can use to provide feedback to the BPP for products or services.<br>This has properties like url,tl_method,params<br>This is used in the following situations.<br><ul><li>This is typically used in the post fulfillment stage when the BPP sends the feedback URL that needs to be used by the BAP for providing feedback for a service or product or fulfillment agent</li></ul> type: object properties: url: @@ -1802,7 +1802,7 @@ components: Fulfillment: - description: Describes how a single product/service will be rendered/fulfilled to the end customer<br>This has properties like id,type,provider_id,rating,state,tracking, customer,agent,person,contact,vehicle,start,end,rateable,tags + description: Describes how a single product/service will be rendered/fulfilled to the end customer<br>This has properties like id,type,provider_id,rating,state,tracking, customer,agent,person,contact,vehicle,start,end,rateable,tags<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP sends the fulfillment terms to the BAP</li><li>This is typically used in the order stage when the BPP sends the fulfillment terms to the BAP</li><li>This is typically used in the fulfillment stage when the BPP sends the status and current details of fulfillment to the BAP</li></ul> type: object properties: id: @@ -1873,14 +1873,14 @@ components: tags: $ref: '#/components/schemas/Tags' Gps: - description: Describes a GPS coordinates which is a unique identifier of a precise geographic location on the earth, usually expressed in alphanumeric characters.<br> + description: Describes a GPS coordinates which is a unique identifier of a precise geographic location on the earth.<br> type: string pattern: '^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$' Image: description: 'Image of an object. <br/><br/> A url based image will look like <br/><br/>```uri:http://path/to/image``` <br/><br/> An image can also be sent as a data string. For example : <br/><br/> ```data:js87y34ilhriuho84r3i4```' type: string Intent: - description: Intent of a user. Used for searching for products or services.<br>This has properties like descriptor,provider,fulfillment,payment,category,offer,item,tags + description: Intent of a user. Used for searching for products or services.<br>This has properties like descriptor,provider,fulfillment,payment,category,offer,item,tags<br>This is typically used by the BAP to send the purpose of the user's search to the BPP. This will be used by the BPP to find products or services it offers that may match the user's intent. type: object properties: descriptor: From 3946435e15515bf47a75abc58d9b0af83ab3798c Mon Sep 17 00:00:00 2001 From: AyushAgrawal25 <agrawal.ayush2500@gmail.com> Date: Fri, 25 Mar 2022 10:02:10 +0530 Subject: [PATCH 128/183] Format issue resolved with the id property of Item schema --- core/v0/api/core.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 1971ce88..ec0d09b8 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1951,7 +1951,6 @@ components: id: description: This is the most unique identifier of a service item. An example of an Item ID could be the SKU of a product. type: string - format: '#/components/schemas/Item/properties/id' parent_item_id: $ref: '#/components/schemas/Item/properties/id' descriptor: From c3b7597bc63391b85aca65ff9e3cc10309843058 Mon Sep 17 00:00:00 2001 From: techframewirk <65583767+techframewirk@users.noreply.github.com> Date: Mon, 28 Mar 2022 14:57:16 +0530 Subject: [PATCH 129/183] updated item and order --- core/v0/api/core.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index ec0d09b8..3d7c10c7 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1945,7 +1945,7 @@ components: measure: $ref: '#/components/schemas/Scalar' Item: - description: Describes a product or a service offered to the end consumer by the provider. In the mobility domain item can represent a fare product like one way journey while in the logistics domain it can represent the delivery service offering while in the local retail domain it can represent a product like a grocery item.<br>This has properties like id,parent_item_id,descriptor,price,category_id,fulfillment_id,rating,time,location_id,time,rateable,matched,related,recommended, tags + description: Describes a product or a service offered to the end consumer by the provider. In the mobility domain item can represent a fare product like one way journey while in the logistics domain it can represent the delivery service offering while in the local retail domain it can represent a product like a grocery item.<br>This has properties like id,parent_item_id,descriptor,price,category_id,fulfillment_id,rating,time,location_id,time,rateable,matched,related,recommended, tags<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP sends the catalog of products or services it offers to the BAP in the items array</li><li>This is typically used in the order stage when the BAP sends the details of the item the user wants to purchase</li><li>This is typically used in the fulfillment stage when the BPP/BAP sends the order object containing the details of the products or services purchased in the order</li></ul> type: object properties: id: @@ -2061,7 +2061,7 @@ components: descriptor: $ref: '#/components/schemas/Descriptor' Order: - description: Describes an order which contains the terms, details, status and identifier of a transaction between a BAP and a BPP. This is usually an exchange of goods or services for money.<br>This has properties like id,state,provider,items,add_ons,offers,documents,billings,fulfillment,quote,payment,created_at,updated_at + description: Describes an order which contains the terms, details, status and identifier of a transaction between a BAP and a BPP. This is usually an exchange of goods or services for money.<br>This has properties like id,state,provider,items,add_ons,offers,documents,billings,fulfillment,quote,payment,created_at,updated_at<br>This is used in the following situations.<br><ul><li>This is typically used in the order stage when the BAP sends the details of the order it wishes to create</li><li>This is typically used in the fulfillment stage when the BPP/BAP sends the order details</li></ul> type: object properties: id: From c8b83f3ff999128c8676d4b069b5945b6be3afa9 Mon Sep 17 00:00:00 2001 From: techframewirk <65583767+techframewirk@users.noreply.github.com> Date: Sat, 2 Apr 2022 11:27:36 +0530 Subject: [PATCH 130/183] Review comments from Pramod --- core/v0/api/core.yaml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 3d7c10c7..6e73b81f 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1343,7 +1343,7 @@ components: description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code>' schemas: Ack: - description: Describes the acknowledgement message a BPP, BAP or BG sends as response to any beckn API calls. This can represent the acknowledged or not acknowledged status response.<br>This has one property status<br>This schema is used in the response of all the beckn API calls<br>This is used to convey the acknowledgement status of a beckn API call received by a network participant. If the network participant received the API call successfully and has validated the request is as per protocol specifications and signature verified it can send back an ACK as status. Or else it will send NACK as status + description: Describes the acknowledgement message a BPP, BAP or BG sends as response to any beckn API calls. This can represent the acknowledged or not acknowledged status response.<br>This has one property status<br>This schema is used in the response of all the beckn API calls<br>This is used to convey the acknowledgement status of a beckn API call received by a network participant. If the network participant received the API call successfully and has validated the request is as per protocol specifications and signature verified it can send back an ACK as status. Or else it will send NACK as status. The validation done at this point is only technical in nature (validating if the schema is as per specification, if the signature and caller is valid, if the endpoint itself is implemented) and no functional validation (as per business logic) needs to be done before sending this. type: object properties: status: @@ -1355,7 +1355,7 @@ components: required: - status AddOn: - description: Describes an ancillary item sold to the buyer of a main product or service<br>This has properties like id,descriptor,price<br>This schema is used in the addons array in the Order schema object + description: Describes an ancillary item (products/services) sold to the buyer of a main product or service<br>This has properties like id,descriptor,price<br>This schema is used in the addons array in the Order schema object type: object properties: id: @@ -1409,7 +1409,7 @@ components: rateable: $ref: '#/components/schemas/Rateable' Authorization: - description: Describes an authorization mechanism used in the order lifecycle.<br>This has properties like type, token, valid_from, valid_to and status<br>This is used in the following situations.<br><ul><li>Typically in the fulfillment stage when BPP sends wants an authorization mechanism that the customer needs to use for starting/ending the fulfillment process</li></ul><br>This is used to allow a user to authorize the validity of their order with an agent so that fulfillment of the order can start/end. This is also used as proof of presence of the customer so that an agent can start/end the fulfillment.<br>This can be used by the user to start fulfillment by providing the token as proof of presence.<br>This can be used by the user as a proof of purchase of service to an agent at start/end of fulfillment<br>This can be used by the user to end fulfillment by providing the token as proof of completion of service.<br><br>The authorization mechanism can be used in several ways to authorize the start or end of a fulfillment.<br>In the mobility domain a BPP which renders taxi services may give an OTP to the BAP after confirming the order. The end user will give the OTP to the agent(taxi driver) as proof of presence to start the taxi service<br>In the logistics domain a BPP that renders courier services can give an OTP to the BAP while the delivery service is being performed the agent. The end user will give the OTP to the agent so that they can mark the package as successfully delivered.<br>In the mobility domain a public transit BPP can send a signed QR code string to the BAP. The BAP will render it as a QR code which the end user will present to a ticketing agent who can read the QR code using their device and authenticate the validity of the ticket + description: Describes an authorization mechanism used in the order lifecycle. Can be used to attach authorization token to any interaction.<br>This has properties like type, token, valid_from, valid_to and status<br>This is used in the following situations.<br><ul><li>Typically in the fulfillment stage when BPP sends an authorization mechanism that the BAP needs to use for authorizing any interaction</li></ul><br>This is used to allow a user to authorize the validity of their order with a person executing the order so that fulfillment of the order can start/end. This is also used as proof of presence of the customer so that a person executing the order can start/end the fulfillment.<br>This can be used by the user to start fulfillment by providing the token as proof of presence.<br>This can be used by the user as a proof of purchase of service to a person executing the order at start/end of fulfillment<br>This can be used by the user to end fulfillment by providing the token as proof of completion of service.<br><br>The authorization mechanism can be used in several ways to authorize the start or end of a fulfillment.<br>In the mobility domain a BPP which renders taxi services may give an OTP to the BAP after confirming the order. The end user will give the OTP to the taxi driver as proof of presence to start the taxi service<br>In the logistics domain a BPP that renders courier services can give an OTP to the BAP while the delivery service is being performed by a delivery agent. The end user will give the OTP to the delivery agent so that they can mark the package as successfully delivered.<br>In the mobility domain a public transit BPP can send a signed QR code string to the BAP. The BAP will render it as a QR code which the end user will present to a ticketing employee who can read the QR code using their device and authenticate the validity of the ticket type: object properties: type: @@ -1488,7 +1488,7 @@ components: additional_description: $ref: '#/components/schemas/Descriptor' Catalog: - description: Describes the products or services offered by a BPP. This is typically sent as the response to a search intent from a BAP. The payment terms, offers and terms of fulfillment supported by the BPP can also be included here.<br>This has properties like bbp/descriptor,bbp/categories,bbp/fulfillments,bbp/payments,bbp/offers,bbp/providers and exp<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP sends the details of the products and services it offers as response to a search intent from the BAP. </li></ul> + description: Describes the products or services offered by a BPP. This is typically sent as the response to a search intent from a BAP. The payment terms, offers and terms of fulfillment supported by the BPP can also be included here. The BPP can show hierarchical nature of products/services in its catalog using the parent_category_id in categories. The BPP can also send a ttl (time to live) in the context which is the duration for which a BAP can cache the catalog and use the cached catalog. <br>This has properties like bbp/descriptor,bbp/categories,bbp/fulfillments,bbp/payments,bbp/offers,bbp/providers and exp<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP sends the details of the products and services it offers as response to a search intent from the BAP. </li></ul> type: object properties: bpp/descriptor: @@ -1564,7 +1564,7 @@ components: tags: $ref: '#/components/schemas/Tags' Context: - description: Describes the context of the message being sent.<br>This has properties like domain,country,city,action,code_version,bap_id,bap_uri,bpp_id,bpp_uri,transaction_id,message-id,timestamp,key,ttl + description: Describes the context header of the message being sent.<br>This has properties like domain,country,city,action,code_version,bap_id,bap_uri,bpp_id,bpp_uri,transaction_id,message-id,timestamp,key,ttl type: object properties: domain: @@ -1695,7 +1695,7 @@ components: $ref: '#/components/schemas/Scalar' Document: - description: Describes a piece of written or printed matter in electronic form that provides information or evidence or that serves as an official record. This will be given a URL.<br>This has properties like url,label<br>This is used in the following situations.<br><ul><li>This is typically used in the order stage if any documents from the user are needed by the BPP to confirm the order</li><li>This is typically used in the fulfilment and post fulfillment stage if the BPP needs to send any documents related to the order to the user</li></ul><br>This is used to allow documents to be exchanged between the BAP and the BPP + description: Describes a piece of written or printed matter in electronic form that provides information or evidence or that serves as an official record. This will be given as a URL. In the case of sensitive information being exchanged, such documents may be encrypted and additional authorization such as an an OTP or password may be implemented when the URL is accessed.<br>This has properties like url,label<br>This is used in the following situations.<br><ul><li>This is typically used in the order stage if any documents from the user are needed by the BPP to confirm the order</li><li>This is typically used in the fulfilment and post fulfillment stage if the BPP needs to send any documents related to the order to the user</li></ul><br>This is used to allow documents to be exchanged between the BAP and the BPP type: object properties: url: @@ -1877,10 +1877,10 @@ components: type: string pattern: '^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$' Image: - description: 'Image of an object. <br/><br/> A url based image will look like <br/><br/>```uri:http://path/to/image``` <br/><br/> An image can also be sent as a data string. For example : <br/><br/> ```data:js87y34ilhriuho84r3i4```' + description: 'Image of an object. <br/><br/> A url based image will look like <br/><br/>```uri:https://path/to/image``` <br/><br/> An image can also be sent as a data string. For example : <br/><br/> ```data:js87y34ilhriuho84r3i4```' type: string Intent: - description: Intent of a user. Used for searching for products or services.<br>This has properties like descriptor,provider,fulfillment,payment,category,offer,item,tags<br>This is typically used by the BAP to send the purpose of the user's search to the BPP. This will be used by the BPP to find products or services it offers that may match the user's intent. + description: Intent of a user. Used in the discovery stage for declaring the intent of the user. BAP can declare the intent of the consumer including <ul><li>What they want (A product, service, offer)</li><li>Who they want (A seller, service provider, agent etc)</li><li>Where they want it and where they want it from</li><li>When they want it (start and end time of fulfillment</li><li>How they want to pay for it</li></ul><br>This has properties like descriptor,provider,fulfillment,payment,category,offer,item,tags<br>This is typically used by the BAP to send the purpose of the user's search to the BPP. This will be used by the BPP to find products or services it offers that may match the user's intent.<br>For example, in Mobility, the mobility consumer declares a mobility intent. In this case, the mobility consumer declares information that describes various aspects of their journey like,<ul><li>Where would they like to begin their journey (intent.fulfillment.start.location)</li><li>Where would they like to end their journey (intent.fulfillment.end.location)</li><li>When would they like to begin their journey (intent.fulfillment.start.time)</li><li>When would they like to end their journey (intent.fulfillment.end.time)</li><li>Who is the transport service provider they would like to avail services from (intent.provider)</li><li>Who is traveling (This is not recommended in public networks) (intent.fulfillment.customer)</li><li>What kind of fare product would they like to purchase (intent.item)</li><li>What add-on services would they like to avail</li><li>What offers would they like to apply on their booking (intent.offer)</li><li>What category of services would they like to avail (intent.category)</li><li>What additional luggage are they carrying</li><li>How would they like to pay for their journey (intent.payment)</li></ul><br>For example, in health domain, a consumer declares the intent for a lab booking the describes various aspects of their booking like,<ul><li>Where would they like to get their scan/test done (intent.fulfillment.start.location)</li><li>When would they like to get their scan/test done (intent.fulfillment.start.time)</li><li>When would they like to get the results of their test/scan (intent.fulfillment.end.time)</li><li>Who is the service provider they would like to avail services from (intent.provider)</li><li>Who is getting the test/scan (intent.fulfillment.customer)</li><li>What kind of test/scan would they like to purchase (intent.item)</li><li>What category of services would they like to avail (intent.category)</li><li>How would they like to pay for their journey (intent.payment)</li></ul> type: object properties: descriptor: From 089a4d79b135466af75d56bc0ea4836b18d193c1 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@becknfoundation.org> Date: Thu, 21 Apr 2022 16:53:48 +0530 Subject: [PATCH 131/183] Added rating communication sequence --- docs/images/rating handshake.png | Bin 0 -> 48067 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/rating handshake.png diff --git a/docs/images/rating handshake.png b/docs/images/rating handshake.png new file mode 100644 index 0000000000000000000000000000000000000000..374c88d5961e255cd385c1c3316c838ea545f857 GIT binary patch literal 48067 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 literal 0 HcmV?d00001 From 63b8c479e5f693912e3d9f475fc87b98b08eb77f Mon Sep 17 00:00:00 2001 From: Ravi Prakash <comments@beckn.org> Date: Thu, 21 Apr 2022 16:57:46 +0530 Subject: [PATCH 132/183] Added rating flow sequence diagram --- ...ECKN-RFC-Rating and Reputation on Beckn Protocol.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/proposals/BECKN-RFC-Rating and Reputation on Beckn Protocol.md b/docs/proposals/BECKN-RFC-Rating and Reputation on Beckn Protocol.md index e69d7a87..99060a11 100644 --- a/docs/proposals/BECKN-RFC-Rating and Reputation on Beckn Protocol.md +++ b/docs/proposals/BECKN-RFC-Rating and Reputation on Beckn Protocol.md @@ -132,6 +132,14 @@ Once the rating handshake is complete, the Rating should happen via the followin 4. The Rating Receiver must call the on_rating action on the Rating Sender's API. the message must contain any additional information that may be required after the rating is complete. (Requires further elaboration) + +### Communication Sequence + + +<figure> +<img align="center" src="https://github.com/beckn/protocol-specifications/blob/draft/docs/images/rating%20handshake.png"> +</figure> + Rating Ledger Architecture ========================== @@ -160,4 +168,4 @@ To verify the rating of a Rateable Object in the catalog, the Rating Sender must If this value matches the rating value sent in the catalog, then the rating is accurate. A margin of error may be introduced in the Network Rating Policy  specifying the number of significant digits to be used while comparing the average rating with the received rating. -If the rating value does not match or is not within the margin of error, then the Rating Sender should report the error to the Network Facilitator. \ No newline at end of file +If the rating value does not match or is not within the margin of error, then the Rating Sender should report the error to the Network Facilitator. From a3b6af79ff720f2419825836b8f03d88be88a9c4 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Mon, 18 Jul 2022 05:44:42 +0530 Subject: [PATCH 133/183] removed space --- core/v0/api/core.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 6e73b81f..eb42820c 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -76,8 +76,6 @@ paths: - context - message - - responses: '200': description: Acknowledgement of message received From 84943d16bb6c1396cc63a184a78f9c0db7cb5455 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Mon, 18 Jul 2022 05:45:05 +0530 Subject: [PATCH 134/183] Added full address string --- core/v0/api/core.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index eb42820c..0b200efc 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1367,6 +1367,8 @@ components: description: Describes the postal address of a location. This is the address that can be accessed by mail.<br>This has properties like door number, name of the address, building number, street, locality, ward, state and country, and area code<br>This schema is used in the following locations <br><ul><li>location.address</li><li>billing.address</li></ul><br>This is used in the following situations.<br><ul><li>This is typically used during the discovery stage when specifying the address of a provider. For example- When specifying the address of a store</li><li>This is typically used during the order stage when specifying the billing address of a consumer</li><li>This is typically used during the order stage when specifying the address where fulfillment starts. For example- When specifying pickup location</li><li>This is typically used during the order stage when specifying the address where fulfillment ends. For example- When specifying drop location</li></ul><br>This is used to allow the fulfillment agent to reach the exact location of fulfillment start or end. This is done because, just GPS coordinates may not be enough to reach the exact points of fulfillment. The postal address provides granularity till the door number of a physical location. <br>This is used by the BAP to send the billing address of the user to the BPP for creating an order.<br>This is used by the user to physically go to the store location during store-pickup.<br>This is used by the fulfillment agent to physically go to the provider's location to pickup an order<br>This is used by the fulfillment agent to physically go to the consumer's location to deliver an order<br>This is used by a BPP for saving the billing address for confirming an order<br>The address can be used by the consumer app to geolocate the position of a provider's store on a map. <br>The address can be used by the agent's app to geolocate the position of the start of fulfillment on a map<br>The address can be used by the agent to physically go to the exact location where a fulfillment starts of ends.<br>The address will be saved as the billing address for the order created by the BPP type: object properties: + full: + type: string door: type: string description: Door / Shop number of the address From fbd692c71704e4d9e7715a3531a5ce673d0739da Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Mon, 18 Jul 2022 05:45:54 +0530 Subject: [PATCH 135/183] Added space --- core/v0/api/core.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 0b200efc..1341bcac 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1399,6 +1399,7 @@ components: area_code: type: string description: 'Area code. This can be Pincode, ZIP code or any equivalent' + Agent: description: Describes the direct performer or driver or executor of the fulfillment of an order. In the healthcare domain it can be a doctor while in the mobility domain it can be a taxi driver.<br>This has properties such as name, image, dob, gender, cred, tags, phone, email and rateable<br>This schema is used in the agent property of the Fulfillment schema object<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP wants to convey details of the person who will be fulfilling the order so that the customer can make an informed decision about the product or service they need to purchase</li><li>This is typically used in the fulfillment stage when the BPP assigns an agent to fulfill the order post confirmation of the same</li></ul><br>This is used to allow the BPP to send the details of the person fulfilling the order to the end user. allOf: @@ -1408,6 +1409,7 @@ components: properties: rateable: $ref: '#/components/schemas/Rateable' + Authorization: description: Describes an authorization mechanism used in the order lifecycle. Can be used to attach authorization token to any interaction.<br>This has properties like type, token, valid_from, valid_to and status<br>This is used in the following situations.<br><ul><li>Typically in the fulfillment stage when BPP sends an authorization mechanism that the BAP needs to use for authorizing any interaction</li></ul><br>This is used to allow a user to authorize the validity of their order with a person executing the order so that fulfillment of the order can start/end. This is also used as proof of presence of the customer so that a person executing the order can start/end the fulfillment.<br>This can be used by the user to start fulfillment by providing the token as proof of presence.<br>This can be used by the user as a proof of purchase of service to a person executing the order at start/end of fulfillment<br>This can be used by the user to end fulfillment by providing the token as proof of completion of service.<br><br>The authorization mechanism can be used in several ways to authorize the start or end of a fulfillment.<br>In the mobility domain a BPP which renders taxi services may give an OTP to the BAP after confirming the order. The end user will give the OTP to the taxi driver as proof of presence to start the taxi service<br>In the logistics domain a BPP that renders courier services can give an OTP to the BAP while the delivery service is being performed by a delivery agent. The end user will give the OTP to the delivery agent so that they can mark the package as successfully delivered.<br>In the mobility domain a public transit BPP can send a signed QR code string to the BAP. The BAP will render it as a QR code which the end user will present to a ticketing employee who can read the QR code using their device and authenticate the validity of the ticket type: object From 1c0b6f80f721693bcca792b1adf72d9503f037ae Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Mon, 18 Jul 2022 05:46:29 +0530 Subject: [PATCH 136/183] Added jcard field in contact --- core/v0/api/core.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 1341bcac..e16c2e0d 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1559,12 +1559,21 @@ components: description: Describes the contact information of an entity including phone number or an email ID<br>This has properties like phone,email,tags<br>This is used to allow the BPP or BAP to send contact details of a person. type: object properties: + name: + '#/components/schemas/Name' + address: + $ref: '#/components/schemas/Address' phone: type: string email: type: string + jcard: + type: object + description: A Jcard object as per draft-ietf-jcardcal-jcard-03 specification tags: $ref: '#/components/schemas/Tags' + + Context: description: Describes the context header of the message being sent.<br>This has properties like domain,country,city,action,code_version,bap_id,bap_uri,bpp_id,bpp_uri,transaction_id,message-id,timestamp,key,ttl type: object From 6bbc9e7f901db3589764fc8a18d26d2b447095d9 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Mon, 18 Jul 2022 05:47:27 +0530 Subject: [PATCH 137/183] Added Organization schema --- core/v0/api/core.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index e16c2e0d..1dd12501 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2020,6 +2020,17 @@ components: type: string time: $ref: '#/components/schemas/Time' + + Organization: + type: object + properties: + descriptor: + $ref: '#/components/schemas/Descriptor' + address: + $ref: '#/components/schemas/Address' + contact: + $ref: '#/components/schemas/Contact' + Name: type: string description: 'Describes the name of a person in format: ./{given_name}/{honorific_prefix}/{first_name}/{middle_name}/{last_name}/{honorific_suffix}' From 18f5fd7c900db6e527c6d7375f2fca23203d8695 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Mon, 18 Jul 2022 05:48:00 +0530 Subject: [PATCH 138/183] Removed format restrictions on Name schema --- core/v0/api/core.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 1dd12501..8f03a73c 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2033,8 +2033,7 @@ components: Name: type: string - description: 'Describes the name of a person in format: ./{given_name}/{honorific_prefix}/{first_name}/{middle_name}/{last_name}/{honorific_suffix}' - pattern: '^\./[^/]+/[^/]*/[^/]*/[^/]*/[^/]*/[^/]*$' + description: 'Describes the name of a person' Offer: description: Describes how a product or a service will be rendered at a reduced price to the user<br>This has properties like id,descriptor,location_ids,category_ids,item_ids,time From 4c544a9c1e536d4c1ffaa7dcce1230371480b895 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Mon, 18 Jul 2022 05:49:23 +0530 Subject: [PATCH 139/183] Added space --- core/v0/api/core.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 8f03a73c..642bd47b 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2236,6 +2236,7 @@ components: type: string tags: $ref: '#/components/schemas/Tags' + Policy: description: Describes a policy.<br>This has properties like id_description,parent_policy_id,time type: object From e7dc3a3e915dc2cc4444ed5ea00706e7fa679bb5 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:09:19 +0530 Subject: [PATCH 140/183] Fixed order object --- core/v0/api/core.yaml | 71 ++----------------------------------------- 1 file changed, 2 insertions(+), 69 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 642bd47b..76ef275f 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -509,32 +509,7 @@ paths: type: object properties: order: - type: object - properties: - provider: - $ref: '#/components/schemas/Provider' - provider_location: - $ref: '#/components/schemas/Location' - items: - type: array - items: - allOf: - - $ref: '#/components/schemas/Item' - - properties: - quantity: - $ref: '#/components/schemas/ItemQuantity' - add_ons: - type: array - items: - $ref: '#/components/schemas/AddOn' - offers: - type: array - items: - $ref: '#/components/schemas/Offer' - quote: - $ref: '#/components/schemas/Quotation' - required: - - order + $ref: '#/components/schemas/Order' error: $ref: '#/components/schemas/Error' required: @@ -576,49 +551,7 @@ paths: type: object properties: order: - type: object - properties: - provider: - type: object - properties: - id: - $ref: '#/components/schemas/Provider/properties/id' - provider_location: - type: object - properties: - id: - $ref: '#/components/schemas/Location/properties/id' - items: - type: array - items: - type: object - properties: - id: - $ref: '#/components/schemas/Item/properties/id' - quantity: - $ref: '#/components/schemas/ItemQuantity/properties/selected' - add_ons: - type: array - items: - type: object - properties: - id: - $ref: '#/components/schemas/AddOn/properties/id' - offers: - type: array - items: - type: object - properties: - id: - $ref: '#/components/schemas/Offer/properties/id' - billing: - $ref: '#/components/schemas/Billing' - fulfillment: - $ref: '#/components/schemas/Fulfillment' - quote: - $ref: '#/components/schemas/Quotation' - payment: - $ref: '#/components/schemas/Payment' + $ref: '#/components/schemas/Order' required: - order error: From 9f93baf7cf755d19405ae09292f7b17400582cda Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:09:41 +0530 Subject: [PATCH 141/183] Added Feedback Form --- core/v0/api/core.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 76ef275f..166740c8 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -812,7 +812,8 @@ paths: context: $ref: '#/components/schemas/Context' message: - $ref: '#/components/schemas/RatingAck' + feedback: + $ref: '#/components/schemas/FeedbackForm' error: $ref: '#/components/schemas/Error' required: From fd3c07a034e3ea70702da2df8d3b4837e246adaa Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:10:02 +0530 Subject: [PATCH 142/183] Removed ProxyAuth header --- core/v0/api/core.yaml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 166740c8..abd668c4 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1263,16 +1263,12 @@ components: in: header name: Authorization description: 'Signature of message body using BAP or BPP subscriber''s signing public key. <br/><br/>Format:<br/><br/><code>Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code>' - GatewaySubscriberAuth: - type: apiKey - in: header - name: Proxy-Authorization - description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>Proxy-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code><p><b>Note:</b>This header will be deprecated soon and will no longer be supported in future releases. New implementors are requested to use the X-Gateway-Authorization header. Existing implementations are requested to migrate their header to the new header. The deprecation date will be set after discussion as per the standard specification governance process.</p>' GatewaySubscriberAuthNew: type: apiKey in: header name: X-Gateway-Authorization description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code>' + schemas: Ack: description: Describes the acknowledgement message a BPP, BAP or BG sends as response to any beckn API calls. This can represent the acknowledged or not acknowledged status response.<br>This has one property status<br>This schema is used in the response of all the beckn API calls<br>This is used to convey the acknowledgement status of a beckn API call received by a network participant. If the network participant received the API call successfully and has validated the request is as per protocol specifications and signature verified it can send back an ACK as status. Or else it will send NACK as status. The validation done at this point is only technical in nature (validating if the schema is as per specification, if the signature and caller is valid, if the endpoint itself is implemented) and no functional validation (as per business logic) needs to be done before sending this. From 652763c8ec454ace1e5298cddfff7d0bb27d6ff8 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:11:25 +0530 Subject: [PATCH 143/183] Added / removed unnecessary spaces --- core/v0/api/core.yaml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index abd668c4..beca44bc 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1282,6 +1282,7 @@ components: - NACK required: - status + AddOn: description: Describes an ancillary item (products/services) sold to the buyer of a main product or service<br>This has properties like id,descriptor,price<br>This schema is used in the addons array in the Order schema object type: object @@ -1293,6 +1294,7 @@ components: $ref: '#/components/schemas/Descriptor' price: $ref: '#/components/schemas/Price' + Address: description: Describes the postal address of a location. This is the address that can be accessed by mail.<br>This has properties like door number, name of the address, building number, street, locality, ward, state and country, and area code<br>This schema is used in the following locations <br><ul><li>location.address</li><li>billing.address</li></ul><br>This is used in the following situations.<br><ul><li>This is typically used during the discovery stage when specifying the address of a provider. For example- When specifying the address of a store</li><li>This is typically used during the order stage when specifying the billing address of a consumer</li><li>This is typically used during the order stage when specifying the address where fulfillment starts. For example- When specifying pickup location</li><li>This is typically used during the order stage when specifying the address where fulfillment ends. For example- When specifying drop location</li></ul><br>This is used to allow the fulfillment agent to reach the exact location of fulfillment start or end. This is done because, just GPS coordinates may not be enough to reach the exact points of fulfillment. The postal address provides granularity till the door number of a physical location. <br>This is used by the BAP to send the billing address of the user to the BPP for creating an order.<br>This is used by the user to physically go to the store location during store-pickup.<br>This is used by the fulfillment agent to physically go to the provider's location to pickup an order<br>This is used by the fulfillment agent to physically go to the consumer's location to deliver an order<br>This is used by a BPP for saving the billing address for confirming an order<br>The address can be used by the consumer app to geolocate the position of a provider's store on a map. <br>The address can be used by the agent's app to geolocate the position of the start of fulfillment on a map<br>The address can be used by the agent to physically go to the exact location where a fulfillment starts of ends.<br>The address will be saved as the billing address for the order created by the BPP type: object @@ -1361,6 +1363,7 @@ components: status: type: string description: Status of the token + Billing: description: Describes the billing details of an entity.<br>This has properties like name,organization,address,email,phone,time,tax_number, created_at,updated_at type: object @@ -1449,6 +1452,7 @@ components: type: string description: Time after which catalog has to be refreshed format: date-time + Category: description: Describes a type or division of providers or items regarded as having one or more shared characteristics<br>This has properties like id,parent_category_id,descriptor,time,tags<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP wants to categorize the products or services in its catalog as additional information about the product or service </li><li>This is typically used in the discovery stage when the BPP wants to categorize the products or services in its catalog because the price of the same product or service can change based on the category </li><li>This is typically used in the discovery stage when the BPP wants to categorize the products or services in its catalog as additional information about the product or service </li></ul> type: object @@ -1464,6 +1468,7 @@ components: $ref: '#/components/schemas/Time' tags: $ref: '#/components/schemas/Tags' + Circle: description: Describes a circular region of a specified radius centered at a specified GPS coordinate.<br>This has properties like gps,radius<br>This is used when a circular area needs to be represented as a location. type: object @@ -1475,6 +1480,7 @@ components: required: - gps - radius + City: description: Describes a city or a town<br>This has properties like name,code type: object @@ -1485,6 +1491,7 @@ components: code: type: string description: City code + Contact: description: Describes the contact information of an entity including phone number or an email ID<br>This has properties like phone,email,tags<br>This is used to allow the BPP or BAP to send contact details of a person. type: object @@ -1502,7 +1509,6 @@ components: description: A Jcard object as per draft-ietf-jcardcal-jcard-03 specification tags: $ref: '#/components/schemas/Tags' - Context: description: Describes the context header of the message being sent.<br>This has properties like domain,country,city,action,code_version,bap_id,bap_uri,bpp_id,bpp_uri,transaction_id,message-id,timestamp,key,ttl @@ -1584,6 +1590,7 @@ components: - bap_id - bap_uri - timestamp + Country: description: Describes a country.<br>This has properties like name,code type: object @@ -1918,12 +1925,14 @@ components: type: boolean tags: $ref: '#/components/schemas/Tags' + Language: description: Describes a specific language using a language code.<br>This has properties like code type: object properties: code: type: string + Location: description: Describes the location of something, for example, where an event is happening, where a store is located, or where an action takes place<br>This has properties like id,descriptor,gps,address,station code,city,country,circle,polygon,3d space,time type: object @@ -2011,6 +2020,7 @@ components: type: string descriptor: $ref: '#/components/schemas/Descriptor' + Order: description: Describes an order which contains the terms, details, status and identifier of a transaction between a BAP and a BPP. This is usually an exchange of goods or services for money.<br>This has properties like id,state,provider,items,add_ons,offers,documents,billings,fulfillment,quote,payment,created_at,updated_at<br>This is used in the following situations.<br><ul><li>This is typically used in the order stage when the BAP sends the details of the order it wishes to create</li><li>This is typically used in the fulfillment stage when the BPP/BAP sends the order details</li></ul> type: object @@ -2351,6 +2361,7 @@ components: items: type: string format: date-time + State: description: Describes the state of an order or fulfillment<br>This has properties like descriptor, updated_at,updated_by type: object @@ -2363,6 +2374,7 @@ components: updated_by: type: string description: ID of entity which changed the state + Subscriber: type: object description: Any entity which wants to authenticate itself on a network. This can be a BAP, BPP, BG, BPPR or a BGR.<br>This has properties like subscriber_id,type, cb_url,domain, city, country, sigining_public_key, encryption_public_key,status,created, updated expiries @@ -2432,6 +2444,7 @@ components: description: Describes a tag. This is a simple key-value store which is used to contain extended metadata additionalProperties: type: string + Time: description: Describes time in its various forms. It can be a single point in time; duration; or a structured timetable of operations<br>This has properties like label, time stamp,duration,range, days, schedule type: object From 3fd7cd26ba33a1daada6f13a9bd936bb2a36532a Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:18:42 +0530 Subject: [PATCH 144/183] Removed required fields --- core/v0/api/core.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index beca44bc..ff4da4e2 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1390,9 +1390,7 @@ components: updated_at: type: string format: date-time - required: - - name - - phone + Cancellation: description: Describes the ACK response type: object From b52b864784983899fe0a566fe96f5d4792274efc Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:19:01 +0530 Subject: [PATCH 145/183] added CargoItem schema --- core/v0/api/core.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index ff4da4e2..a1bcef88 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1420,6 +1420,16 @@ components: $ref: '#/components/schemas/Option/properties/id' additional_description: $ref: '#/components/schemas/Descriptor' + + CargoItem: + type: object + properties: + descriptor: + $ref: '#/components/schemas/Descriptor' + dimensions: + $ref: '#/components/schemas/Dimensions' + + Catalog: description: Describes the products or services offered by a BPP. This is typically sent as the response to a search intent from a BAP. The payment terms, offers and terms of fulfillment supported by the BPP can also be included here. The BPP can show hierarchical nature of products/services in its catalog using the parent_category_id in categories. The BPP can also send a ttl (time to live) in the context which is the duration for which a BAP can cache the catalog and use the cached catalog. <br>This has properties like bbp/descriptor,bbp/categories,bbp/fulfillments,bbp/payments,bbp/offers,bbp/providers and exp<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP sends the details of the products and services it offers as response to a search intent from the BAP. </li></ul> type: object From ef9c400b77b2217cc927edb969fda8178bcd4b08 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:19:37 +0530 Subject: [PATCH 146/183] added WIP Verifiable Credential schema --- core/v0/api/core.yaml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index a1bcef88..cb0553b0 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1609,6 +1609,36 @@ components: code: type: string description: Country code as per ISO 3166-1 and ISO 3166-2 format + + Credential: + description: Describes a credential of an entity - Person or Organization + type: object + properties: + id: + type: string + type: + type: string + default: 'VerifiableCredential' + issuer: + type: string + issuance_date: + type: string + format: date-time + credential_subject: + type: object + properties: + id: + type: string + additionalProperties: + type: object + credential_schema: + type: object + properties: + id: + type: string + type: + type: string + DecimalValue: description: Describes a numerical value in decimal form type: string From 823344ee19f8abc140d18057138ddf4596bb2d6c Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:20:00 +0530 Subject: [PATCH 147/183] Added video as a property in descriptor --- core/v0/api/core.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index cb0553b0..83366f59 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1665,6 +1665,9 @@ components: audio: type: string format: uri + video: + type: string + format: uri 3d_render: type: string format: uri From c12166603cf0e4e8770d36e88c1f125af78efc6d Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:20:27 +0530 Subject: [PATCH 148/183] Added Item Quantity as a property of Item --- core/v0/api/core.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 83366f59..66f969a9 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1946,6 +1946,8 @@ components: $ref: '#/components/schemas/Descriptor' price: $ref: '#/components/schemas/Price' + quantity: + $ref: '#/components/schemas/ItemQuantity' category_id: $ref: '#/components/schemas/Category/properties/id' fulfillment_id: From 7e8eb6659b71818293f5863dae490659bd33aee6 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:20:52 +0530 Subject: [PATCH 149/183] Added payment_id to Item to reference Payment terms --- core/v0/api/core.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 66f969a9..28ad5b38 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1956,6 +1956,8 @@ components: $ref: '#/components/schemas/Rating/properties/value' location_id: $ref: '#/components/schemas/Location/properties/id' + payment_id: + $ref: '#/components/schemas/Payment/properties/id' time: $ref: '#/components/schemas/Time' rateable: From 01644a2d1d7680949ff584b895a34e53370fc10f Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:21:36 +0530 Subject: [PATCH 150/183] Updated Order object --- core/v0/api/core.yaml | 52 +++++++++++++------------------------------ 1 file changed, 16 insertions(+), 36 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 28ad5b38..f83b0946 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2076,57 +2076,37 @@ components: state: type: string provider: - type: object - properties: - id: - $ref: '#/components/schemas/Provider/properties/id' - locations: - type: array - maxItems: 1 - items: - type: object - properties: - id: - $ref: '#/components/schemas/Location/properties/id' - required: - - id + $ref: '#/components/schemas/Provider' items: type: array items: - type: object - properties: - id: - $ref: '#/components/schemas/Item/properties/id' - quantity: - $ref: '#/components/schemas/ItemQuantity/properties/selected' - required: - - id + $ref: '#/components/schemas/Item' add_ons: type: array items: - type: object - properties: - id: - $ref: '#/components/schemas/AddOn/properties/id' - required: - - id + $ref: '#/components/schemas/AddOn' offers: type: array items: - type: object - properties: - id: - $ref: '#/components/schemas/Offer/properties/id' - required: - - id + $ref: '#/components/schemas/Offer' documents: type: array items: $ref: '#/components/schemas/Document' billing: $ref: '#/components/schemas/Billing' - fulfillment: - $ref: '#/components/schemas/Fulfillment' + fulfillments: + type: array + items: + $ref: '#/components/schemas/Fulfillment' + cancellation_policy: + $ref: '#/components/schemas/CancellationPolicy' + return_policy: + $ref: '#/components/schemas/ReturnPolicy' + replacement_policy: + $ref: '#/components/schemas/ReplacementPolicy' + update_policy: + $ref: '#/components/schemas/UpdatePolicy' quote: $ref: '#/components/schemas/Quotation' payment: From 5c1bf7c1a0d62d7003c4d226f8fa8732d30bb195 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:22:01 +0530 Subject: [PATCH 151/183] Removed Old Organization schema --- core/v0/api/core.yaml | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index f83b0946..af177107 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2005,16 +2005,6 @@ components: time: $ref: '#/components/schemas/Time' - Organization: - type: object - properties: - descriptor: - $ref: '#/components/schemas/Descriptor' - address: - $ref: '#/components/schemas/Address' - contact: - $ref: '#/components/schemas/Contact' - Name: type: string description: 'Describes the name of a person' @@ -2119,13 +2109,14 @@ components: format: date-time Organization: - description: Describes an organization such as a school, NGO, corporation, club, company etc.<br>This has properties like name,cred type: object properties: - name: - type: string - cred: - type: string + descriptor: + $ref: '#/components/schemas/Descriptor' + address: + $ref: '#/components/schemas/Address' + contact: + $ref: '#/components/schemas/Contact' Page: description: Describes a page in a search result From d6ae425f12859794b8ee7750b8bdad35e290540f Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:22:17 +0530 Subject: [PATCH 152/183] Added payload schema --- core/v0/api/core.yaml | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index af177107..6d589f8d 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2126,7 +2126,26 @@ components: type: string next_id: type: string - + + Payload: + type: object + properties: + persons: + type: object + properties: + count: + type: string + list: + items: + $ref: '#/components/schemas/Person' + cargo: + type: object + properties: + count: + type: string + list: + items: + $ref: '#/components/schemas/CargoItem' Payment: description: Describes the payment mechanism to be used for the order.<br>This has properties like uri,tl_method,params,type,status,time. For more info please check BECKN-RFC-002 <a href="https://github.com/beckn/protocol-specifications/blob/core-0.9.4-draft/docs/protocol-drafts/BECKN-002-Payments-On-Beckn-Enabled-Networks.md">Payments on Beckn-Enabled Networks</a> From 5d91fa4a5866b9795cf87dfc2f3f83d3f2f8956e Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:23:10 +0530 Subject: [PATCH 153/183] Removed tl_method property from Payment --- core/v0/api/core.yaml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 6d589f8d..39e2d61f 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2155,13 +2155,6 @@ components: type: string description: 'A payment uri to be called by the BAP. If empty, then the payment is to be done offline. The details of payment should be present in the params object. If ```tl_method``` = http/get, then the payment details will be sent as url params. Two url param values, ```$transaction_id``` and ```$amount``` are mandatory. And example url would be : https://www.example.com/pay?txid=$transaction_id&amount=$amount&vpa=upiid&payee=shopez&billno=1234' format: uri - tl_method: - type: string - enum: - - http/get - - http/post - - payto - - upi params: type: object properties: From f6d209a5affe02314476479760dcc7f6caf56bc7 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:23:58 +0530 Subject: [PATCH 154/183] Added bank related params and vpas in Payment schema --- core/v0/api/core.yaml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 39e2d61f..30e69698 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2167,10 +2167,12 @@ components: $ref: '#/components/schemas/Price/properties/value' currency: $ref: '#/components/schemas/Price/properties/currency' - additionalProperties: - type: string - required: - - currency + bank_code: + type: string + bank_account_number: + type: string + virtual_payment_address: + type: string type: type: string enum: From 282681a7bfcdba0ca47b687343317b4e5436bf95 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:24:37 +0530 Subject: [PATCH 155/183] Added id to person schema --- core/v0/api/core.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 30e69698..67bc0f78 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2192,6 +2192,9 @@ components: description: Describes a person as any individual<br>This has the properties like name,image,dob,gender,cred,tags type: object properties: + id: + type: string + description: Describes the identity of the person name: $ref: '#/components/schemas/Name' image: From 0d8f3dbfaac0f56ecbb2fb60e7ba42a6f856345c Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:25:33 +0530 Subject: [PATCH 156/183] Added credentials in Person schema --- core/v0/api/core.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 67bc0f78..fb53a79d 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2205,8 +2205,10 @@ components: gender: type: string description: 'Gender of something, typically a Person, but possibly also fictional characters, animals, etc. While Male and Female may be used, text strings are also acceptable for people who do not identify as a binary gender' - cred: - type: string + creds: + type: array + items: + $ref: '#/components/schemas/Credential' tags: $ref: '#/components/schemas/Tags' From a388b80115ba7903c011b2f93de966e125e70ef4 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:27:13 +0530 Subject: [PATCH 157/183] Added feedback url as a response to a rating call --- core/v0/api/core.yaml | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index fb53a79d..660ee92f 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2327,30 +2327,27 @@ components: type: object properties: rating_category: - description: Category of the object being rated + description: Category of the entity being rated type: string id: description: Id of the object being rated type: string value: description: Rating value given to the object - type: number - minimum: 0 - feedback_form: - $ref: '#/components/schemas/FeedbackForm' - feedback_id: - $ref: '#/components/schemas/FeedbackUrl/properties/params/properties/feedback_id' + type: string RatingAck: description: Describes the acknowledgement that feedback or rating has been recorded by the BPP.<br> type: object properties: - feedback_ack: - description: If feedback has been recorded or not - type: boolean rating_ack: - description: If rating has been recorded or not type: boolean + feedback_ack: + type: boolean + feedback_url: + description: URL to a feedback form sent in response to a rating received + type: string + format: uri Scalar: description: Describes a scalar quantity.<br>This has properties like value, estimated_value, computed_value,range, unit From 95282e541059a6d155790b5125a1392fdfd20ad9 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:28:18 +0530 Subject: [PATCH 158/183] Updated Scalar schema fields to DecimalValue --- core/v0/api/core.yaml | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 660ee92f..9088b86b 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2359,23 +2359,20 @@ components: - CONSTANT - VARIABLE value: - type: number + $ref: '#/components/schemas/DecimalValue' estimated_value: - type: number + type: '#/components/schemas/DecimalValue' computed_value: - type: number + type: '#/components/schemas/DecimalValue' range: type: object properties: min: - type: number + type: '#/components/schemas/DecimalValue' max: - type: number + type: '#/components/schemas/DecimalValue' unit: type: string - required: - - value - - unit Schedule: description: Describes schedule as a repeating time period used to describe a regularly recurring event. At a minimum a schedule will specify frequency which describes the interval between occurrences of the event. Additional information can be provided to specify the schedule more precisely. This includes identifying the timestamps(s) of when the event will take place. Schedules may also have holidays to exclude a specific day from the schedule.<br>This has properties like frequency, holidays, times From 337358e0113132a16e5b350e3f8dea918ba2f033 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:43:47 +0530 Subject: [PATCH 159/183] Added cancellation terms --- core/v0/api/core.yaml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 9088b86b..0ba5b59c 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1421,6 +1421,23 @@ components: additional_description: $ref: '#/components/schemas/Descriptor' + CancellationTerms: + type: object + properties: + cancel_by: + type: string + format: date-time + refund_eligible: + type: boolean + refund_percentage: + type: integer + minimum: 0 + maximum: 100 + other_terms: + type: array + items: + type: string + CargoItem: type: object properties: From 4e6b867e3d1927ac0ac1fbabd7e5b2114340d2bd Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:44:08 +0530 Subject: [PATCH 160/183] Added order update terms --- core/v0/api/core.yaml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 0ba5b59c..db25974a 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2366,6 +2366,36 @@ components: type: string format: uri + ReplacementTerms: + type: object + properties: + replace_by: + type: string + format: date-time + replacement_eligible: + type: boolean + other_terms: + type: array + items: + type: string + + ReturnTerms: + type: object + properties: + return_by: + type: string + format: date-time + refund_eligible: + type: boolean + refund_percentage: + type: integer + minimum: 0 + maximum: 100 + other_terms: + type: array + items: + type: string + Scalar: description: Describes a scalar quantity.<br>This has properties like value, estimated_value, computed_value,range, unit type: object From 941f027daafec8568829b6fad069146ae6baf0f8 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:44:28 +0530 Subject: [PATCH 161/183] Added order update terms --- core/v0/api/core.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index db25974a..01ca791a 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2564,6 +2564,17 @@ components: - active - inactive + UpdateTerms: + type: object + properties: + update_by: + type: string + format: date-time + other_terms: + type: array + items: + type: string + Vehicle: description: Describes a vehicle is a device that is designed or used to transport people or cargo over land, water, air, or through space.<br>This has properties like category, capacity, make, model, size,variant,color,energy_type,registration type: object From ff30bcb78150e252ef42341ae216606e697c4676 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:46:05 +0530 Subject: [PATCH 162/183] Added cancellation, update, return and replacement terms in Order schema --- core/v0/api/core.yaml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 01ca791a..fa8088d7 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2106,14 +2106,14 @@ components: type: array items: $ref: '#/components/schemas/Fulfillment' - cancellation_policy: - $ref: '#/components/schemas/CancellationPolicy' - return_policy: - $ref: '#/components/schemas/ReturnPolicy' - replacement_policy: - $ref: '#/components/schemas/ReplacementPolicy' - update_policy: - $ref: '#/components/schemas/UpdatePolicy' + cancellation_terms: + $ref: '#/components/schemas/CancellationTerms' + return_terms: + $ref: '#/components/schemas/ReturnTerms' + replacement_terms: + $ref: '#/components/schemas/ReplacementTerms' + update_terms: + $ref: '#/components/schemas/UpdateTerms' quote: $ref: '#/components/schemas/Quotation' payment: From 2e7c88b75b14e67e57e2ee8b2efd906fbf0a1b1c Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:48:15 +0530 Subject: [PATCH 163/183] Updated version number to 1.0.0-draft --- core/v0/api/core.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index fa8088d7..fa4c57b5 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2,7 +2,7 @@ openapi: 3.0.0 info: title: Beckn Core API description: Beckn Core API specification - version: 0.9.3 + version: 1.0.0-draft security: - SubscriberAuth: [] From 1e67155d4c9fe12d6160e109903682ef7002736e Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:51:41 +0530 Subject: [PATCH 164/183] Removed gateway subscriber auth --- core/v0/api/core.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index fa4c57b5..151b0035 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -6,7 +6,6 @@ info: security: - SubscriberAuth: [] - - GatewaySubscriberAuth: [] - GatewaySubscriberAuthNew: [] paths: /search: From 3c40fbd4076547e039220badc7bcc5a9d879df05 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Tue, 19 Jul 2022 10:53:08 +0530 Subject: [PATCH 165/183] Bug fixes in openapi file --- core/v0/api/core.yaml | 755 ++++++++++++++++++++++-------------------- 1 file changed, 396 insertions(+), 359 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 151b0035..ba66847f 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -22,17 +22,17 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: intent: - $ref: '#/components/schemas/Intent' + $ref: "#/components/schemas/Intent" required: - context - message responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -43,11 +43,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /select: @@ -63,12 +63,12 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: order: - $ref: '#/components/schemas/Order' + $ref: "#/components/schemas/Order" required: - order required: @@ -76,7 +76,7 @@ paths: - message responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -87,11 +87,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /init: @@ -107,19 +107,19 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: order: - $ref: '#/components/schemas/Order' + $ref: "#/components/schemas/Order" required: - order required: - context - message responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -130,11 +130,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /confirm: @@ -150,19 +150,19 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: order: - $ref: '#/components/schemas/Order' + $ref: "#/components/schemas/Order" required: - order required: - context - message responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -173,11 +173,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /status: @@ -193,19 +193,19 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: order_id: - $ref: '#/components/schemas/Order/properties/id' + $ref: "#/components/schemas/Order/properties/id" required: - order_id required: - context - message responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -216,11 +216,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /track: @@ -236,12 +236,12 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: order_id: - $ref: '#/components/schemas/Order/properties/id' + $ref: "#/components/schemas/Order/properties/id" callback_url: type: string format: uri @@ -251,7 +251,7 @@ paths: - context - message responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -262,11 +262,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /cancel: @@ -282,23 +282,23 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: order_id: - $ref: '#/components/schemas/Order/properties/id' + $ref: "#/components/schemas/Order/properties/id" cancellation_reason_id: - $ref: '#/components/schemas/Option/properties/id' + $ref: "#/components/schemas/Option/properties/id" descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" required: - order_id required: - context - message responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -309,11 +309,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /update: @@ -329,7 +329,7 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: @@ -337,7 +337,7 @@ paths: description: 'Comma separated values of order objects being updated. For example: ```"update_target":"item,billing,fulfillment"```' type: string order: - $ref: '#/components/schemas/Order' + $ref: "#/components/schemas/Order" required: - update_target - order @@ -345,7 +345,7 @@ paths: - context - message responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -356,11 +356,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /rating: @@ -376,14 +376,14 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: - $ref: '#/components/schemas/Rating' + $ref: "#/components/schemas/Rating" required: - context - message responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -394,11 +394,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message @@ -415,7 +415,7 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: @@ -426,7 +426,7 @@ paths: - context - message responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -437,11 +437,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message @@ -459,20 +459,20 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: catalog: - $ref: '#/components/schemas/Catalog' + $ref: "#/components/schemas/Catalog" required: - catalog error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - context responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -483,11 +483,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - context /on_select: @@ -503,18 +503,18 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: order: - $ref: '#/components/schemas/Order' + $ref: "#/components/schemas/Order" error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - context responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -525,11 +525,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /on_init: @@ -545,20 +545,20 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: order: - $ref: '#/components/schemas/Order' + $ref: "#/components/schemas/Order" required: - order error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - context responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -569,11 +569,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /on_confirm: @@ -589,20 +589,20 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: order: - $ref: '#/components/schemas/Order' + $ref: "#/components/schemas/Order" required: - order error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - context responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -613,11 +613,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /on_track: @@ -633,20 +633,20 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: tracking: - $ref: '#/components/schemas/Tracking' + $ref: "#/components/schemas/Tracking" required: - tracking error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - context responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -657,11 +657,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /on_cancel: @@ -677,20 +677,20 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: order: - $ref: '#/components/schemas/Order' + $ref: "#/components/schemas/Order" required: - order error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - context responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -701,11 +701,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /on_update: @@ -721,20 +721,20 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: order: - $ref: '#/components/schemas/Order' + $ref: "#/components/schemas/Order" required: - order error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - context responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -745,11 +745,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /on_status: @@ -765,20 +765,20 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: order: - $ref: '#/components/schemas/Order' + $ref: "#/components/schemas/Order" required: - order error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - context responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -789,11 +789,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /on_rating: @@ -809,16 +809,18 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: - feedback: - $ref: '#/components/schemas/FeedbackForm' + type: object + properties: + feedback: + $ref: "#/components/schemas/FeedbackForm" error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - context responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -829,11 +831,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message /on_support: @@ -849,7 +851,7 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: @@ -863,11 +865,11 @@ paths: type: string format: uri error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - context responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -878,11 +880,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message @@ -899,9 +901,9 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -912,11 +914,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message @@ -933,16 +935,16 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: cancellation_reasons: type: array items: - $ref: '#/components/schemas/Option' + $ref: "#/components/schemas/Option" responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -953,11 +955,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message @@ -974,9 +976,9 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -987,11 +989,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message @@ -1008,13 +1010,13 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" return_reasons: type: array items: - $ref: '#/components/schemas/Option' + $ref: "#/components/schemas/Option" responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -1025,11 +1027,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message @@ -1046,9 +1048,9 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -1059,11 +1061,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message @@ -1080,13 +1082,13 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' - rating_categories: - type: array - items: - $ref: '#/components/schemas/Rating/properties/rating_category' + $ref: "#/components/schemas/Context" + rating_categories: + type: array + items: + $ref: "#/components/schemas/Rating/properties/rating_category" responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -1097,11 +1099,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message @@ -1118,9 +1120,9 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -1131,11 +1133,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message @@ -1152,13 +1154,13 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" feedback_categories: type: array items: - $ref: '#/components/schemas/Rating/properties/rating_category' + $ref: "#/components/schemas/Rating/properties/rating_category" responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -1169,14 +1171,14 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message - + /get_feedback_form: post: tags: @@ -1190,16 +1192,16 @@ paths: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: type: object properties: rating_value: - $ref: '#/components/schemas/Rating/properties/value' + $ref: "#/components/schemas/Rating/properties/value" rating_category: - $ref: '#/components/schemas/Rating/properties/rating_category' + $ref: "#/components/schemas/Rating/properties/rating_category" responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -1210,11 +1212,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message @@ -1224,19 +1226,19 @@ paths: - BAP Meta APIs description: Get a feedback form from the BPP requestBody: - description: Feedback form sent by the BPP + description: Feedback form sent by the BPP content: application/json: schema: type: object properties: context: - $ref: '#/components/schemas/Context' + $ref: "#/components/schemas/Context" message: - $ref: '#/components/schemas/Feedback' + $ref: "#/components/schemas/Feedback" responses: - '200': + "200": description: Acknowledgement of message received content: application/json: @@ -1247,11 +1249,11 @@ paths: type: object properties: ack: - $ref: '#/components/schemas/Ack' + $ref: "#/components/schemas/Ack" required: - ack error: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" required: - message @@ -1275,7 +1277,7 @@ components: properties: status: type: string - description: 'Describe the status of the ACK response. If schema validation passes, status is ACK else it is NACK' + description: "Describe the status of the ACK response. If schema validation passes, status is ACK else it is NACK" enum: - ACK - NACK @@ -1288,11 +1290,11 @@ components: properties: id: type: string - description: 'ID of the add-on. This follows the syntax {item.id}/add-on/{add-on unique id} for item specific add-on OR ' + description: "ID of the add-on. This follows the syntax {item.id}/add-on/{add-on unique id} for item specific add-on OR " descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" price: - $ref: '#/components/schemas/Price' + $ref: "#/components/schemas/Price" Address: description: Describes the postal address of a location. This is the address that can be accessed by mail.<br>This has properties like door number, name of the address, building number, street, locality, ward, state and country, and area code<br>This schema is used in the following locations <br><ul><li>location.address</li><li>billing.address</li></ul><br>This is used in the following situations.<br><ul><li>This is typically used during the discovery stage when specifying the address of a provider. For example- When specifying the address of a store</li><li>This is typically used during the order stage when specifying the billing address of a consumer</li><li>This is typically used during the order stage when specifying the address where fulfillment starts. For example- When specifying pickup location</li><li>This is typically used during the order stage when specifying the address where fulfillment ends. For example- When specifying drop location</li></ul><br>This is used to allow the fulfillment agent to reach the exact location of fulfillment start or end. This is done because, just GPS coordinates may not be enough to reach the exact points of fulfillment. The postal address provides granularity till the door number of a physical location. <br>This is used by the BAP to send the billing address of the user to the BPP for creating an order.<br>This is used by the user to physically go to the store location during store-pickup.<br>This is used by the fulfillment agent to physically go to the provider's location to pickup an order<br>This is used by the fulfillment agent to physically go to the consumer's location to deliver an order<br>This is used by a BPP for saving the billing address for confirming an order<br>The address can be used by the consumer app to geolocate the position of a provider's store on a map. <br>The address can be used by the agent's app to geolocate the position of the start of fulfillment on a map<br>The address can be used by the agent to physically go to the exact location where a fulfillment starts of ends.<br>The address will be saved as the billing address for the order created by the BPP @@ -1305,7 +1307,7 @@ components: description: Door / Shop number of the address name: type: string - description: 'Name of address if applicable. Example, shop name' + description: "Name of address if applicable. Example, shop name" building: type: string description: Name of the building or block @@ -1314,7 +1316,7 @@ components: description: Street name or number locality: type: string - description: 'Name of the locality, apartments' + description: "Name of the locality, apartments" ward: type: string description: Name or number of the ward if applicable @@ -1329,23 +1331,23 @@ components: description: Country name area_code: type: string - description: 'Area code. This can be Pincode, ZIP code or any equivalent' + description: "Area code. This can be Pincode, ZIP code or any equivalent" Agent: description: Describes the direct performer or driver or executor of the fulfillment of an order. In the healthcare domain it can be a doctor while in the mobility domain it can be a taxi driver.<br>This has properties such as name, image, dob, gender, cred, tags, phone, email and rateable<br>This schema is used in the agent property of the Fulfillment schema object<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP wants to convey details of the person who will be fulfilling the order so that the customer can make an informed decision about the product or service they need to purchase</li><li>This is typically used in the fulfillment stage when the BPP assigns an agent to fulfill the order post confirmation of the same</li></ul><br>This is used to allow the BPP to send the details of the person fulfilling the order to the end user. allOf: - - $ref: '#/components/schemas/Person' - - $ref: '#/components/schemas/Contact' + - $ref: "#/components/schemas/Person" + - $ref: "#/components/schemas/Contact" - type: object properties: rateable: - $ref: '#/components/schemas/Rateable' + $ref: "#/components/schemas/Rateable" Authorization: description: Describes an authorization mechanism used in the order lifecycle. Can be used to attach authorization token to any interaction.<br>This has properties like type, token, valid_from, valid_to and status<br>This is used in the following situations.<br><ul><li>Typically in the fulfillment stage when BPP sends an authorization mechanism that the BAP needs to use for authorizing any interaction</li></ul><br>This is used to allow a user to authorize the validity of their order with a person executing the order so that fulfillment of the order can start/end. This is also used as proof of presence of the customer so that a person executing the order can start/end the fulfillment.<br>This can be used by the user to start fulfillment by providing the token as proof of presence.<br>This can be used by the user as a proof of purchase of service to a person executing the order at start/end of fulfillment<br>This can be used by the user to end fulfillment by providing the token as proof of completion of service.<br><br>The authorization mechanism can be used in several ways to authorize the start or end of a fulfillment.<br>In the mobility domain a BPP which renders taxi services may give an OTP to the BAP after confirming the order. The end user will give the OTP to the taxi driver as proof of presence to start the taxi service<br>In the logistics domain a BPP that renders courier services can give an OTP to the BAP while the delivery service is being performed by a delivery agent. The end user will give the OTP to the delivery agent so that they can mark the package as successfully delivered.<br>In the mobility domain a public transit BPP can send a signed QR code string to the BAP. The BAP will render it as a QR code which the end user will present to a ticketing employee who can read the QR code using their device and authenticate the validity of the ticket type: object properties: - type: + type: type: string description: Type of authorization mechanism used token: @@ -1353,11 +1355,11 @@ components: description: Token used for authorization valid_from: type: string - format: date-time + format: date-time description: Timestamp in RFC3339 format from which token is valid valid_to: type: string - format: date-time + format: date-time description: Timestamp in RFC3339 format until which token is valid status: type: string @@ -1371,16 +1373,16 @@ components: description: Personal details of the customer needed for billing. type: string organization: - $ref: '#/components/schemas/Organization' + $ref: "#/components/schemas/Organization" address: - $ref: '#/components/schemas/Address' + $ref: "#/components/schemas/Address" email: type: string format: email phone: type: string time: - $ref: '#/components/schemas/Time' + $ref: "#/components/schemas/Time" tax_number: type: string created_at: @@ -1404,21 +1406,21 @@ components: policies: type: array items: - $ref: '#/components/schemas/Policy' + $ref: "#/components/schemas/Policy" time: type: string format: date-time cancelled_by: type: string reasons: - $ref: '#/components/schemas/Option' + $ref: "#/components/schemas/Option" selected_reason: type: object properties: id: - $ref: '#/components/schemas/Option/properties/id' + $ref: "#/components/schemas/Option/properties/id" additional_description: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" CancellationTerms: type: object @@ -1441,37 +1443,36 @@ components: type: object properties: descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" dimensions: - $ref: '#/components/schemas/Dimensions' - + $ref: "#/components/schemas/Dimensions" Catalog: description: Describes the products or services offered by a BPP. This is typically sent as the response to a search intent from a BAP. The payment terms, offers and terms of fulfillment supported by the BPP can also be included here. The BPP can show hierarchical nature of products/services in its catalog using the parent_category_id in categories. The BPP can also send a ttl (time to live) in the context which is the duration for which a BAP can cache the catalog and use the cached catalog. <br>This has properties like bbp/descriptor,bbp/categories,bbp/fulfillments,bbp/payments,bbp/offers,bbp/providers and exp<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP sends the details of the products and services it offers as response to a search intent from the BAP. </li></ul> type: object properties: bpp/descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" bpp/categories: type: array items: - $ref: '#/components/schemas/Category' + $ref: "#/components/schemas/Category" bpp/fulfillments: type: array items: - $ref: '#/components/schemas/Fulfillment' + $ref: "#/components/schemas/Fulfillment" bpp/payments: type: array items: - $ref: '#/components/schemas/Payment' + $ref: "#/components/schemas/Payment" bpp/offers: type: array items: - $ref: '#/components/schemas/Offer' + $ref: "#/components/schemas/Offer" bpp/providers: type: array items: - $ref: '#/components/schemas/Provider' + $ref: "#/components/schemas/Provider" exp: type: string description: Time after which catalog has to be refreshed @@ -1485,22 +1486,22 @@ components: type: string description: Unique id of the category parent_category_id: - $ref: '#/components/schemas/Category/properties/id' + $ref: "#/components/schemas/Category/properties/id" descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" time: - $ref: '#/components/schemas/Time' + $ref: "#/components/schemas/Time" tags: - $ref: '#/components/schemas/Tags' + $ref: "#/components/schemas/Tags" Circle: description: Describes a circular region of a specified radius centered at a specified GPS coordinate.<br>This has properties like gps,radius<br>This is used when a circular area needs to be represented as a location. type: object properties: gps: - $ref: '#/components/schemas/Gps' + $ref: "#/components/schemas/Gps" radius: - $ref: '#/components/schemas/Scalar' + $ref: "#/components/schemas/Scalar" required: - gps - radius @@ -1521,9 +1522,9 @@ components: type: object properties: name: - '#/components/schemas/Name' + $ref: "#/components/schemas/Name" address: - $ref: '#/components/schemas/Address' + $ref: "#/components/schemas/Address" phone: type: string email: @@ -1532,18 +1533,18 @@ components: type: object description: A Jcard object as per draft-ietf-jcardcal-jcard-03 specification tags: - $ref: '#/components/schemas/Tags' - + $ref: "#/components/schemas/Tags" + Context: description: Describes the context header of the message being sent.<br>This has properties like domain,country,city,action,code_version,bap_id,bap_uri,bpp_id,bpp_uri,transaction_id,message-id,timestamp,key,ttl type: object properties: domain: - $ref: '#/components/schemas/Domain' + $ref: "#/components/schemas/Domain" country: - $ref: '#/components/schemas/Country/properties/code' + $ref: "#/components/schemas/Country/properties/code" city: - $ref: '#/components/schemas/City/properties/code' + $ref: "#/components/schemas/City/properties/code" action: type: string description: Defines the Beckn API call. Any actions other than the enumerated actions are not supported by Beckn Protocol @@ -1634,7 +1635,7 @@ components: type: string type: type: string - default: 'VerifiableCredential' + default: "VerifiableCredential" issuer: type: string issuance_date: @@ -1654,11 +1655,11 @@ components: type: string type: type: string - + DecimalValue: description: Describes a numerical value in decimal form type: string - pattern: '[+-]?([0-9]*[.])?[0-9]+' + pattern: "[+-]?([0-9]*[.])?[0-9]+" Descriptor: description: Describes the description used to describe or identify a real world object<br>This has properties like name,code,symbol,short_desc,long_desc,images,audio,3d_render @@ -1677,7 +1678,7 @@ components: images: type: array items: - $ref: '#/components/schemas/Image' + $ref: "#/components/schemas/Image" audio: type: string format: uri @@ -1693,12 +1694,12 @@ components: type: object properties: length: - $ref: '#/components/schemas/Scalar' + $ref: "#/components/schemas/Scalar" breadth: - $ref: '#/components/schemas/Scalar' + $ref: "#/components/schemas/Scalar" height: - $ref: '#/components/schemas/Scalar' - + $ref: "#/components/schemas/Scalar" + Document: description: Describes a piece of written or printed matter in electronic form that provides information or evidence or that serves as an official record. This will be given as a URL. In the case of sensitive information being exchanged, such documents may be encrypted and additional authorization such as an an OTP or password may be implemented when the URL is accessed.<br>This has properties like url,label<br>This is used in the following situations.<br><ul><li>This is typically used in the order stage if any documents from the user are needed by the BPP to confirm the order</li><li>This is typically used in the fulfilment and post fulfillment stage if the BPP needs to send any documents related to the order to the user</li></ul><br>This is used to allow documents to be exchanged between the BAP and the BPP type: object @@ -1708,7 +1709,7 @@ components: format: uri label: type: string - + Domain: description: Described the sector, industry or field for which the current beckn transaction is for. Examples of domains are mobility, local retail, logistics etc. Each network can choose its own codes for specifying a domain within the network. type: string @@ -1731,7 +1732,7 @@ components: - JSON-SCHEMA-ERROR code: type: string - description: 'Beckn specific error code. For full list of error codes, refer to docs/protocol-drafts/BECKN-RFC-005-ERROR-CODES-DRAFT-01.md of this repo' + description: "Beckn specific error code. For full list of error codes, refer to docs/protocol-drafts/BECKN-RFC-005-ERROR-CODES-DRAFT-01.md of this repo" path: type: string description: Path to json schema generating the error. Used only during json schema validation errors @@ -1747,16 +1748,23 @@ components: type: object properties: feedback_form: - $ref: '#/components/schemas/FeedbackForm' + $ref: "#/components/schemas/FeedbackForm" feedback_url: +<<<<<<< HEAD $ref: '#/components/schemas/FeedbackUrl' FeedbackForm: description: Describes a feedback form that a BPP can send to get feedback from the BAP. The BAP render this and will send the response of the form in this same structure.<br>This has properties like description,id,parent_id,question,answer,answer_type<br>This is used in the following situations.<br><ul><li>This is typically used in the post fulfillment stage when a BAP sends feedback for a service or product or a fulfillment agent provided by the BPP in a feedback form</li><li>This is typically used in the post fulfillment stage when the BPP sends the feedback form that needs to be used by the BAP</li></ul> +======= + $ref: "#/components/schemas/FeedbackUrl" + + FeedbackForm: + description: Describes a feedback form that a BPP can send to get feedback from the BAP +>>>>>>> Bug fixes in openapi file type: array items: - $ref: '#/components/schemas/FeedbackFormElement' - + $ref: "#/components/schemas/FeedbackFormElement" + FeedbackFormElement: description: Describes a single element in the feedback form. It can be question or an answer to the question.<br>This has properties like id,parent_id,question,answer,answer_type type: object @@ -1764,21 +1772,21 @@ components: id: type: string parent_id: - $ref: '#/components/schemas/FeedbackFormElement/properties/id' + $ref: "#/components/schemas/FeedbackFormElement/properties/id" question: description: Specifies the question to which the answer options will be contained in the child FeedbackFormElements type: string answer: - description: Specifies an answer option to which the question will be in the FeedbackFormElement specified in parent_id + description: Specifies an answer option to which the question will be in the FeedbackFormElement specified in parent_id type: string answer_type: description: Specifies how the answer option should be rendered. type: string - enum : + enum: - radio - checkbox - text - + FeedbackUrl: description: Describes the feedback URL that an end customer can use to provide feedback to the BPP for products or services.<br>This has properties like url,tl_method,params<br>This is used in the following situations.<br><ul><li>This is typically used in the post fulfillment stage when the BPP sends the feedback URL that needs to be used by the BAP for providing feedback for a service or product or fulfillment agent</li></ul> type: object @@ -1803,9 +1811,6 @@ components: required: - feedback_id - - - Fulfillment: description: Describes how a single product/service will be rendered/fulfilled to the end customer<br>This has properties like id,type,provider_id,rating,state,tracking, customer,agent,person,contact,vehicle,start,end,rateable,tags<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP sends the fulfillment terms to the BAP</li><li>This is typically used in the order stage when the BPP sends the fulfillment terms to the BAP</li><li>This is typically used in the fulfillment stage when the BPP sends the status and current details of fulfillment to the BAP</li></ul> type: object @@ -1817,11 +1822,11 @@ components: type: string description: This describes the type of fulfillment provider_id: - $ref: '#/components/schemas/Provider/properties/id' + $ref: "#/components/schemas/Provider/properties/id" rating: - $ref: '#/components/schemas/Rating/properties/value' + $ref: "#/components/schemas/Rating/properties/value" state: - $ref: '#/components/schemas/State' + $ref: "#/components/schemas/State" tracking: type: boolean description: Indicates whether the fulfillment allows tracking @@ -1830,81 +1835,85 @@ components: type: object properties: person: - $ref: '#/components/schemas/Person' + $ref: "#/components/schemas/Person" contact: - $ref: '#/components/schemas/Contact' + $ref: "#/components/schemas/Contact" agent: - $ref: '#/components/schemas/Agent' + $ref: "#/components/schemas/Agent" person: - $ref: '#/components/schemas/Person' + $ref: "#/components/schemas/Person" contact: - $ref: '#/components/schemas/Contact' + $ref: "#/components/schemas/Contact" vehicle: - $ref: '#/components/schemas/Vehicle' + $ref: "#/components/schemas/Vehicle" start: description: Details on the start of fulfillment type: object properties: location: - $ref: '#/components/schemas/Location' + $ref: "#/components/schemas/Location" time: - $ref: '#/components/schemas/Time' + $ref: "#/components/schemas/Time" instructions: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" contact: - $ref: '#/components/schemas/Contact' + $ref: "#/components/schemas/Contact" person: - $ref: '#/components/schemas/Person' + $ref: "#/components/schemas/Person" authorization: - $ref: '#/components/schemas/Authorization' + $ref: "#/components/schemas/Authorization" end: description: Details on the end of fulfillment type: object properties: location: - $ref: '#/components/schemas/Location' + $ref: "#/components/schemas/Location" time: - $ref: '#/components/schemas/Time' + $ref: "#/components/schemas/Time" instructions: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" contact: - $ref: '#/components/schemas/Contact' + $ref: "#/components/schemas/Contact" person: - $ref: '#/components/schemas/Person' + $ref: "#/components/schemas/Person" authorization: - $ref: '#/components/schemas/Authorization' + $ref: "#/components/schemas/Authorization" rateable: - $ref: '#/components/schemas/Rateable' + $ref: "#/components/schemas/Rateable" tags: - $ref: '#/components/schemas/Tags' + $ref: "#/components/schemas/Tags" Gps: description: Describes a GPS coordinates which is a unique identifier of a precise geographic location on the earth.<br> type: string pattern: '^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$' Image: +<<<<<<< HEAD description: 'Image of an object. <br/><br/> A url based image will look like <br/><br/>```uri:https://path/to/image``` <br/><br/> An image can also be sent as a data string. For example : <br/><br/> ```data:js87y34ilhriuho84r3i4```' +======= + description: "Image of an object. <br/><br/> A url based image will look like <br/><br/>```uri:http://path/to/image``` <br/><br/> An image can also be sent as a data string. For example : <br/><br/> ```data:js87y34ilhriuho84r3i4```" +>>>>>>> Bug fixes in openapi file type: string Intent: description: Intent of a user. Used in the discovery stage for declaring the intent of the user. BAP can declare the intent of the consumer including <ul><li>What they want (A product, service, offer)</li><li>Who they want (A seller, service provider, agent etc)</li><li>Where they want it and where they want it from</li><li>When they want it (start and end time of fulfillment</li><li>How they want to pay for it</li></ul><br>This has properties like descriptor,provider,fulfillment,payment,category,offer,item,tags<br>This is typically used by the BAP to send the purpose of the user's search to the BPP. This will be used by the BPP to find products or services it offers that may match the user's intent.<br>For example, in Mobility, the mobility consumer declares a mobility intent. In this case, the mobility consumer declares information that describes various aspects of their journey like,<ul><li>Where would they like to begin their journey (intent.fulfillment.start.location)</li><li>Where would they like to end their journey (intent.fulfillment.end.location)</li><li>When would they like to begin their journey (intent.fulfillment.start.time)</li><li>When would they like to end their journey (intent.fulfillment.end.time)</li><li>Who is the transport service provider they would like to avail services from (intent.provider)</li><li>Who is traveling (This is not recommended in public networks) (intent.fulfillment.customer)</li><li>What kind of fare product would they like to purchase (intent.item)</li><li>What add-on services would they like to avail</li><li>What offers would they like to apply on their booking (intent.offer)</li><li>What category of services would they like to avail (intent.category)</li><li>What additional luggage are they carrying</li><li>How would they like to pay for their journey (intent.payment)</li></ul><br>For example, in health domain, a consumer declares the intent for a lab booking the describes various aspects of their booking like,<ul><li>Where would they like to get their scan/test done (intent.fulfillment.start.location)</li><li>When would they like to get their scan/test done (intent.fulfillment.start.time)</li><li>When would they like to get the results of their test/scan (intent.fulfillment.end.time)</li><li>Who is the service provider they would like to avail services from (intent.provider)</li><li>Who is getting the test/scan (intent.fulfillment.customer)</li><li>What kind of test/scan would they like to purchase (intent.item)</li><li>What category of services would they like to avail (intent.category)</li><li>How would they like to pay for their journey (intent.payment)</li></ul> type: object properties: descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" provider: - $ref: '#/components/schemas/Provider' + $ref: "#/components/schemas/Provider" fulfillment: - $ref: '#/components/schemas/Fulfillment' + $ref: "#/components/schemas/Fulfillment" payment: - $ref: '#/components/schemas/Payment' + $ref: "#/components/schemas/Payment" category: - $ref: '#/components/schemas/Category' + $ref: "#/components/schemas/Category" offer: - $ref: '#/components/schemas/Offer' + $ref: "#/components/schemas/Offer" item: - $ref: '#/components/schemas/Item' + $ref: "#/components/schemas/Item" tags: - $ref: '#/components/schemas/Tags' - + $ref: "#/components/schemas/Tags" + ItemQuantity: description: Describes the count or amount of an item<br>This has properties like allocated,available,maximum,minimum,selected type: object @@ -1916,7 +1925,7 @@ components: type: integer minimum: 0 measure: - $ref: '#/components/schemas/Scalar' + $ref: "#/components/schemas/Scalar" available: type: object properties: @@ -1924,7 +1933,7 @@ components: type: integer minimum: 0 measure: - $ref: '#/components/schemas/Scalar' + $ref: "#/components/schemas/Scalar" maximum: type: object properties: @@ -1932,7 +1941,7 @@ components: type: integer minimum: 1 measure: - $ref: '#/components/schemas/Scalar' + $ref: "#/components/schemas/Scalar" minimum: type: object properties: @@ -1940,7 +1949,7 @@ components: type: integer minimum: 0 measure: - $ref: '#/components/schemas/Scalar' + $ref: "#/components/schemas/Scalar" selected: type: object properties: @@ -1948,7 +1957,7 @@ components: type: integer minimum: 0 measure: - $ref: '#/components/schemas/Scalar' + $ref: "#/components/schemas/Scalar" Item: description: Describes a product or a service offered to the end consumer by the provider. In the mobility domain item can represent a fare product like one way journey while in the logistics domain it can represent the delivery service offering while in the local retail domain it can represent a product like a grocery item.<br>This has properties like id,parent_item_id,descriptor,price,category_id,fulfillment_id,rating,time,location_id,time,rateable,matched,related,recommended, tags<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP sends the catalog of products or services it offers to the BAP in the items array</li><li>This is typically used in the order stage when the BAP sends the details of the item the user wants to purchase</li><li>This is typically used in the fulfillment stage when the BPP/BAP sends the order object containing the details of the products or services purchased in the order</li></ul> type: object @@ -1957,27 +1966,27 @@ components: description: This is the most unique identifier of a service item. An example of an Item ID could be the SKU of a product. type: string parent_item_id: - $ref: '#/components/schemas/Item/properties/id' + $ref: "#/components/schemas/Item/properties/id" descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" price: - $ref: '#/components/schemas/Price' + $ref: "#/components/schemas/Price" quantity: - $ref: '#/components/schemas/ItemQuantity' + $ref: "#/components/schemas/ItemQuantity" category_id: - $ref: '#/components/schemas/Category/properties/id' + $ref: "#/components/schemas/Category/properties/id" fulfillment_id: - $ref: '#/components/schemas/Fulfillment/properties/id' + $ref: "#/components/schemas/Fulfillment/properties/id" rating: - $ref: '#/components/schemas/Rating/properties/value' + $ref: "#/components/schemas/Rating/properties/value" location_id: - $ref: '#/components/schemas/Location/properties/id' + $ref: "#/components/schemas/Location/properties/id" payment_id: - $ref: '#/components/schemas/Payment/properties/id' + $ref: "#/components/schemas/Payment/properties/id" time: - $ref: '#/components/schemas/Time' + $ref: "#/components/schemas/Time" rateable: - $ref: '#/components/schemas/Rateable' + $ref: "#/components/schemas/Rateable" matched: type: boolean related: @@ -1985,7 +1994,7 @@ components: recommended: type: boolean tags: - $ref: '#/components/schemas/Tags' + $ref: "#/components/schemas/Tags" Language: description: Describes a specific language using a language code.<br>This has properties like code @@ -2001,29 +2010,42 @@ components: id: type: string descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" gps: - $ref: '#/components/schemas/Gps' + $ref: "#/components/schemas/Gps" address: - $ref: '#/components/schemas/Address' + $ref: "#/components/schemas/Address" station_code: type: string city: - $ref: '#/components/schemas/City' + $ref: "#/components/schemas/City" country: - $ref: '#/components/schemas/Country' + $ref: "#/components/schemas/Country" circle: - $ref: '#/components/schemas/Circle' + $ref: "#/components/schemas/Circle" polygon: type: string 3dspace: type: string time: - $ref: '#/components/schemas/Time' + $ref: "#/components/schemas/Time" + +<<<<<<< HEAD +======= + Organization: + type: object + properties: + descriptor: + $ref: "#/components/schemas/Descriptor" + address: + $ref: "#/components/schemas/Address" + contact: + $ref: "#/components/schemas/Contact" +>>>>>>> Bug fixes in openapi file Name: type: string - description: 'Describes the name of a person' + description: "Describes the name of a person" Offer: description: Describes how a product or a service will be rendered at a reduced price to the user<br>This has properties like id,descriptor,location_ids,category_ids,item_ids,time @@ -2032,21 +2054,21 @@ components: id: type: string descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" location_ids: type: array items: - $ref: '#/components/schemas/Location/properties/id' + $ref: "#/components/schemas/Location/properties/id" category_ids: type: array items: - $ref: '#/components/schemas/Category/properties/id' + $ref: "#/components/schemas/Category/properties/id" item_ids: type: array items: - $ref: '#/components/schemas/Item/properties/id' + $ref: "#/components/schemas/Item/properties/id" time: - $ref: '#/components/schemas/Time' + $ref: "#/components/schemas/Time" Operator: description: Describes the agent of a service @@ -2070,7 +2092,7 @@ components: id: type: string descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" Order: description: Describes an order which contains the terms, details, status and identifier of a transaction between a BAP and a BPP. This is usually an exchange of goods or services for money.<br>This has properties like id,state,provider,items,add_ons,offers,documents,billings,fulfillment,quote,payment,created_at,updated_at<br>This is used in the following situations.<br><ul><li>This is typically used in the order stage when the BAP sends the details of the order it wishes to create</li><li>This is typically used in the fulfillment stage when the BPP/BAP sends the order details</li></ul> @@ -2082,41 +2104,41 @@ components: state: type: string provider: - $ref: '#/components/schemas/Provider' + $ref: "#/components/schemas/Provider" items: type: array items: - $ref: '#/components/schemas/Item' + $ref: "#/components/schemas/Item" add_ons: type: array items: - $ref: '#/components/schemas/AddOn' + $ref: "#/components/schemas/AddOn" offers: type: array items: - $ref: '#/components/schemas/Offer' + $ref: "#/components/schemas/Offer" documents: type: array items: - $ref: '#/components/schemas/Document' + $ref: "#/components/schemas/Document" billing: - $ref: '#/components/schemas/Billing' + $ref: "#/components/schemas/Billing" fulfillments: type: array items: - $ref: '#/components/schemas/Fulfillment' + $ref: "#/components/schemas/Fulfillment" cancellation_terms: - $ref: '#/components/schemas/CancellationTerms' + $ref: "#/components/schemas/CancellationTerms" return_terms: - $ref: '#/components/schemas/ReturnTerms' + $ref: "#/components/schemas/ReturnTerms" replacement_terms: - $ref: '#/components/schemas/ReplacementTerms' + $ref: "#/components/schemas/ReplacementTerms" update_terms: - $ref: '#/components/schemas/UpdateTerms' + $ref: "#/components/schemas/UpdateTerms" quote: - $ref: '#/components/schemas/Quotation' + $ref: "#/components/schemas/Quotation" payment: - $ref: '#/components/schemas/Payment' + $ref: "#/components/schemas/Payment" created_at: type: string format: date-time @@ -2142,7 +2164,7 @@ components: type: string next_id: type: string - + Payload: type: object properties: @@ -2153,7 +2175,7 @@ components: type: string list: items: - $ref: '#/components/schemas/Person' + $ref: "#/components/schemas/Person" cargo: type: object properties: @@ -2161,15 +2183,17 @@ components: type: string list: items: - $ref: '#/components/schemas/CargoItem' + $ref: "#/components/schemas/CargoItem" Payment: description: Describes the payment mechanism to be used for the order.<br>This has properties like uri,tl_method,params,type,status,time. For more info please check BECKN-RFC-002 <a href="https://github.com/beckn/protocol-specifications/blob/core-0.9.4-draft/docs/protocol-drafts/BECKN-002-Payments-On-Beckn-Enabled-Networks.md">Payments on Beckn-Enabled Networks</a> type: object properties: + id: + type: string uri: type: string - description: 'A payment uri to be called by the BAP. If empty, then the payment is to be done offline. The details of payment should be present in the params object. If ```tl_method``` = http/get, then the payment details will be sent as url params. Two url param values, ```$transaction_id``` and ```$amount``` are mandatory. And example url would be : https://www.example.com/pay?txid=$transaction_id&amount=$amount&vpa=upiid&payee=shopez&billno=1234' + description: "A payment uri to be called by the BAP. If empty, then the payment is to be done offline. The details of payment should be present in the params object. If ```tl_method``` = http/get, then the payment details will be sent as url params. Two url param values, ```$transaction_id``` and ```$amount``` are mandatory. And example url would be : https://www.example.com/pay?txid=$transaction_id&amount=$amount&vpa=upiid&payee=shopez&billno=1234" format: uri params: type: object @@ -2180,9 +2204,9 @@ components: transaction_status: type: string amount: - $ref: '#/components/schemas/Price/properties/value' + $ref: "#/components/schemas/Price/properties/value" currency: - $ref: '#/components/schemas/Price/properties/currency' + $ref: "#/components/schemas/Price/properties/currency" bank_code: type: string bank_account_number: @@ -2202,7 +2226,7 @@ components: - PAID - NOT-PAID time: - $ref: '#/components/schemas/Time' + $ref: "#/components/schemas/Time" Person: description: Describes a person as any individual<br>This has the properties like name,image,dob,gender,cred,tags @@ -2212,21 +2236,21 @@ components: type: string description: Describes the identity of the person name: - $ref: '#/components/schemas/Name' + $ref: "#/components/schemas/Name" image: - $ref: '#/components/schemas/Image' + $ref: "#/components/schemas/Image" dob: type: string format: date gender: type: string - description: 'Gender of something, typically a Person, but possibly also fictional characters, animals, etc. While Male and Female may be used, text strings are also acceptable for people who do not identify as a binary gender' + description: "Gender of something, typically a Person, but possibly also fictional characters, animals, etc. While Male and Female may be used, text strings are also acceptable for people who do not identify as a binary gender" creds: type: array items: - $ref: '#/components/schemas/Credential' + $ref: "#/components/schemas/Credential" tags: - $ref: '#/components/schemas/Tags' + $ref: "#/components/schemas/Tags" Policy: description: Describes a policy.<br>This has properties like id_description,parent_policy_id,time @@ -2235,11 +2259,11 @@ components: id: type: string descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" parent_policy_id: - $ref: '#/components/schemas/Policy/properties/id' + $ref: "#/components/schemas/Policy/properties/id" time: - $ref: '#/components/schemas/Time' + $ref: "#/components/schemas/Time" Price: description: Describes the price of a product or service<br>This has properties like currency_value,estimated_value,computed_value,listed_value,offered_value,Minimum_value,maximum_value @@ -2248,80 +2272,84 @@ components: currency: type: string value: - $ref: '#/components/schemas/DecimalValue' + $ref: "#/components/schemas/DecimalValue" estimated_value: - $ref: '#/components/schemas/DecimalValue' + $ref: "#/components/schemas/DecimalValue" computed_value: - $ref: '#/components/schemas/DecimalValue' + $ref: "#/components/schemas/DecimalValue" listed_value: - $ref: '#/components/schemas/DecimalValue' + $ref: "#/components/schemas/DecimalValue" offered_value: - $ref: '#/components/schemas/DecimalValue' + $ref: "#/components/schemas/DecimalValue" minimum_value: - $ref: '#/components/schemas/DecimalValue' + $ref: "#/components/schemas/DecimalValue" maximum_value: - $ref: '#/components/schemas/DecimalValue' - + $ref: "#/components/schemas/DecimalValue" + Provider: +<<<<<<< HEAD description: Describes a service provider. This can be a restaurant, a hospital, a Store etc<br>This has properties like id,descriptor,category_id,rating,time,categories,fulfillment,payments,locations,offers,items,exp,rateables,tags +======= + description: "Describes a service provider. This can be a restaurant, a hospital, a Store etc" +>>>>>>> Bug fixes in openapi file type: object properties: id: type: string - description: 'Id of the provider' + description: "Id of the provider" descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" category_id: type: string - description: 'Category Id of the provider' + description: "Category Id of the provider" rating: - $ref: '#/components/schemas/Rating/properties/value' + $ref: "#/components/schemas/Rating/properties/value" time: - $ref: '#/components/schemas/Time' + $ref: "#/components/schemas/Time" categories: type: array items: - $ref: '#/components/schemas/Category' + $ref: "#/components/schemas/Category" fulfillments: type: array items: - $ref: '#/components/schemas/Fulfillment' + $ref: "#/components/schemas/Fulfillment" payments: type: array items: - $ref: '#/components/schemas/Payment' + $ref: "#/components/schemas/Payment" locations: type: array items: allOf: - - $ref: '#/components/schemas/Location' - - type: object - properties: - rateable: - $ref: '#/components/schemas/Rateable' + - $ref: "#/components/schemas/Location" + - type: object + properties: + rateable: + $ref: "#/components/schemas/Rateable" offers: type: array items: - $ref: '#/components/schemas/Offer' + $ref: "#/components/schemas/Offer" items: type: array items: - $ref: '#/components/schemas/Item' + $ref: "#/components/schemas/Item" exp: type: string description: Time after which catalog has to be refreshed format: date-time rateable: - $ref: '#/components/schemas/Rateable' + $ref: "#/components/schemas/Rateable" tags: - $ref: '#/components/schemas/Tags' + $ref: "#/components/schemas/Tags" Quotation: description: Describes a quote. It is the estimated price of products or services from the BPP.<br>This has properties like price, breakup, ttl type: object properties: price: - $ref: '#/components/schemas/Price' + $ref: "#/components/schemas/Price" breakup: type: array items: @@ -2330,9 +2358,9 @@ components: title: type: string price: - $ref: '#/components/schemas/Price' + $ref: "#/components/schemas/Price" ttl: - $ref: '#/components/schemas/Duration' + $ref: "#/components/schemas/Duration" Rateable: description: Describes if the entity can be rated or not @@ -2351,7 +2379,7 @@ components: value: description: Rating value given to the object type: string - + RatingAck: description: Describes the acknowledgement that feedback or rating has been recorded by the BPP.<br> type: object @@ -2405,18 +2433,18 @@ components: - CONSTANT - VARIABLE value: - $ref: '#/components/schemas/DecimalValue' + $ref: "#/components/schemas/DecimalValue" estimated_value: - type: '#/components/schemas/DecimalValue' + $ref: "#/components/schemas/DecimalValue" computed_value: - type: '#/components/schemas/DecimalValue' + $ref: "#/components/schemas/DecimalValue" range: type: object properties: min: - type: '#/components/schemas/DecimalValue' + $ref: "#/components/schemas/DecimalValue" max: - type: '#/components/schemas/DecimalValue' + $ref: "#/components/schemas/DecimalValue" unit: type: string @@ -2425,7 +2453,7 @@ components: type: object properties: frequency: - $ref: '#/components/schemas/Duration' + $ref: "#/components/schemas/Duration" holidays: type: array items: @@ -2442,7 +2470,7 @@ components: type: object properties: descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" updated_at: type: string format: date-time @@ -2452,7 +2480,11 @@ components: Subscriber: type: object +<<<<<<< HEAD description: Any entity which wants to authenticate itself on a network. This can be a BAP, BPP, BG, BPPR or a BGR.<br>This has properties like subscriber_id,type, cb_url,domain, city, country, sigining_public_key, encryption_public_key,status,created, updated expiries +======= + description: "Any entity which wants to authenticate itself on a network. This can be a BAP, BPP, BG, BPPR or a BGR." +>>>>>>> Bug fixes in openapi file properties: subscriber_id: type: string @@ -2469,11 +2501,11 @@ components: type: string description: Callback URL of the subscriber. The Registry will call this URL's on_subscribe API to validate the subscriber\'s credentials domain: - $ref: '#/components/schemas/Domain' + $ref: "#/components/schemas/Domain" city: - $ref: '#/components/schemas/City/properties/code' + $ref: "#/components/schemas/City/properties/code" country: - $ref: '#/components/schemas/Country/properties/code' + $ref: "#/components/schemas/Country/properties/code" signing_public_key: type: string description: 'Signing Public key of the subscriber. <br/><br/>Any subscriber platform (BAP, BPP, BG) who wants to transact on the network must digitally sign the ```requestBody``` using the corresponding private key of this public key and send it in the transport layer header. In case of ```HTTP``` it is the ```Authorization``` header. <br><br/>The ```Authorization``` will be used to validate the signature of a BAP or BPP.<br/><br/>Furthermore, if an API call is being proxied or multicast by a Beckn Gateway, the BG must use it\''s signing key to digitally sign the ```requestBody``` using the corresponding private key of this public key and send it in the ```X-Gateway-Authorization``` header.' @@ -2513,8 +2545,8 @@ components: ref_id: type: string channels: - $ref: '#/components/schemas/Tags' - + $ref: "#/components/schemas/Tags" + Tags: description: Describes a tag. This is a simple key-value store which is used to contain extended metadata additionalProperties: @@ -2530,7 +2562,7 @@ components: type: string format: date-time duration: - $ref: '#/components/schemas/Duration' + $ref: "#/components/schemas/Duration" range: type: object properties: @@ -2544,11 +2576,16 @@ components: type: string description: comma separated values representing days of the week schedule: - $ref: '#/components/schemas/Schedule' + $ref: "#/components/schemas/Schedule" TrackingData: +<<<<<<< HEAD description: Describes tracking data information to know the status of an object/process or live locations/actions of object and tracking activity<br>This has the GPS coordinates properties $ref: '#/components/schemas/Location/properties/gps' +======= + description: Describes tracking data object during live tracking of an order + $ref: "#/components/schemas/Location/properties/gps" +>>>>>>> Bug fixes in openapi file Tracking: description: Describes as tracking which is useful for knowing the location of time sensitive deliveries.<br>This has properties like URL and status of the object From 8021ccd30e5fbfb1bb64d3c34c0a3ac77dfe2fd8 Mon Sep 17 00:00:00 2001 From: Venky <venkatramanm@gmail.com> Date: Thu, 21 Jul 2022 17:34:50 +0530 Subject: [PATCH 166/183] Schema fixes --- core/v0/api/core.yaml | 67 +++++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index ba66847f..8818a8aa 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -32,7 +32,7 @@ paths: - context - message responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -76,7 +76,7 @@ paths: - message responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -119,7 +119,7 @@ paths: - context - message responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -162,7 +162,7 @@ paths: - context - message responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -205,7 +205,7 @@ paths: - context - message responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -251,7 +251,7 @@ paths: - context - message responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -298,7 +298,7 @@ paths: - context - message responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -345,7 +345,7 @@ paths: - context - message responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -383,7 +383,7 @@ paths: - context - message responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -426,7 +426,7 @@ paths: - context - message responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -472,7 +472,7 @@ paths: required: - context responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -489,7 +489,7 @@ paths: error: $ref: "#/components/schemas/Error" required: - - context + - message /on_select: post: tags: @@ -514,7 +514,7 @@ paths: required: - context responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -558,7 +558,7 @@ paths: required: - context responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -602,7 +602,7 @@ paths: required: - context responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -646,7 +646,7 @@ paths: required: - context responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -690,7 +690,7 @@ paths: required: - context responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -734,7 +734,7 @@ paths: required: - context responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -778,7 +778,7 @@ paths: required: - context responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -820,7 +820,7 @@ paths: required: - context responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -869,7 +869,7 @@ paths: required: - context responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -903,7 +903,7 @@ paths: context: $ref: "#/components/schemas/Context" responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -944,7 +944,7 @@ paths: items: $ref: "#/components/schemas/Option" responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -978,7 +978,7 @@ paths: context: $ref: "#/components/schemas/Context" responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -1016,7 +1016,7 @@ paths: items: $ref: "#/components/schemas/Option" responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -1050,7 +1050,7 @@ paths: context: $ref: "#/components/schemas/Context" responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -1088,7 +1088,7 @@ paths: items: $ref: "#/components/schemas/Rating/properties/rating_category" responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -1122,7 +1122,7 @@ paths: context: $ref: "#/components/schemas/Context" responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -1160,7 +1160,7 @@ paths: items: $ref: "#/components/schemas/Rating/properties/rating_category" responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -1201,7 +1201,7 @@ paths: rating_category: $ref: "#/components/schemas/Rating/properties/rating_category" responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -1238,7 +1238,7 @@ paths: $ref: "#/components/schemas/Feedback" responses: - "200": + 'default': description: Acknowledgement of message received content: application/json: @@ -1269,7 +1269,6 @@ components: in: header name: X-Gateway-Authorization description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code>' - schemas: Ack: description: Describes the acknowledgement message a BPP, BAP or BG sends as response to any beckn API calls. This can represent the acknowledged or not acknowledged status response.<br>This has one property status<br>This schema is used in the response of all the beckn API calls<br>This is used to convey the acknowledgement status of a beckn API call received by a network participant. If the network participant received the API call successfully and has validated the request is as per protocol specifications and signature verified it can send back an ACK as status. Or else it will send NACK as status. The validation done at this point is only technical in nature (validating if the schema is as per specification, if the signature and caller is valid, if the endpoint itself is implemented) and no functional validation (as per business logic) needs to be done before sending this. @@ -1574,7 +1573,7 @@ components: description: Version of Beckn core API specification being used bap_id: type: string - format: uri + # format: uri description: Unique id of the BAP. By default it is the fully qualified domain name of the BAP bap_uri: type: string @@ -1582,7 +1581,7 @@ components: description: URI of the BAP for accepting callbacks. Must have the same domain name as the bap_id bpp_id: type: string - format: uri + # format: uri description: Unique id of the BPP. By default it is the fully qualified domain name of the BPP bpp_uri: type: string From 40505707e8f70e0218993af9b16db7a9d4eecc36 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 08:21:13 +0530 Subject: [PATCH 167/183] Removed merge conflicts --- core/v0/api/core.yaml | 104 ++++++++++++++---------------------------- 1 file changed, 34 insertions(+), 70 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 8818a8aa..417048fc 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -32,7 +32,7 @@ paths: - context - message responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -76,7 +76,7 @@ paths: - message responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -119,7 +119,7 @@ paths: - context - message responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -162,7 +162,7 @@ paths: - context - message responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -205,7 +205,7 @@ paths: - context - message responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -251,7 +251,7 @@ paths: - context - message responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -298,7 +298,7 @@ paths: - context - message responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -345,7 +345,7 @@ paths: - context - message responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -383,7 +383,7 @@ paths: - context - message responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -426,7 +426,7 @@ paths: - context - message responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -472,7 +472,7 @@ paths: required: - context responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -489,7 +489,7 @@ paths: error: $ref: "#/components/schemas/Error" required: - - message + - context /on_select: post: tags: @@ -514,7 +514,7 @@ paths: required: - context responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -558,7 +558,7 @@ paths: required: - context responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -602,7 +602,7 @@ paths: required: - context responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -646,7 +646,7 @@ paths: required: - context responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -690,7 +690,7 @@ paths: required: - context responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -734,7 +734,7 @@ paths: required: - context responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -778,7 +778,7 @@ paths: required: - context responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -820,7 +820,7 @@ paths: required: - context responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -869,7 +869,7 @@ paths: required: - context responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -903,7 +903,7 @@ paths: context: $ref: "#/components/schemas/Context" responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -944,7 +944,7 @@ paths: items: $ref: "#/components/schemas/Option" responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -978,7 +978,7 @@ paths: context: $ref: "#/components/schemas/Context" responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -1016,7 +1016,7 @@ paths: items: $ref: "#/components/schemas/Option" responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -1050,7 +1050,7 @@ paths: context: $ref: "#/components/schemas/Context" responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -1088,7 +1088,7 @@ paths: items: $ref: "#/components/schemas/Rating/properties/rating_category" responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -1122,7 +1122,7 @@ paths: context: $ref: "#/components/schemas/Context" responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -1160,7 +1160,7 @@ paths: items: $ref: "#/components/schemas/Rating/properties/rating_category" responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -1201,7 +1201,7 @@ paths: rating_category: $ref: "#/components/schemas/Rating/properties/rating_category" responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -1238,7 +1238,7 @@ paths: $ref: "#/components/schemas/Feedback" responses: - 'default': + "200": description: Acknowledgement of message received content: application/json: @@ -1269,6 +1269,7 @@ components: in: header name: X-Gateway-Authorization description: 'Signature of message body + BAP/BPP''s Authorization header using BG''s signing public key. Format:<br/><br/><code>X-Gateway-Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(signing string)"</code>' + schemas: Ack: description: Describes the acknowledgement message a BPP, BAP or BG sends as response to any beckn API calls. This can represent the acknowledged or not acknowledged status response.<br>This has one property status<br>This schema is used in the response of all the beckn API calls<br>This is used to convey the acknowledgement status of a beckn API call received by a network participant. If the network participant received the API call successfully and has validated the request is as per protocol specifications and signature verified it can send back an ACK as status. Or else it will send NACK as status. The validation done at this point is only technical in nature (validating if the schema is as per specification, if the signature and caller is valid, if the endpoint itself is implemented) and no functional validation (as per business logic) needs to be done before sending this. @@ -1573,7 +1574,7 @@ components: description: Version of Beckn core API specification being used bap_id: type: string - # format: uri + format: uri description: Unique id of the BAP. By default it is the fully qualified domain name of the BAP bap_uri: type: string @@ -1581,7 +1582,7 @@ components: description: URI of the BAP for accepting callbacks. Must have the same domain name as the bap_id bpp_id: type: string - # format: uri + format: uri description: Unique id of the BPP. By default it is the fully qualified domain name of the BPP bpp_uri: type: string @@ -1749,17 +1750,10 @@ components: feedback_form: $ref: "#/components/schemas/FeedbackForm" feedback_url: -<<<<<<< HEAD - $ref: '#/components/schemas/FeedbackUrl' - - FeedbackForm: - description: Describes a feedback form that a BPP can send to get feedback from the BAP. The BAP render this and will send the response of the form in this same structure.<br>This has properties like description,id,parent_id,question,answer,answer_type<br>This is used in the following situations.<br><ul><li>This is typically used in the post fulfillment stage when a BAP sends feedback for a service or product or a fulfillment agent provided by the BPP in a feedback form</li><li>This is typically used in the post fulfillment stage when the BPP sends the feedback form that needs to be used by the BAP</li></ul> -======= $ref: "#/components/schemas/FeedbackUrl" FeedbackForm: description: Describes a feedback form that a BPP can send to get feedback from the BAP ->>>>>>> Bug fixes in openapi file type: array items: $ref: "#/components/schemas/FeedbackFormElement" @@ -1886,11 +1880,7 @@ components: type: string pattern: '^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$' Image: -<<<<<<< HEAD - description: 'Image of an object. <br/><br/> A url based image will look like <br/><br/>```uri:https://path/to/image``` <br/><br/> An image can also be sent as a data string. For example : <br/><br/> ```data:js87y34ilhriuho84r3i4```' -======= description: "Image of an object. <br/><br/> A url based image will look like <br/><br/>```uri:http://path/to/image``` <br/><br/> An image can also be sent as a data string. For example : <br/><br/> ```data:js87y34ilhriuho84r3i4```" ->>>>>>> Bug fixes in openapi file type: string Intent: description: Intent of a user. Used in the discovery stage for declaring the intent of the user. BAP can declare the intent of the consumer including <ul><li>What they want (A product, service, offer)</li><li>Who they want (A seller, service provider, agent etc)</li><li>Where they want it and where they want it from</li><li>When they want it (start and end time of fulfillment</li><li>How they want to pay for it</li></ul><br>This has properties like descriptor,provider,fulfillment,payment,category,offer,item,tags<br>This is typically used by the BAP to send the purpose of the user's search to the BPP. This will be used by the BPP to find products or services it offers that may match the user's intent.<br>For example, in Mobility, the mobility consumer declares a mobility intent. In this case, the mobility consumer declares information that describes various aspects of their journey like,<ul><li>Where would they like to begin their journey (intent.fulfillment.start.location)</li><li>Where would they like to end their journey (intent.fulfillment.end.location)</li><li>When would they like to begin their journey (intent.fulfillment.start.time)</li><li>When would they like to end their journey (intent.fulfillment.end.time)</li><li>Who is the transport service provider they would like to avail services from (intent.provider)</li><li>Who is traveling (This is not recommended in public networks) (intent.fulfillment.customer)</li><li>What kind of fare product would they like to purchase (intent.item)</li><li>What add-on services would they like to avail</li><li>What offers would they like to apply on their booking (intent.offer)</li><li>What category of services would they like to avail (intent.category)</li><li>What additional luggage are they carrying</li><li>How would they like to pay for their journey (intent.payment)</li></ul><br>For example, in health domain, a consumer declares the intent for a lab booking the describes various aspects of their booking like,<ul><li>Where would they like to get their scan/test done (intent.fulfillment.start.location)</li><li>When would they like to get their scan/test done (intent.fulfillment.start.time)</li><li>When would they like to get the results of their test/scan (intent.fulfillment.end.time)</li><li>Who is the service provider they would like to avail services from (intent.provider)</li><li>Who is getting the test/scan (intent.fulfillment.customer)</li><li>What kind of test/scan would they like to purchase (intent.item)</li><li>What category of services would they like to avail (intent.category)</li><li>How would they like to pay for their journey (intent.payment)</li></ul> @@ -2029,19 +2019,6 @@ components: time: $ref: "#/components/schemas/Time" -<<<<<<< HEAD -======= - Organization: - type: object - properties: - descriptor: - $ref: "#/components/schemas/Descriptor" - address: - $ref: "#/components/schemas/Address" - contact: - $ref: "#/components/schemas/Contact" - ->>>>>>> Bug fixes in openapi file Name: type: string description: "Describes the name of a person" @@ -2286,11 +2263,7 @@ components: $ref: "#/components/schemas/DecimalValue" Provider: -<<<<<<< HEAD description: Describes a service provider. This can be a restaurant, a hospital, a Store etc<br>This has properties like id,descriptor,category_id,rating,time,categories,fulfillment,payments,locations,offers,items,exp,rateables,tags -======= - description: "Describes a service provider. This can be a restaurant, a hospital, a Store etc" ->>>>>>> Bug fixes in openapi file type: object properties: id: @@ -2479,11 +2452,7 @@ components: Subscriber: type: object -<<<<<<< HEAD description: Any entity which wants to authenticate itself on a network. This can be a BAP, BPP, BG, BPPR or a BGR.<br>This has properties like subscriber_id,type, cb_url,domain, city, country, sigining_public_key, encryption_public_key,status,created, updated expiries -======= - description: "Any entity which wants to authenticate itself on a network. This can be a BAP, BPP, BG, BPPR or a BGR." ->>>>>>> Bug fixes in openapi file properties: subscriber_id: type: string @@ -2578,13 +2547,8 @@ components: $ref: "#/components/schemas/Schedule" TrackingData: -<<<<<<< HEAD description: Describes tracking data information to know the status of an object/process or live locations/actions of object and tracking activity<br>This has the GPS coordinates properties $ref: '#/components/schemas/Location/properties/gps' -======= - description: Describes tracking data object during live tracking of an order - $ref: "#/components/schemas/Location/properties/gps" ->>>>>>> Bug fixes in openapi file Tracking: description: Describes as tracking which is useful for knowing the location of time sensitive deliveries.<br>This has properties like URL and status of the object From 249e9a63fdbf1c07d9624171cb2fba1cdd04a519 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:00:39 +0530 Subject: [PATCH 168/183] Added default reponse codes instead of 200, removed format:uri in bap_id --- core/v0/api/core.yaml | 62 +++++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 32 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 417048fc..25895c45 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -32,7 +32,7 @@ paths: - context - message responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -76,7 +76,7 @@ paths: - message responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -119,7 +119,7 @@ paths: - context - message responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -162,7 +162,7 @@ paths: - context - message responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -205,7 +205,7 @@ paths: - context - message responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -251,7 +251,7 @@ paths: - context - message responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -298,7 +298,7 @@ paths: - context - message responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -345,7 +345,7 @@ paths: - context - message responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -383,7 +383,7 @@ paths: - context - message responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -426,7 +426,7 @@ paths: - context - message responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -472,7 +472,7 @@ paths: required: - context responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -514,7 +514,7 @@ paths: required: - context responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -558,7 +558,7 @@ paths: required: - context responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -602,7 +602,7 @@ paths: required: - context responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -646,7 +646,7 @@ paths: required: - context responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -690,7 +690,7 @@ paths: required: - context responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -734,7 +734,7 @@ paths: required: - context responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -778,7 +778,7 @@ paths: required: - context responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -820,7 +820,7 @@ paths: required: - context responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -869,7 +869,7 @@ paths: required: - context responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -903,7 +903,7 @@ paths: context: $ref: "#/components/schemas/Context" responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -944,7 +944,7 @@ paths: items: $ref: "#/components/schemas/Option" responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -978,7 +978,7 @@ paths: context: $ref: "#/components/schemas/Context" responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -1016,7 +1016,7 @@ paths: items: $ref: "#/components/schemas/Option" responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -1050,7 +1050,7 @@ paths: context: $ref: "#/components/schemas/Context" responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -1088,7 +1088,7 @@ paths: items: $ref: "#/components/schemas/Rating/properties/rating_category" responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -1122,7 +1122,7 @@ paths: context: $ref: "#/components/schemas/Context" responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -1160,7 +1160,7 @@ paths: items: $ref: "#/components/schemas/Rating/properties/rating_category" responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -1201,7 +1201,7 @@ paths: rating_category: $ref: "#/components/schemas/Rating/properties/rating_category" responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -1238,7 +1238,7 @@ paths: $ref: "#/components/schemas/Feedback" responses: - "200": + default: description: Acknowledgement of message received content: application/json: @@ -1574,7 +1574,6 @@ components: description: Version of Beckn core API specification being used bap_id: type: string - format: uri description: Unique id of the BAP. By default it is the fully qualified domain name of the BAP bap_uri: type: string @@ -1582,7 +1581,6 @@ components: description: URI of the BAP for accepting callbacks. Must have the same domain name as the bap_id bpp_id: type: string - format: uri description: Unique id of the BPP. By default it is the fully qualified domain name of the BPP bpp_uri: type: string From 0413f6d1c17e299264b76c9aa529a2a50cba929f Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:02:15 +0530 Subject: [PATCH 169/183] Added media files as a property in Descriptor --- core/v0/api/core.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 25895c45..1ffceb0d 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1673,6 +1673,10 @@ components: type: string long_desc: type: string + media: + type: array + items: + $ref: "#/components/schemas/MediaFile" images: type: array items: From 500b7454c8c7f68b6dbc48bd415fd2e971787fcf Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:02:51 +0530 Subject: [PATCH 170/183] Added descriptions to ItemQuantity properties --- core/v0/api/core.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 1ffceb0d..c33960a2 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1919,6 +1919,7 @@ components: $ref: "#/components/schemas/Scalar" available: type: object + description: This represents the exact quantity available for purchase of the item. The buyer can only purchase multiples of this properties: count: type: integer @@ -1926,6 +1927,7 @@ components: measure: $ref: "#/components/schemas/Scalar" maximum: + description: This represents the maximum quantity allowed for purchase of the item type: object properties: count: @@ -1934,6 +1936,7 @@ components: measure: $ref: "#/components/schemas/Scalar" minimum: + description: This represents the minimum quantity allowed for purchase of the item type: object properties: count: @@ -1942,6 +1945,7 @@ components: measure: $ref: "#/components/schemas/Scalar" selected: + description: This represents the quantity selected for purchase of the item type: object properties: count: From fd4f9e657029c5caf5af24cb90842e1d65e94011 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:03:50 +0530 Subject: [PATCH 171/183] Added unitized quantity to ItemQuantity to represent quntity available in a single unit of an Item --- core/v0/api/core.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index c33960a2..2971ad53 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1953,6 +1953,17 @@ components: minimum: 0 measure: $ref: "#/components/schemas/Scalar" + unitized: + description: This represents the quantity available in a single unit of the item + type: object + properties: + count: + type: integer + minimum: 1 + maximum: 1 + measure: + $ref: "#/components/schemas/Scalar" + Item: description: Describes a product or a service offered to the end consumer by the provider. In the mobility domain item can represent a fare product like one way journey while in the logistics domain it can represent the delivery service offering while in the local retail domain it can represent a product like a grocery item.<br>This has properties like id,parent_item_id,descriptor,price,category_id,fulfillment_id,rating,time,location_id,time,rateable,matched,related,recommended, tags<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP sends the catalog of products or services it offers to the BAP in the items array</li><li>This is typically used in the order stage when the BAP sends the details of the item the user wants to purchase</li><li>This is typically used in the fulfillment stage when the BPP/BAP sends the order object containing the details of the products or services purchased in the order</li></ul> type: object From 7b89d399e676524804e165e39f3250499b287370 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:04:42 +0530 Subject: [PATCH 172/183] Added mediafile type --- core/v0/api/core.yaml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 2971ad53..cf4b9556 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2036,6 +2036,25 @@ components: time: $ref: "#/components/schemas/Time" + MediaFile: + type: object + properties: + filename: + type: string + mimetype: + description: indicates the nature and format of the document, file, or assortment of bytes. MIME types are defined and standardized in IETF's RFC 6838 + type: string + url: + description: The URL of the document + type: string + format: uri + signature: + description: The digital signature of the file signed by the sender + type: string + dsa: + description: The signing algorithm used by the sender + type: string + Name: type: string description: "Describes the name of a person" From f3a9615bb169be888c1eb5dcd7b1045e77810554 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:05:06 +0530 Subject: [PATCH 173/183] Added double quotes instead of signle quotes in certain places --- core/v0/api/core.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index cf4b9556..74369773 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2162,11 +2162,11 @@ components: type: object properties: descriptor: - $ref: '#/components/schemas/Descriptor' + $ref: "#/components/schemas/Descriptor" address: - $ref: '#/components/schemas/Address' + $ref: "#/components/schemas/Address" contact: - $ref: '#/components/schemas/Contact' + $ref: "#/components/schemas/Contact" Page: description: Describes a page in a search result @@ -2584,7 +2584,7 @@ components: TrackingData: description: Describes tracking data information to know the status of an object/process or live locations/actions of object and tracking activity<br>This has the GPS coordinates properties - $ref: '#/components/schemas/Location/properties/gps' + $ref: "#/components/schemas/Location/properties/gps" Tracking: description: Describes as tracking which is useful for knowing the location of time sensitive deliveries.<br>This has properties like URL and status of the object From 5dd9016e1ddb625f3309f99d817f4bf432f25a2c Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:41:49 +0530 Subject: [PATCH 174/183] Added external refs in cancellation terms --- core/v0/api/core.yaml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 74369773..b4def7eb 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1423,22 +1423,24 @@ components: $ref: "#/components/schemas/Descriptor" CancellationTerms: + description: Describes the cancellation policy of an item or an order. This can be referenced at an item or order level. type: object properties: + id: + description: ID of the cancellation term + type: string cancel_by: type: string format: date-time refund_eligible: type: boolean - refund_percentage: - type: integer - minimum: 0 - maximum: 100 other_terms: type: array items: type: string - + external_ref: + $ref: "#/components/schemas/MediaFile" + CargoItem: type: object properties: From 04030ccbbf7cfed4db569295813ae4a7b3b87f8d Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:42:05 +0530 Subject: [PATCH 175/183] Added confirmation terms --- core/v0/api/core.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index b4def7eb..3527aeaf 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1518,6 +1518,20 @@ components: code: type: string description: City code + + ConfirmationTerms: + description: Describes the terms required to be fulfilled confirm an order + type: object + properties: + req_media: + type: array + items: + $ref: "#/components/schemas/MediaFile" + req_formdata: + $ref: "#/components/schemas/Form" + req_formdata_url: + type: string + format: uri Contact: description: Describes the contact information of an entity including phone number or an email ID<br>This has properties like phone,email,tags<br>This is used to allow the BPP or BAP to send contact details of a person. From edb5ec585d79936da357161b503985cf060a397f Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:42:31 +0530 Subject: [PATCH 176/183] Generalized FeedbackForm to Form --- core/v0/api/core.yaml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 3527aeaf..7cac6305 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1766,29 +1766,30 @@ components: type: object properties: feedback_form: - $ref: "#/components/schemas/FeedbackForm" + $ref: "#/components/schemas/Form" feedback_url: - $ref: "#/components/schemas/FeedbackUrl" + type: string + format: uri - FeedbackForm: + Form: description: Describes a feedback form that a BPP can send to get feedback from the BAP type: array items: - $ref: "#/components/schemas/FeedbackFormElement" + $ref: "#/components/schemas/FormElement" - FeedbackFormElement: + FormElement: description: Describes a single element in the feedback form. It can be question or an answer to the question.<br>This has properties like id,parent_id,question,answer,answer_type type: object properties: id: type: string parent_id: - $ref: "#/components/schemas/FeedbackFormElement/properties/id" + $ref: "#/components/schemas/FormElement/properties/id" question: - description: Specifies the question to which the answer options will be contained in the child FeedbackFormElements + description: Specifies the question to which the answer options will be contained in the child FormElements type: string answer: - description: Specifies an answer option to which the question will be in the FeedbackFormElement specified in parent_id + description: Specifies an answer option to which the question will be in the FormElement specified in parent_id type: string answer_type: description: Specifies how the answer option should be rendered. From 8f48d7c383a4cee99834db792383186cf0f676b1 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:42:53 +0530 Subject: [PATCH 177/183] Removed feedback form url object --- core/v0/api/core.yaml | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 7cac6305..94e86bfc 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1799,30 +1799,6 @@ components: - checkbox - text - FeedbackUrl: - description: Describes the feedback URL that an end customer can use to provide feedback to the BPP for products or services.<br>This has properties like url,tl_method,params<br>This is used in the following situations.<br><ul><li>This is typically used in the post fulfillment stage when the BPP sends the feedback URL that needs to be used by the BAP for providing feedback for a service or product or fulfillment agent</li></ul> - type: object - properties: - url: - description: feedback URL sent by the BPP - type: string - format: uri - tl_method: - type: string - enum: - - http/get - - http/post - params: - type: object - properties: - feedback_id: - type: string - description: This value will be placed in the the $feedback_id url param in case of http/get and in the requestBody http/post requests - additionalProperties: - type: string - required: - - feedback_id - Fulfillment: description: Describes how a single product/service will be rendered/fulfilled to the end customer<br>This has properties like id,type,provider_id,rating,state,tracking, customer,agent,person,contact,vehicle,start,end,rateable,tags<br>This is used in the following situations.<br><ul><li>This is typically used in the discovery stage when the BPP sends the fulfillment terms to the BAP</li><li>This is typically used in the order stage when the BPP sends the fulfillment terms to the BAP</li><li>This is typically used in the fulfillment stage when the BPP sends the status and current details of fulfillment to the BAP</li></ul> type: object From 5ad48abe027e185f67ad068eba9a23eb75da6e58 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:43:13 +0530 Subject: [PATCH 178/183] Added manufacturer property to item --- core/v0/api/core.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 94e86bfc..3f1f2722 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1968,6 +1968,8 @@ components: $ref: "#/components/schemas/Item/properties/id" descriptor: $ref: "#/components/schemas/Descriptor" + manufacturer: + $ref: "#/components/schemas/Organization" price: $ref: "#/components/schemas/Price" quantity: From e7c16ef66b10bbceafd2a83ebfc66aaceab587d6 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:43:48 +0530 Subject: [PATCH 179/183] Added terms to item and order --- core/v0/api/core.yaml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 3f1f2722..bcccfbfa 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -1984,6 +1984,18 @@ components: $ref: "#/components/schemas/Location/properties/id" payment_id: $ref: "#/components/schemas/Payment/properties/id" + confirmation_terms: + $ref: "#/components/schemas/ConfirmationTerms" + cancellation_terms: + $ref: "#/components/schemas/CancellationTerms" + return_terms: + $ref: "#/components/schemas/ReturnTerms" + replacement_terms: + $ref: "#/components/schemas/ReplacementTerms" + refund_terms: + $ref: "#/components/schemas/RefundTerms" + update_terms: + $ref: "#/components/schemas/UpdateTerms" time: $ref: "#/components/schemas/Time" rateable: @@ -2134,10 +2146,14 @@ components: type: array items: $ref: "#/components/schemas/Fulfillment" + confirmation_terms: + $ref: "#/components/schemas/ConfirmationTerms" cancellation_terms: $ref: "#/components/schemas/CancellationTerms" return_terms: $ref: "#/components/schemas/ReturnTerms" + refund_terms: + $ref: "#/components/schemas/RefundTerms" replacement_terms: $ref: "#/components/schemas/ReplacementTerms" update_terms: From cd05e602e20ffeb15158a8d8d2c488dae20173b5 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:44:12 +0530 Subject: [PATCH 180/183] Added refund terms --- core/v0/api/core.yaml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index bcccfbfa..6e5d934a 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2412,9 +2412,29 @@ components: type: string format: uri + RefundTerms: + type: object + properties: + id: + description: ID of the term + type: string + refund_percentage: + type: integer + minimum: 0 + maximum: 100 + other_terms: + type: array + items: + type: string + external_ref: + $ref: "#/components/schemas/MediaFile" + ReplacementTerms: type: object properties: + id: + description: ID of the replacement term + type: string replace_by: type: string format: date-time From b682252810890c50b6bb03d937498a53e9612777 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Wed, 3 Aug 2022 09:44:31 +0530 Subject: [PATCH 181/183] Added id and description --- core/v0/api/core.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index 6e5d934a..da65742e 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2444,10 +2444,16 @@ components: type: array items: type: string + external_ref: + $ref: "#/components/schemas/MediaFile" ReturnTerms: + description: Describes the return policy of an item or an order type: object properties: + id: + description: ID of the return term + type: string return_by: type: string format: date-time @@ -2461,6 +2467,8 @@ components: type: array items: type: string + external_ref: + $ref: "#/components/schemas/MediaFile" Scalar: description: Describes a scalar quantity.<br>This has properties like value, estimated_value, computed_value,range, unit @@ -2633,6 +2641,9 @@ components: UpdateTerms: type: object properties: + id: + type: string + description: ID of the update terms update_by: type: string format: date-time @@ -2640,6 +2651,8 @@ components: type: array items: type: string + external_ref: + $ref: "#/components/schemas/MediaFile" Vehicle: description: Describes a vehicle is a device that is designed or used to transport people or cargo over land, water, air, or through space.<br>This has properties like category, capacity, make, model, size,variant,color,energy_type,registration From fe8a8b79a9eafe6bcddddea006bd6166326537eb Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Thu, 4 Aug 2022 12:36:41 +0530 Subject: [PATCH 182/183] Fix --- core/v0/api/core.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index da65742e..ef3762e4 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -814,7 +814,7 @@ paths: type: object properties: feedback: - $ref: "#/components/schemas/FeedbackForm" + $ref: "#/components/schemas/Form" error: $ref: "#/components/schemas/Error" required: From 54d2bdcc277db79f1a0022b922491997dbdfeb31 Mon Sep 17 00:00:00 2001 From: Ravi Prakash <ravi@beckn.org> Date: Thu, 4 Aug 2022 12:46:19 +0530 Subject: [PATCH 183/183] Fixed version number --- core/v0/api/core.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/v0/api/core.yaml b/core/v0/api/core.yaml index ef3762e4..d947f171 100644 --- a/core/v0/api/core.yaml +++ b/core/v0/api/core.yaml @@ -2,7 +2,7 @@ openapi: 3.0.0 info: title: Beckn Core API description: Beckn Core API specification - version: 1.0.0-draft + version: draft security: - SubscriberAuth: []