openapi: 3.1.1 info: title: Beckn Protocol API description: | The Beckn Protocol API Specification v2.0 — a concrete, developer-friendly OpenAPI 3.1.1 specification with one named path per Beckn protocol action. ## Design Philosophy - **Minimalism**: Transport-layer schemas are inline. All data-model schemas (Catalog, Contract, Intent, etc.) are resolved from #/components/schemas. - **Pragmatism**: Every transaction endpoint carries both `order` (legacy, backward-compatible) and `contract` (new, generalized) in its message envelope via `oneOf`. - **Backward compatibility**: Implementations conformant with previous versions interoperate seamlessly with new implementations using the `contract` model. ## Typical Transaction Lifecycle ``` discover → on_discover select → on_select → init → on_init → confirm → on_confirm → [status / on_status]* → [update / on_update]* → [cancel / on_cancel]? → [track / on_track]* → rate / on_rate → support / on_support ``` ## (NEW) `context.try` — Sandbox Mode The `try` flag on the `Context` object (defined in `#/components/schemas/Context`) indicates a sandbox mode being enabled on the network participant: - `context.try: true` — Request to test an endpoint without liabilities **before** committing. The receiver responds with expected consequences without changing state. - `context.try: false` (default) — Commit the action. This pattern is applicable to `update`, `cancel`, `rate`, and `support` actions. ## Authentication All requests MUST carry a valid Beckn HTTP Signature in the `Authorization` header. The `Ack` response body MUST carry a `CounterSignature` proving receipt. See `docs/10_Signing_Beckn_APIs_in_HTTP.md` for the signing specification. ## Compatibility Scope This specification is designed for interoperability across ALL value-exchange use cases: retail, mobility, logistics, energy, healthcare, skilling, financial services, carbon trading, hiring, data licensing, and any other domain built on Beckn. version: 2.0.0 contact: name: Beckn Protocol url: https://beckn.io license: name: CC-BY-NC-SA 4.0 International url: https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en tags: - name: Discovery description: Discover catalogs across a Beckn network - name: Transaction description: Select, negotiate, confirm and manage contracts/orders - name: Fulfillment description: Track, update and cancel active contracts/orders - name: Post-Fulfillment description: Rate and support completed contracts/orders - name: Catalog Publishing description: Publish catalogs to a Catalog Discovery Service (CDS) # All requests MUST carry a valid Beckn HTTP Signature in the Authorization header. # The securityScheme is informational; actual enforcement is done at the network layer. security: [] paths: # ───────────────────────────────────────────────────────────────────── # DISCOVERY # ───────────────────────────────────────────────────────────────────── /discover: post: summary: Discover catalogs on a network description: | Search and discover catalogs on an open network. Supports text search (textSearch), JSONPath-based filtering (RFC 9535), spatial (geo) constraints, and media search. Returns an **ACK** confirming receipt; actual catalogs arrive via `/beckn/on_discover`. Can be implemented by Catalog Discovery Services (CDS) and BPPs. operationId: discover tags: [Discovery] parameters: - $ref: '#/components/parameters/AuthorizationHeader' requestBody: required: true content: application/json: schema: type: object required: [context, message] properties: context: allOf: - $ref: '#/components/schemas/Context' # TODO: fetch this from schema.beckn.io/Context/v2.0 - type: object properties: action: type: string const: discover message: $ref: '#/components/schemas/DiscoverAction' responses: '200': $ref: '#/components/responses/Ack' '400': $ref: '#/components/responses/NackBadRequest' '401': $ref: '#/components/responses/NackUnauthorized' '409': $ref: '#/components/responses/AckNoCallback' '500': $ref: '#/components/responses/ServerError' /on_discover: post: summary: Callback — return catalogs to the BAP description: | Callback from a BPP or CDS containing catalogs matching the discovery request. Returns an **ACK** confirming receipt of the catalog payload. operationId: onDiscover tags: [Discovery] parameters: - $ref: '#/components/parameters/AuthorizationHeader' requestBody: required: true content: application/json: schema: type: object required: [context, message] properties: context: allOf: - $ref: '#/components/schemas/Context' - type: object properties: action: type: string const: on_discover message: $ref: '#/components/schemas/OnDiscoverAction' responses: '200': $ref: '#/components/responses/Ack' '400': $ref: '#/components/responses/NackBadRequest' '401': $ref: '#/components/responses/NackUnauthorized' '500': $ref: '#/components/responses/ServerError' # ───────────────────────────────────────────────────────────────────── # TRANSACTION — ORDERING # ───────────────────────────────────────────────────────────────────── /select: post: summary: BAP selects items/resources and requests a quote description: | The BAP selects catalog items, item quantities, associated offers, and requests the BPP to provide a priced quote. No PII is shared at this stage. Supports both the legacy `order` and the new `contract` model. operationId: select tags: [Transaction] parameters: - $ref: '#/components/parameters/AuthorizationHeader' requestBody: required: true content: application/json: schema: type: object required: [context, message] properties: context: allOf: - $ref: '#/components/schemas/Context' - type: object properties: action: type: string const: select message: $ref: '#/components/schemas/SelectAction' responses: '200': $ref: '#/components/responses/Ack' '400': $ref: '#/components/responses/NackBadRequest' '401': $ref: '#/components/responses/NackUnauthorized' '409': $ref: '#/components/responses/AckNoCallback' '500': $ref: '#/components/responses/ServerError' /on_select: post: summary: BPP returns a priced quote description: | The BPP calculates the total cost, evaluates offers, and returns a priced quote. Supports both the legacy `order` model and the new `contract` model. operationId: onSelect tags: [Transaction] parameters: - $ref: '#/components/parameters/AuthorizationHeader' requestBody: required: true content: application/json: schema: type: object required: [context, message] properties: context: allOf: - $ref: '#/components/schemas/Context' - type: object properties: action: type: string const: on_select message: $ref: '#/components/schemas/OnSelectAction' responses: '200': $ref: '#/components/responses/Ack' '400': $ref: '#/components/responses/NackBadRequest' '401': $ref: '#/components/responses/NackUnauthorized' '500': $ref: '#/components/responses/ServerError' /init: post: summary: BAP initiates final order — submits billing, fulfillment and payment intent description: | BAP provides billing, fulfillment, and payment information for the BPP to generate final order terms. The BPP responds via `on_init` with the final draft including payment terms. Supports both `order` (legacy) and `contract` (new) models. operationId: init tags: [Transaction] parameters: - $ref: '#/components/parameters/AuthorizationHeader' requestBody: required: true content: application/json: schema: type: object required: [context, message] properties: context: allOf: - $ref: '#/components/schemas/Context' - type: object properties: action: type: string const: init message: $ref: '#/components/schemas/InitAction' responses: '200': $ref: '#/components/responses/Ack' '400': $ref: '#/components/responses/NackBadRequest' '401': $ref: '#/components/responses/NackUnauthorized' '409': $ref: '#/components/responses/AckNoCallback' '500': $ref: '#/components/responses/ServerError' /on_init: post: summary: BPP returns final draft order/contract with payment terms description: | BPP returns the final draft order or contract with personalized payment terms. The BPP MUST NOT request payment before this stage. operationId: onInit tags: [Transaction] parameters: - $ref: '#/components/parameters/AuthorizationHeader' requestBody: required: true content: application/json: schema: type: object required: [context, message] properties: context: allOf: - $ref: '#/components/schemas/Context' - type: object properties: action: type: string const: on_init message: $ref: '#/components/schemas/OnInitAction' responses: '200': $ref: '#/components/responses/Ack' '400': $ref: '#/components/responses/NackBadRequest' '401': $ref: '#/components/responses/NackUnauthorized' '500': $ref: '#/components/responses/ServerError' /confirm: post: summary: BAP confirms the order/contract description: | BAP accepts all terms and provides payment proof/reference, then requests the BPP to confirm the order or contract into a binding commitment. operationId: confirm tags: [Transaction] parameters: - $ref: '#/components/parameters/AuthorizationHeader' requestBody: required: true content: application/json: schema: type: object required: [context, message] properties: context: allOf: - $ref: '#/components/schemas/Context' - type: object properties: action: type: string const: confirm message: $ref: '#/components/schemas/ConfirmAction' responses: '200': $ref: '#/components/responses/Ack' '400': $ref: '#/components/responses/NackBadRequest' '401': $ref: '#/components/responses/NackUnauthorized' '409': $ref: '#/components/responses/AckNoCallback' '500': $ref: '#/components/responses/ServerError' /on_confirm: post: summary: BPP returns the confirmed order/contract description: | BPP validates all terms, payment, and returns a confirmed order or contract with its assigned ID and the initial fulfillment/performance state. operationId: onConfirm tags: [Transaction] parameters: - $ref: '#/components/parameters/AuthorizationHeader' requestBody: required: true content: application/json: schema: type: object required: [context, message] properties: context: allOf: - $ref: '#/components/schemas/Context' - type: object properties: action: type: string const: on_confirm message: $ref: '#/components/schemas/OnConfirmAction' responses: '200': $ref: '#/components/responses/Ack' '400': $ref: '#/components/responses/NackBadRequest' '401': $ref: '#/components/responses/NackUnauthorized' '500': $ref: '#/components/responses/ServerError' # ───────────────────────────────────────────────────────────────────── # FULFILLMENT # ───────────────────────────────────────────────────────────────────── /status: post: summary: BAP requests the current state of an order/contract description: | BAP requests the latest state of an active order or contract by providing its ID. The BPP responds via `on_status`. BAPs SHOULD NOT long-poll with `status` — use `on_status` push notifications for significant state changes. operationId: status tags: [Fulfillment] parameters: - $ref: '#/components/parameters/AuthorizationHeader' requestBody: required: true content: application/json: schema: type: object required: [context, message] properties: context: allOf: - $ref: '#/components/schemas/Context' - type: object properties: action: type: string const: status message: $ref: '#/components/schemas/StatusAction' responses: '200': $ref: '#/components/responses/Ack' '400': $ref: '#/components/responses/NackBadRequest' '401': $ref: '#/components/responses/NackUnauthorized' '409': $ref: '#/components/responses/AckNoCallback' '500': $ref: '#/components/responses/ServerError' /on_status: post: summary: BPP returns the current state of the order/contract description: | BPP returns the latest state of the order or contract including fulfillment/performance updates. The BPP MAY call this endpoint proactively without the BAP requesting it, but MUST have received at least one `status` request first to initiate the push stream. This endpoint is for significant state changes worth a notification — NOT for real-time location tracking (use `track`/`on_track` for that). operationId: onStatus tags: [Fulfillment] parameters: - $ref: '#/components/parameters/AuthorizationHeader' requestBody: required: true content: application/json: schema: type: object required: [context, message] properties: context: allOf: - $ref: '#/components/schemas/Context' - type: object properties: action: type: string const: on_status message: $ref: '#/components/schemas/OnStatusAction' responses: '200': $ref: '#/components/responses/Ack' '400': $ref: '#/components/responses/NackBadRequest' '401': $ref: '#/components/responses/NackUnauthorized' '500': $ref: '#/components/responses/ServerError' /track: post: summary: BAP requests a real-time tracking handle for an active order/contract description: | BAP requests a tracking handle (URL, WebSocket endpoint, or webhook) for real-time tracking of an active fulfillment or performance stage. This is for real-time position/progress updates — NOT for order state change notifications (use `status`). operationId: track tags: [Fulfillment] parameters: - $ref: '#/components/parameters/AuthorizationHeader' requestBody: required: true content: application/json: schema: type: object required: [context, message] properties: context: allOf: - $ref: '#/components/schemas/Context' - type: object properties: action: type: string const: track message: $ref: '#/components/schemas/TrackAction' responses: '200': $ref: '#/components/responses/Ack' '400': $ref: '#/components/responses/NackBadRequest' '401': $ref: '#/components/responses/NackUnauthorized' '409': $ref: '#/components/responses/AckNoCallback' '500': $ref: '#/components/responses/ServerError' /on_track: post: summary: BPP returns real-time tracking handle and status operationId: onTrack tags: [Fulfillment] parameters: - $ref: '#/components/parameters/AuthorizationHeader' requestBody: required: true content: application/json: schema: type: object required: [context, message] properties: context: allOf: - $ref: '#/components/schemas/Context' - type: object properties: action: type: string const: on_track message: $ref: '#/components/schemas/OnTrackAction' responses: '200': $ref: '#/components/responses/Ack' '400': $ref: '#/components/responses/NackBadRequest' '401': $ref: '#/components/responses/NackUnauthorized' '500': $ref: '#/components/responses/ServerError' /update: post: summary: BAP requests a mutation to an active order/contract description: | BAP requests the BPP to update an active order or contract. Updates may involve change of items, quantities, billing, fulfillment/performance, or payment. Uses the `context.try` two-phase pattern (defined in `Context` schema): - `context.try: true` — BAP requests updated terms before committing (preview mode). BPP responds with recalculated quote and terms via `on_update` without changing state. - `context.try: false` (default) — BAP commits the update. BPP responds with the confirmed updated order/contract. operationId: update tags: [Fulfillment] parameters: - $ref: '#/components/parameters/AuthorizationHeader' requestBody: required: true content: application/json: schema: type: object required: [context, message] properties: context: $ref: '#/components/schemas/Context' message: $ref: '#/components/schemas/UpdateAction' responses: '200': $ref: '#/components/responses/Ack' '400': $ref: '#/components/responses/NackBadRequest' '401': $ref: '#/components/responses/NackUnauthorized' '409': $ref: '#/components/responses/AckNoCallback' '500': $ref: '#/components/responses/ServerError' /on_update: post: summary: BPP returns the updated order/contract description: | BPP returns the updated order or contract with recalculated terms. Can be called proactively by the BPP without the BAP requesting it. - If `context.try: true` — returns updated terms (preview; state not changed). - If `context.try: false` — returns committed updated order/contract. operationId: onUpdate tags: [Fulfillment] parameters: - $ref: '#/components/parameters/AuthorizationHeader' requestBody: required: true content: application/json: schema: type: object required: [context, message] properties: context: $ref: '#/components/schemas/Context' message: $ref: '#/components/schemas/OnUpdateAction' responses: '200': $ref: '#/components/responses/Ack' '400': $ref: '#/components/responses/NackBadRequest' '401': $ref: '#/components/responses/NackUnauthorized' '500': $ref: '#/components/responses/ServerError' /cancel: post: summary: BAP requests cancellation of an order/contract description: | BAP requests full or partial cancellation. Uses the `context.try` two-phase pattern: - `context.try: true` — BAP requests cancellation terms (e.g., refund policy, penalty) without committing to cancellation. BPP responds with applicable policy via `on_cancel`. - `context.try: false` (default) — BAP commits the cancellation. BPP confirms cancellation and returns cancelled order/contract. operationId: cancel tags: [Fulfillment] parameters: - $ref: '#/components/parameters/AuthorizationHeader' requestBody: required: true content: application/json: schema: type: object required: [context, message] properties: context: $ref: '#/components/schemas/Context' message: $ref: '#/components/schemas/CancelAction' responses: '200': $ref: '#/components/responses/Ack' '400': $ref: '#/components/responses/NackBadRequest' '401': $ref: '#/components/responses/NackUnauthorized' '409': $ref: '#/components/responses/AckNoCallback' '500': $ref: '#/components/responses/ServerError' /on_cancel: post: summary: BPP returns cancellation terms or confirms cancellation description: | - If `context.try: true` — returns applicable cancellation policy, fees, refund timeline (state not changed). - If `context.try: false` — returns confirmed cancelled order/contract with refund/payment update. operationId: onCancel tags: [Fulfillment] parameters: - $ref: '#/components/parameters/AuthorizationHeader' requestBody: required: true content: application/json: schema: type: object required: [context, message] properties: context: $ref: '#/components/schemas/Context' message: $ref: '#/components/schemas/OnCancelAction' responses: '200': $ref: '#/components/responses/Ack' '400': $ref: '#/components/responses/NackBadRequest' '401': $ref: '#/components/responses/NackUnauthorized' '500': $ref: '#/components/responses/ServerError' # ───────────────────────────────────────────────────────────────────── # POST-FULFILLMENT # ───────────────────────────────────────────────────────────────────── /rate: post: summary: BAP submits ratings for one or more entities description: | BAP submits ratings for any ratable entity (order, contract, fulfillment, item, provider, agent, support interaction). Supports the `context.try` pattern: - `context.try: true` — Preview: BPP returns the rating form/criteria without recording. - `context.try: false` (default) — Submit: BPP records the rating and returns confirmation. The BPP acknowledges via `on_rate` with an optional aggregate snapshot. operationId: rate tags: [Post-Fulfillment] parameters: - $ref: '#/components/parameters/AuthorizationHeader' requestBody: required: true content: application/json: schema: type: object required: [context, message] properties: context: $ref: '#/components/schemas/Context' message: $ref: '#/components/schemas/RateAction' responses: '200': $ref: '#/components/responses/Ack' '400': $ref: '#/components/responses/NackBadRequest' '401': $ref: '#/components/responses/NackUnauthorized' '409': $ref: '#/components/responses/AckNoCallback' '500': $ref: '#/components/responses/ServerError' /on_rate: post: summary: BPP acknowledges rating and optionally returns aggregate description: | - If `context.try: true` — returns rating form/criteria (preview mode). - If `context.try: false` — confirms rating was recorded; optionally returns aggregate. operationId: onRate tags: [Post-Fulfillment] parameters: - $ref: '#/components/parameters/AuthorizationHeader' requestBody: required: true content: application/json: schema: type: object required: [context, message] properties: context: $ref: '#/components/schemas/Context' message: $ref: '#/components/schemas/OnRateAction' responses: '200': $ref: '#/components/responses/Ack' '400': $ref: '#/components/responses/NackBadRequest' '401': $ref: '#/components/responses/NackUnauthorized' '500': $ref: '#/components/responses/ServerError' /support: post: summary: BAP requests support information for an entity description: | BAP requests support channels and/or raises a support ticket for any entity. Uses the `context.try` pattern: - `context.try: true` — Preview: BPP returns available support channels without creating a ticket. - `context.try: false` (default) — BAP submits a support request; BPP creates/links a ticket. The `refType` field abstracts over domain-specific entity types (works for contracts, resources, providers, agents — not just orders). operationId: support tags: [Post-Fulfillment] parameters: - $ref: '#/components/parameters/AuthorizationHeader' requestBody: required: true content: application/json: schema: type: object required: [context, message] properties: context: $ref: '#/components/schemas/Context' message: $ref: '#/components/schemas/SupportAction' responses: '200': $ref: '#/components/responses/Ack' '400': $ref: '#/components/responses/NackBadRequest' '401': $ref: '#/components/responses/NackUnauthorized' '409': $ref: '#/components/responses/AckNoCallback' '500': $ref: '#/components/responses/ServerError' /on_support: post: summary: BPP returns support details description: | - If `context.try: true` — returns available support channels (preview mode). - If `context.try: false` — returns support details with ticket(s). operationId: onSupport tags: [Post-Fulfillment] parameters: - $ref: '#/components/parameters/AuthorizationHeader' requestBody: required: true content: application/json: schema: type: object required: [context, message] properties: context: $ref: '#/components/schemas/Context' message: $ref: '#/components/schemas/OnSupportAction' responses: '200': $ref: '#/components/responses/Ack' '400': $ref: '#/components/responses/NackBadRequest' '401': $ref: '#/components/responses/NackUnauthorized' '500': $ref: '#/components/responses/ServerError' # ───────────────────────────────────────────────────────────────────── # CATALOG PUBLISHING SERVICE # ───────────────────────────────────────────────────────────────────── /catalog/publish: post: summary: BPP publishes catalogs for indexing by a CDS description: | BPP submits one or more catalogs to be indexed by a Catalog Discovery Service (CDS). Returns an **ACK** immediately if accepted for processing. The per-catalog processing result arrives asynchronously via `/beckn/catalog/on_publish`. operationId: catalogPublish tags: [Catalog Publishing] parameters: - $ref: '#/components/parameters/AuthorizationHeader' requestBody: required: true content: application/json: schema: type: object required: [context, message] properties: context: allOf: - $ref: '#/components/schemas/Context' - type: object properties: action: type: string const: catalog/publish message: $ref: '#/components/schemas/CatalogPublishAction' responses: '200': $ref: '#/components/responses/Ack' '400': $ref: '#/components/responses/NackBadRequest' '401': $ref: '#/components/responses/NackUnauthorized' '409': $ref: '#/components/responses/AckNoCallback' '500': $ref: '#/components/responses/ServerError' /catalog/on_publish: post: summary: CDS returns per-catalog processing results to the BPP operationId: catalogOnPublish tags: [Catalog Publishing] parameters: - $ref: '#/components/parameters/AuthorizationHeader' requestBody: required: true content: application/json: schema: type: object required: [context, message] properties: context: allOf: - $ref: '#/components/schemas/Context' - type: object properties: action: type: string const: catalog/on_publish message: $ref: '#/components/schemas/CatalogPublishAction' responses: '200': $ref: '#/components/responses/Ack' '400': $ref: '#/components/responses/NackBadRequest' '401': $ref: '#/components/responses/NackUnauthorized' '500': $ref: '#/components/responses/ServerError' # ───────────────────────────────────────────────────────────────────── # COMPONENTS # ───────────────────────────────────────────────────────────────────── components: # ─── Parameters ────────────────────────────────────────────────── parameters: AuthorizationHeader: name: Authorization in: header required: true description: | Beckn HTTP Signature authentication header. See `#/components/schemas/Signature` for the expected format. schema: $ref: '#/components/schemas/Signature' # ─── Message Schemas ────────────────────────────────────────────── schemas: # ───────────────────────────────────────────────────────────────────── # ACTION SCHEMAS — xAction and On-xAction message payloads # ───────────────────────────────────────────────────────────────────── CancelAction: $id: https://schema.beckn.io/CancelAction/v2.0 title: Cancel Action description: | Beckn /beckn/cancel message payload. Sent by a BAP to a BPP to request cancellation of an active contract. Set context.try to true to first retrieve cancellation terms and fees before committing. (Context wrapper stripped; only the message-content portion is inlined.) oneOf: - type: object required: [order] properties: order: type: object - type: object required: [contract] properties: contract: $ref: '#/components/schemas/Contract' CatalogPublishAction: $id: https://schema.beckn.io/CatalogPublishAction/v2.0 description: Catalog publish request payload. type: object required: [catalogs] properties: catalogPublishAttributes: type: object description: Domain-specific extension attributes for this catalog publish action. properties: '@context': type: array items: type: string format: uri uniqueItems: true contains: const: 'https://schema.beckn.io/CatalogPublishAction/v2.0/context.jsonld' minItems: 1 '@type': type: array items: type: string format: uri uniqueItems: true contains: const: 'beckn:CatalogPublishAction' minItems: 1 catalogs: type: array minItems: 1 description: One or more catalogs to be indexed by the CDS items: $ref: '#/components/schemas/Catalog' OnCatalogPublishAction: $id: https://schema.beckn.io/CatalogPublishResponse/v2.0 type: object required: [context, message] properties: onCatalogPublishAttributes: type: object description: Domain-specific extension attributes for this on_catalog_publish action. properties: '@context': type: array items: type: string format: uri uniqueItems: true contains: const: 'https://schema.beckn.io/OnCatalogPublishAction/v2.0/context.jsonld' minItems: 1 '@type': type: array items: type: string format: uri uniqueItems: true contains: const: 'beckn:OnCatalogPublishAction' minItems: 1 context: allOf: - $ref: '#/components/schemas/Context' - type: object properties: action: const: 'on_catalog_publish' message: type: object properties: results: type: array items: $ref: '#/components/schemas/CatalogProcessingResult' ConfirmAction: $id: https://schema.beckn.io/ConfirmAction/v2.0 title: Confirm Action description: | Beckn /beckn/confirm message payload. Sent by a BAP to a BPP to confirm a contract, finalising the transaction terms agreed during the select-init negotiation cycle. (Context wrapper stripped; only the message-content portion is inlined.) oneOf: - type: object required: [order] properties: order: type: object - type: object required: [contract] properties: contract: $ref: '#/components/schemas/Contract' DiscoverAction: $id: https://schema.beckn.io/DiscoverAction/v2.0 title: Discover Action (External) description: | Beckn /beckn/discover message payload as published at schema.beckn.io. Supports two forms: intent properties directly at the top level (flat), or all intent properties nested inside an `intent` container object. (Context wrapper stripped; only the message-content portion is inlined.) oneOf: - description: Flat form — Intent properties directly at top level (no intent container) $ref: '#/components/schemas/Intent' - description: Nested form — Intent properties inside an intent container object type: object required: [intent] properties: intent: $ref: '#/components/schemas/Intent' InitAction: $id: https://schema.beckn.io/InitAction/v2.0 title: Init Action description: | Beckn /beckn/init message payload. Sent by a BAP to a BPP to initialise a contract with consumer details (billing address, fulfillment preferences, etc.). (Context wrapper stripped; only the message-content portion is inlined.) oneOf: - type: object required: [order] properties: order: type: object - type: object required: [contract] properties: contract: $ref: '#/components/schemas/Contract' OnCancelAction: $id: https://schema.beckn.io/OnCancelAction/v2.0 title: On Cancel Action description: | Beckn /beckn/on_cancel message payload. Sent by a BPP to a BAP in response to a /beckn/cancel call, returning the contract with status set to CANCELLED and any applicable cancellation outcome. (Context wrapper stripped; only the message-content portion is inlined.) oneOf: - type: object required: [order] properties: order: type: object - type: object required: [contract] properties: contract: $ref: '#/components/schemas/Contract' OnConfirmAction: $id: https://schema.beckn.io/OnConfirmAction/v2.0 title: OnConfirmAction description: | Beckn /beckn/on_confirm message payload. Sent by a BPP to a BAP in response to a /beckn/confirm call, returning the confirmed contract with status set to CONFIRMED. (Context wrapper stripped; only the message-content portion is inlined.) oneOf: - type: object required: [order] properties: order: type: object - type: object required: [contract] properties: contract: $ref: '#/components/schemas/Contract' OnDiscoverAction: $id: https://schema.beckn.io/OnDiscoverAction/v2.0 description: The on_discover response payload containing matching catalogs. type: object required: [catalogs] properties: catalogs: type: array description: | Array of catalogs matching the discovery request. Note: Each catalog's `items` array carries `oneOf [Item, Resource]` entries: - `Item` — legacy 2.0-rc1 catalog item (backward compatible) - `Resource` — new cross-domain resource abstraction (generalized) Both types share the common `id` + `descriptor` surface for display rendering. See `#/components/schemas/Catalog/v2.0` for the full Catalog schema. items: $ref: '#/components/schemas/Catalog' OnInitAction: $id: https://schema.beckn.io/OnInitAction/v2.0 title: On Init Action description: | Beckn /beckn/on_init message payload. Sent by a BPP to a BAP in response to a /beckn/init call, with the updated contract including payment terms and billing confirmation. (Context wrapper stripped; only the message-content portion is inlined.) oneOf: - type: object required: [order] properties: order: type: object - type: object required: [contract] properties: contract: $ref: '#/components/schemas/Contract' OnRateAction: $id: https://schema.beckn.io/OnRateAction/v2.0 title: On Rate Action description: | Beckn /beckn/on_rate message payload. Sent by a BPP to a BAP in response to a /beckn/rate call, optionally returning rating forms to collect structured feedback from the consumer. (Context wrapper stripped; only the message-content portion is inlined.) type: object additionalProperties: true properties: ratingForms: type: array items: $ref: '#/components/schemas/RatingForm' required: - ratingForms # ── Support Messages ──────────────────────────────────────────── OnSelectAction: $id: https://schema.beckn.io/OnSelectAction/v2.0 title: On Select Action description: | Beckn /beckn/on_select message payload. Sent by a BPP to a BAP in response to a /beckn/select call, with updated contract terms. (Context wrapper stripped; only the message-content portion is inlined.) oneOf: - type: object - $ref: '#/components/schemas/Contract' OnStatusAction: $id: https://schema.beckn.io/OnStatusAction/v2.0 title: On Status Action description: | Beckn /beckn/on_status message payload. Sent by a BPP to a BAP in response to a /beckn/status call (or as an unsolicited status push), returning the current state of the contract. (Context wrapper stripped; only the message-content portion is inlined.) oneOf: - type: object required: [order] properties: order: type: object - type: object required: [contract] properties: contract: $ref: '#/components/schemas/Contract' OnSupportAction: $id: https://schema.beckn.io/OnSupportAction/v2.0 title: On Support Action description: | Beckn /beckn/on_support message payload. Sent by a BPP to a BAP in response to a /beckn/support call, returning support contact details and available channels. (Context wrapper stripped; only the message-content portion is inlined.) type: object properties: support: $ref: '#/components/schemas/Support' required: - support # ── Catalog Publishing Messages ───────────────────────────────── OnTrackAction: $id: https://schema.beckn.io/OnTrackAction/v2.0 title: On Track Action description: | Beckn /beckn/on_track message payload. Sent by a BPP to a BAP in response to a /beckn/track call, returning a Tracking handle with the URL and/or WebSocket endpoint for real-time fulfillment tracking. (Context wrapper stripped; only the message-content portion is inlined.) type: object additionalProperties: true properties: tracking: allOf: - $ref: '#/components/schemas/Tracking' required: - tracking OnUpdateAction: $id: https://schema.beckn.io/OnUpdateAction/v2.0 title: On Update Action description: | Beckn /beckn/on_update message payload. Sent by a BPP to a BAP in response to a /beckn/update call (or as an unsolicited update push), returning the updated contract state. (Context wrapper stripped; only the message-content portion is inlined.) oneOf: - type: object required: [order] properties: order: type: object - type: object required: [contract] properties: contract: $ref: '#/components/schemas/Contract' RateAction: $id: https://schema.beckn.io/RateAction/v2.0 title: RateAction description: | Beckn /beckn/rate message payload. Sent by a BAP to a BPP to submit one or more rating inputs for entities in a completed contract (order, fulfillment, item, provider, agent, support). (Context wrapper stripped; only the message-content portion is inlined.) oneOf: - type: object properties: ratings: type: array items: type: object - type: object additionalProperties: true properties: ratingInputs: type: array items: $ref: '#/components/schemas/RatingInput' required: - ratingInputs SelectAction: $id: 'https://schema.beckn.io/SelectAction/v2.0' title: Select Action description: | Beckn /beckn/select message payload. Sent by a BAP to a BPP to select items and offers from a catalog, initiating the negotiation cycle. (Context wrapper stripped; only the message-content portion is inlined.) oneOf: - type: object required: [order] properties: order: type: object - type: object required: [contract] properties: contract: $ref: '#/components/schemas/Contract' StatusAction: $id: https://schema.beckn.io/StatusAction/v2.0 title: Status Action description: | Beckn /beckn/status message payload. Sent by a BAP to a BPP to query the current state of a contract/order by its identifier. (Context wrapper stripped; only the message-content portion is inlined.) oneOf: - type: object description: Query by order identifier (legacy) required: [order] properties: order: allOf: - type: object - required: ['beckn:id'] - type: object description: Query by contract identifier required: [contract] properties: contract: type: object required: [id] properties: id: $ref: '#/components/schemas/Contract/properties/id' SupportAction: $id: https://schema.beckn.io/SupportAction/v2.0 title: Support Action description: | Beckn /beckn/support message payload. Sent by a BAP to a BPP to request support contact information or to open a support ticket for an existing order/contract. (Context wrapper stripped; only the message-content portion is inlined.) oneOf: - type: object - type: object properties: support: $ref: '#/components/schemas/Support' required: - support TrackAction: oneOf: - type: object - type: object title: Track Action description: | Beckn /beckn/track message payload. Sent by a BAP to a BPP to request a real-time tracking handle for a fulfillment within an active contract. (Context wrapper stripped; only the message-content portion is inlined.) properties: tracking: type: object properties: contract: type: object properties: id: $ref: '#/components/schemas/Contract/properties/id' trackingData: type: object description: Domain-specific extension attributes for this track action. properties: '@context': type: array items: type: string format: uri uniqueItems: true contains: const: 'https://schema.beckn.io/TrackAction/v2.0/context.jsonld' minItems: 1 '@type': type: array items: type: string format: uri uniqueItems: true contains: const: 'beckn:TrackAction' minItems: 1 trackingAttributes: description: Domain-specific extension attributes for this Tracking. allOf: - $ref: '#/components/schemas/Attributes' - required: - '@context' - '@type' - properties: '@context': description: Domain-specific context in which this contract is being created type: string format: uri examples: - 'https://schema.beckn.io/LongPolling/v2.0/context.jsonld' - 'https://schema.beckn.io/WebhookPush/v2.0/context.jsonld' - 'https://schema.beckn.io/Streaming/v2.0/context.jsonld' - 'https://schema.beckn.io/WebPage/v2.0/context.jsonld' '@type': description: JSON-LD type corresponding to the context type: string examples: - LongPolling - WebhookPush - Streaming - WebPage additionalProperties: true required: - contract additionalProperties: false # ── Status Message ────────────────────────────────────────────── UpdateAction: $id: https://schema.beckn.io/UpdateAction/v2.0 title: Update Action description: | Beckn /beckn/update message payload. Sent by a BAP to a BPP to request changes to an active contract (e.g., update fulfillment address, add items, change quantities). The context.try flag must be true during negotiation. (Context wrapper stripped; only the message-content portion is inlined.) oneOf: - type: object required: [order] properties: order: type: object - type: object properties: contract: $ref: '#/components/schemas/Contract' # ─── Responses ──────────────────────────────────────────────────── # ───────────────────────────────────────────────────────────────────── # CORE DATA SCHEMAS — Reusable types, domain objects, and infrastructure # ───────────────────────────────────────────────────────────────────── ActionTrigger: description: Describes a trigger that initiates an action, like triggering a settlement on fulfillment completion. type: object properties: '@context': type: string format: uri '@type': type: string descriptor: $ref: '#/components/schemas/Descriptor' AddOn: type: object description: Add-on to a catalog resource properties: id: type: string descriptor: $ref: '#/components/schemas/Descriptor' addOnAttributes: description: > Domain-specific extension attributes for this add-on. allOf: - $ref: '#/components/schemas/Attributes' - required: - '@context' - '@type' - properties: '@context': description: Domain-specific context in which this add-on exists type: string format: uri examples: - 'https://schema.beckn.io/FnbAddOn/v2.0/context.jsonld' - 'https://schema.beckn.io/GroceryAddOn/v2.0/context.jsonld' - 'https://schema.beckn.io/RideAddOn/v2.0/context.jsonld' '@type': description: JSON-LD type corresponding to the context type: string examples: - FnbAddOn - GroceryAddOn - RideAddOn Address: $id: https://schema.beckn.io/Address/v2.0 description: '**Postal address** aligned with schema.org `PostalAddress`. Use for human-readable addresses. Geometry lives in `Location.geo` as GeoJSON.' title: Address type: object properties: addressCountry: description: Country name or ISO-3166-1 alpha-2 code. type: string example: IN addressLocality: description: City/locality. type: string example: Bengaluru addressRegion: description: State/region/province. type: string example: Karnataka extendedAddress: description: Address extension (apt/suite/floor, C/O). type: string example: Apt 4B postalCode: description: Postal/ZIP code. type: string example: '560001' streetAddress: description: Street address (building name/number and street). type: string example: 123 Tech Street additionalProperties: false x-tags: - common AsyncError: title: Asynchronous Error description: | Error returned asynchronously during a callback. Wraps the base `Error` schema with JSON-LD type annotations to allow linked-data processing. allOf: - $ref: '#/components/schemas/Error' - type: object properties: '@context': type: string default: '#/components/schemas/' '@type': type: string default: AsyncError additionalProperties: true Attributes: $id: 'https://schema.beckn.io/Attributes/v2.0' description: JSON-LD aware container for domain-specific attributes of an Item. MUST include @context (URI) and @type (compact or full IRI). Any additional properties are allowed and interpreted per the provided JSON-LD context. title: Attributes type: object properties: '@context': description: Use case specific JSON-LD context URI type: string format: uri '@type': description: JSON-LD type defined within the context type: string required: - '@context' - '@type' additionalProperties: true x-tags: - common Catalog: $id: https://schema.beckn.io/Catalog/v2.1 $schema: "https://json-schema.org/draft/2020-12/schema" description: Catalog schema for Beckn Protocol v2.0.1 — oneOf legacy (v2.0) or new (v2.1) catalog format title: Catalog x-tags: [common] type: object properties: bppId: description: BPP (Beckn Protocol Provider) identifier that publishes this catalog type: string example: bpp.example.com bppUri: description: BPP (Beckn Protocol Provider) URI endpoint type: string format: uri example: "https://bpp.example.com" descriptor: description: Human / Agent-readable description of this catalog allOf: - $ref: "#/components/schemas/Descriptor" id: description: Unique identifier for the catalog type: string example: catalog-electronics-001 isActive: description: Whether the catalog is active type: boolean default: true offers: type: array items: $ref: "#/components/schemas/Offer" resources: description: Array of generalized Resource entities in this catalog (new model) type: array items: $ref: '#/components/schemas/Resource' provider: description: The provider of the catalog allOf: - $ref: "#/components/schemas/Provider" visibleTo: type: array description: > Optional visibility constraint indicating which network participants (by participantId / networkId / role) are allowed to discover or transact on this catalog. If omitted, the catalog is assumed to be visible to all participants in the addressed network(s). items: type: object required: [type, id] properties: type: type: string enum: [NETWORK, PARTICIPANT, ROLE] description: Scope of visibility constraint. id: type: string description: Identifier of the network, participant, or role. validity: description: The time period during which this catalog is valid $ref: "#/components/schemas/TimePeriod" required: - id - descriptor additionalProperties: false CatalogOnPublishMessage: $id: 'https:schema.beckn.io/CatalogOnPublishMessage/v2.0' description: Catalog publish processing results from CDS to BPP. type: object required: [results] properties: results: type: array description: Per-catalog processing results items: $ref: '#/components/schemas/CatalogProcessingResult' CatalogProcessingResult: $id: 'https://schema.beckn.io/CatalogProcessingResult/v2.0' description: Processing result for a single catalog submission. type: object required: [catalogId, status] properties: catalogId: type: string description: Identifier of the submitted catalog status: description: | Processing outcome. Using oneOf [string, object] to allow domain-specific status objects (e.g. beckn:CatalogAccepted) alongside standard string codes. oneOf: - type: string enum: [ACCEPTED, REJECTED, PARTIAL] description: | Standard processing status: - ACCEPTED — catalog indexed successfully - REJECTED — catalog rejected entirely (see errors) - PARTIAL — some items accepted, some rejected (see errors) - type: object properties: '@context': type: string format: uri const: '#/components/schemas/' '@type': type: string pattern: '^beckn:[A-Za-z0-9._~-]+$' additionalProperties: true errors: type: array description: Per-item or per-catalog errors (present when REJECTED or PARTIAL) items: $ref: '#/components/schemas/Error' stats: type: object description: Optional statistics about the processed catalog properties: itemCount: type: integer description: Number of items accepted providerCount: type: integer description: Number of providers in the catalog categoryCount: type: integer description: Number of distinct categories Consideration: $id: https://schema.beckn.io/Consideration/v2.0 type: object description: > Generalized representation of value exchanged under a Contract. Consideration is domain-neutral and may represent: - Monetary value - Credits / tokens - Asset transfer - Service exchange - Compliance artifact required: ["@context", "@type", "id", "status"] properties: "@context": type: string format: uri description: JSON-LD context URI for the core Resource schema "@type": oneOf: - type: string description: Type of the core Resource enum: ["beckn:Consideration", "beckn:MonetaryConsideration", "beckn:TokenConsideration", "beckn:CreditConsideration", "beckn:AssetConsideration", "beckn:ServiceConsideration"] - type: string id: description: Identifier of this consideration type: string status: description: The status of this consideration $ref: '#/components/schemas/Descriptor' considerationAttributes: description: > Domain-specific attributes of this consideration. For monetary considerations, use the PriceSpecification schema to capture total value with breakup. For other consideration types, use a generic Attributes bag. $ref: '#/components/schemas/Attributes' Context: $id: "#/components/schemas/Context" description: >- Every API call in Beckn protocol has a context. It contains addressing information like the bap/bpp identifiers and API base urls, the protocol version implemented by the sender, the method being called, the transaction_id that represents an end-to-end user session at the BAP, a message ID to pair requests with callbacks, a timestamp to capture sending times, a ttl to specify the validity of the request, and a key to encrypt information if necessary. title: Context x-tags: [common] type: object properties: action: description: The Beckn endpoint being called. Must conform to BecknEndpoint format. type: string bapId: description: A globally unique identifier of the BAP. Typically the fully qualified domain name (FQDN) of the BAP. type: string bapUri: description: API URL of the BAP for accepting callbacks from BPPs. type: string format: uri bppId: description: A globally unique identifier of the BPP. Typically the fully qualified domain name (FQDN) of the BPP. type: string bppUri: description: API URL of the BPP for accepting calls from BAPs. type: string format: uri messageId: description: >- A unique value which persists during a request/callback cycle. BAPs use this value to match an incoming callback from a BPP to an earlier call. Generate a fresh message_id for every new interaction. type: string format: uuid networkId: description: A unique identifier representing a group of platforms. By default, the URL of the network registry on the Beckn network. type: string timestamp: description: Time of request generation in RFC3339 format. type: string format: date-time transactionId: description: >- A unique value which persists across all API calls from discover through confirm. Used to indicate an active user session across multiple requests. type: string format: uuid try: description: A flag to indicate that this request is intended to try an operation in sandbox mode type: boolean default: false ttl: description: The duration in ISO8601 format after timestamp for which this message holds valid. type: string version: description: Version of Beckn protocol being used by the sender. type: string default: 2.0.0 required: - action - bapId - bapUri - messageId - timestamp - transactionId - version additionalProperties: false Contract: $id: https://schema.beckn.io/Contract/v2.1 type: object description: > This is a JSON-LD compliant, linked-data schema that specifies a generic multi-party, digitally signed Contract between a set of participants. based on the vocabulary defined in the @context. By default, it is the most generic form of contract i.e beckn:Contract. However, based on the mapping being used in @context, it could take values like retail:Order, mobility:Reservation, healthcare:Appointment, and so on, which will be defined as sub-classes of beckn:Contract. Alternate description A digitally agreed commitment between two or more participants governing the exchange of economic or non-economic value. Contract is the canonical contract object in the generalized Beckn v2.1 protocol. It replaces the commerce-specific Order construct while preserving backward compatibility at the API layer. A Contract binds: - Commitments (what is agreed) - Consideration (value promised) - Performance (how execution occurs) - Settlements (how consideration is discharged) The model is domain-neutral and supports commerce, hiring, energy markets, carbon exchanges, data access, mobility, subscriptions, and other use cases. title: Contract properties: '@context': description: A URL to the reference vocabulary where this schema has been defined. If missing, this field defaults to `https://schema.beckn.io/`. It allows applications to fetch the mapping between the simple JSON keys of this class and absolute Beckn IRIs (Internationalized Resource Identifiers), allowing conversion of standard Beckn JSON payload into linked data. type: string format: uri const: https://schema.beckn.io/Contract/v2.0 '@type': description: A Beckn IRI on the vocabulary defined in the @context. Must start with "beckn:" followed by URL-safe identifier characters. type: string pattern: ^beckn:[A-Za-z0-9._~-]+$ default: beckn:Contract id: description: A UUID string generated at the BPP endpoint at any stage before the confirmation of the order i.e before `/on_confirm` callback. This value is intended typically for indexing or filtering. While the chances of a UUID collision are rare, it is recommended to use a combination of `bppId`, `providerId` and `id` to allow for global uniqueness. type: string format: uuid descriptor: description: Describes the nature of the contract in human / agent readable terms $ref: '#/components/schemas/Descriptor' commitments: type: array description: > Structured commitments governed by this contract. minItems: 1 items: $ref: '#/components/schemas/Commitment' consideration: type: array description: Value agreed to be exchanged under this contract. items: $ref: '#/components/schemas/Consideration' participants: description: | The participants involved in the contract. Contracts are not always between two individuals. Several entities may play a specific role in the creation, fulfillment, and post-fulfillment of the contract. type: array items: $ref: '#/components/schemas/Participant' performance: type: array description: > Execution units of the contract. Previously defined as `fulfillments`, performance is the generalized the legacy Fulfillment abstraction. Each Performance instance represents a structured execution plan or delivery mechanism, including: - Physical delivery - Service provisioning - API access - Subscription activation - Carbon credit transfer - Capacity allocation - Workforce onboarding Tracking and Support interactions may be linked to individual Performance units. items: $ref: '#/components/schemas/Performance' entitlements: type: array items: $ref: '#/components/schemas/Entitlement' settlements: type: array description: > Records representing discharge of agreed consideration. items: $ref: '#/components/schemas/Settlement' terms: type: array description: > Records representing discharge of agreed consideration. items: $ref: '#/components/schemas/Attributes' status: description: The current state of the contract expressed as a Descriptor whose code MUST be one of the standard contract state values. allOf: - $ref: '#/components/schemas/Descriptor' - type: object properties: code: enum: [DRAFT, ACTIVE, CANCELLED, COMPLETE] contractAttributes: description: > Domain-specific extension attributes for this contract. Use beckn:LogisticsContract for hyperlocal physical delivery. Use the generic Attributes schema for other fulfillment types where no well-known domain schema exists. allOf: - $ref: '#/components/schemas/Attributes' - required: - '@context' - '@type' - properties: '@context': description: Domain-specific context in which this contract is being created type: string format: uri examples: - 'https://schema.beckn.io/GroceryOrder/v2.0/context.jsonld' - 'https://schema.beckn.io/FnBOrder/v2.0/context.jsonld' - 'https://schema.beckn.io/ShippingOrder/v2.0/context.jsonld' - 'https://schema.beckn.io/MobilityBooking/v2.0/context.jsonld' - 'https://schema.beckn.io/BusTicketBooking/v2.0/context.jsonld' - 'https://schema.beckn.io/P2PEnergyTrade/v1.1/context.jsonld' '@type': description: JSON-LD type corresponding to the context type: string examples: - GroceryOrder - FnBOrder - ShippingOrder - MobilityBooking - BusTicketBooking - P2PEnergyTrade additionalProperties: false x-tags: - common required: - commitments Commitment: type: object required: - status - resources - offer properties: "@context": type: string format: uri description: JSON-LD context URI for the core Resource schema "@type": type: string description: Type of the core Resource enum: ["beckn:Commitment"] id: type: string status: type: object properties: descriptor: allOf: - $ref: '#/components/schemas/Descriptor' - properties: code: enum: - DRAFT - ACTIVE - CLOSED resources: type: array items: required: - id - quantity $ref: '#/components/schemas/Resource' offer: required: - id - resourceIds $ref: '#/components/schemas/Offer' commitmentAttributes: description: > Domain-specific extension attributes for this commitment. allOf: - $ref: '#/components/schemas/Attributes' - required: - '@context' - '@type' properties: '@context': description: Domain-specific attributes for this commitment type: string format: uri examples: - 'https://schema.beckn.io/ShoppingCart/v2.0/context.jsonld' - 'https://schema.beckn.io/ShippingManifest/v2.0/context.jsonld' - 'https://schema.beckn.io/TravelItinerary/v2.0/context.jsonld' - 'https://schema.beckn.io/BillOfMaterials/v2.0/context.jsonld' - 'https://schema.beckn.io/DiagnosticTests/v2.0/context.jsonld' - 'https://schema.beckn.io/TodoList/v2.0/context.jsonld' '@type': description: JSON-LD type corresponding to the context type: string examples: - ShoppingCart - ShippingManifest - TravelItinerary - BillOfMaterials - DiagnosticTests - TodoList CounterSignature: title: Beckn HTTP Counter-Signature description: | A signed receipt transmitted in the synchronous `Ack` response body, proving that the receiver authenticated, received, and processed the inbound request. `CounterSignature` shares the same wire format as `Signature` but differs: - **Signer**: the response receiver (not the request sender) - **Location**: transmitted in the `Ack` response body (not in the `Authorization` header) - **`digest`**: covers the Ack response body (not the inbound request body) - **`(request-digest)`** and **`(message-id)`** MUST be included in the signing string Signing string format: ``` (created): {unixTimestamp} (expires): {unixTimestamp} digest: BLAKE-512={base64DigestOfAckBody} (request-digest): BLAKE-512={base64DigestOfInboundRequestBody} (message-id): {messageId} ``` allOf: - $ref: '#/components/schemas/Signature' Descriptor: $id: "#/components/schemas/Descriptor" $schema: "https://json-schema.org/draft/2020-12/schema" description: Schema definition for Descriptor in the Beckn Protocol v2.0.1 title: Descriptor x-tags: [common] type: object properties: '@context': description: Use case specific JSON-LD context. This can change from use case to use case, even within a domain. type: string format: uri default: "https://schema.beckn.io/" '@type': description: Type of the descriptor. The type can be overriden with a context-specific type type: string default: beckn:Descriptor code: description: A machine-readable code identifying the state or type of the entity being described. The valid values for this field are defined by the context in which the Descriptor is used (e.g. DRAFT, ACTIVE, CANCELLED, COMPLETE for a Contract status). type: string longDesc: description: Detailed description of the item type: string example: Powerful gaming laptop with NVIDIA RTX graphics, fast SSD storage, and high-refresh display shortDesc: description: Short description of the item type: string example: High-performance gaming laptop with RTX graphics name: description: Name of the entity being described type: string example: Premium Gaming Laptop Pro thumbnailImage: description: Name of the entity being described type: string format: uri docs: description: Links to downloadable documents type: array items: type: object mediaFile: description: Links to multimedia files and images type: array items: type: object required: - '@type' additionalProperties: false Entitlement: $id: https://schema.beckn.io/Entitlement/v2.0 description: A contractually granted, policy-governed right that allows a specific party to access, use, or claim a defined economic resource within stated scope and validity constraints. It represents the enforceable permission created by an order, independent of the credential used to exercise it. title: Entitlement type: object properties: '@context': description: CPD type: string format: uri default: https://schema.beckn.io/ '@type': description: The domain-specific type of entitlement that allows domains to extend this schema type: string default: beckn:Entitlement id: description: A unique identifier for this entitlement within the entitlement provider's namespace type: string resource: description: The resource being availed or accessed against this entitlement $ref: '#/components/schemas/Resource/properties/id' descriptor: description: Human-readable information regarding the entitlement like QR-code images, attached documents containing terms and conditions, video or audio files instructing the user on how to use the entitlement $ref: '#/components/schemas/Descriptor' credentials: type: array items: $ref: '#/components/schemas/Descriptor' additionalProperties: true required: - '@context' - '@type' - id - descriptor x-tags: - common Error: $id: '#/components/schemas/Error/v2.0' title: Error description: | Base error container returned in NACK responses and async error callbacks. Domain-specific error codes SHOULD follow the Beckn error code registry (see docs/11_Error_Codes.md). Custom error objects may be expressed as `oneOf [string, object]` payloads via the `errorDetails` field. oneOf: - description: Newest version of the error object properties. type: object properties: errorCode: type: string description: Machine-readable error code per the Beckn error registry. errorMessage: type: string description: Human-readable error description for display or logging. errorDetails: description: | Optional domain-specific error details. Using oneOf to allow both simple string details and structured JSON-LD error objects from domain packs. oneOf: - type: string - type: object additionalProperties: true - description: Error response object from the previous version type: object required: [code, message] properties: code: type: string message: type: string details: type: object Participant: type: object properties: id: type: string descriptor: $ref: '#/components/schemas/Descriptor' participantAttributes: description: > Domain-specific extension attributes for this contract. Use beckn:LogisticsContract for hyperlocal physical delivery. Use the generic Attributes schema for other fulfillment types where no well-known domain schema exists. allOf: - $ref: '#/components/schemas/Attributes' - required: - '@context' - '@type' properties: '@context': description: Domain-specific entity which is is participating in this transaction type: string format: uri examples: - 'https://schema.beckn.io/Consumer/v2.0/context.jsonld' - 'https://schema.beckn.io/Provider/v2.0/context.jsonld' - 'https://schema.beckn.io/FulfillmentAgent/v2.0/context.jsonld' - 'https://schema.beckn.io/NetworkParticipant/v2.0/context.jsonld' - 'https://schema.beckn.io/EscrowAgent/v2.0/context.jsonld' - 'https://schema.beckn.io/Guarantor/v2.0/context.jsonld' '@type': description: JSON-LD type corresponding to the context type: string examples: - Consumer - Provider - FulfillmentAgent - NetworkParticipant - EscrowAgent - Guarantor GeoJSONGeometry: $id: 'https://schema.beckn.io/GeoJSONGeometry/v2.0' description: "**GeoJSON geometry** per RFC 7946. Coordinates are in **EPSG:4326 (WGS-84)** and MUST follow\ \ **[longitude, latitude, (altitude?)]** order.\nSupported types: - Point, LineString, Polygon - MultiPoint,\ \ MultiLineString, MultiPolygon - GeometryCollection (uses `geometries` instead of `coordinates`)\n\ Notes: - For rectangles, use a Polygon with a single linear ring where the first\n and last positions\ \ are identical.\n- Circles are **not native** to GeoJSON. For circular searches, use\n `SpatialConstraint`\ \ with `op: s_dwithin` and a Point + `distanceMeters`,\n or approximate the circle as a Polygon.\n\ - Optional `bbox` is `[west, south, east, north]` in degrees.\n" title: GeoJSONGeometry type: object properties: bbox: description: Optional bounding box `[west, south, east, north]` in degrees. type: array minItems: 4 maxItems: 4 coordinates: description: Coordinates per RFC 7946 for all types **except** GeometryCollection. Order is **[lon, lat, (alt)]**. For Polygons, this is an array of linear rings; each ring is an array of positions. type: array geometries: description: Member geometries when `type` is **GeometryCollection**. type: array items: $ref: '#/components/schemas/GeoJSONGeometry' type: type: string enum: - Point - LineString - Polygon - MultiPoint - MultiLineString - MultiPolygon - GeometryCollection required: - type additionalProperties: true x-tags: - common Performance: $id: "https://schema.beckn.io/Performance/v2.2" description: | Generalized execution/performance unit. This is where downstream objects bind: - Fulfillment-like details (where/when/how) - Tracking handles - Support touchpoints - Status updates A minimal envelope that carries identity, status, and a performanceAttributes bag that holds the concrete domain-specific delivery schema. Domain specification authors can attach rich context and types via `performanceAttributes`. For example, Hyperlocal delivery details (pickup/delivery locations, items shipped, agent, etc.) are placed inside performanceAttributes using a well-known domain schema such as HyperlocalDelivery. Use the generic Attributes schema when no well-known domain schema exists. title: Fulfillment x-tags: [common, fulfillment] type: object properties: '@context': description: Domain-specific context in which this fulfillment is taking place type: string format: uri const: 'https://schema.beckn.io/Performance/v2.1/context.jsonld' '@type': description: JSON-LD type. type: string default: 'Fulfillment' id: type: string description: Unique identifier for this fulfillment record. x-jsonld: '@id': 'beckn:id' status: $ref: '#/components/schemas/Descriptor' description: > Current status of this fulfillment, expressed as a Descriptor. Use Descriptor.code for machine-readable status values. x-jsonld: '@id': 'beckn:status' commitmentIds: type: array items: $ref: '#/components/schemas/Commitment/properties/id' schedule: $ref: '#/components/schemas/Schedule' performanceAttributes: description: > Domain-specific extension attributes for this fulfillment. Use beckn:HyperlocalDelivery (aligned with schema:ParcelDelivery) for hyperlocal physical delivery. Use the generic Attributes schema for other fulfillment types where no well-known domain schema exists. allOf: - $ref: '#/components/schemas/Attributes' - properties: '@context': description: Domain-specific context in which this fulfillment is taking place type: string format: uri examples: - 'https://schema.beckn.io/HyperlocalDelivery/v2.0/context.jsonld' - 'https://schema.beckn.io/OnDemandRide/v2.0/context.jsonld' - 'https://schema.beckn.io/P2PEnergyTransfer/v1.1/context.jsonld' default: 'https://schema.beckn.io/Fulfillment/v2.1/context.jsonld' '@type': description: JSON-LD type. type: string examples: - 'HyperlocalDelivery' - 'OnDemandRide' - 'P2PEnergyTransfer' - 'Fulfillment' required: - '@context' - '@type' additionalProperties: false InReplyTo: $id: 'https://schema.beckn.io/InReplyTo/v2.0' title: In-Reply-To Reference description: | A cryptographic binding that ties an asynchronous `on_` callback to the specific inbound request that triggered it. Establishes bilateral non-repudiation for the asynchronous leg of a Beckn interaction. Use `lineage` (on `Context`) for cross-transaction causality. Verification steps: 1. Recompute BLAKE2b-512 digest of the original request body; compare to `digest`. 2. Confirm `messageId` matches the `messageId` from the original request `Context`. type: object required: [messageId, digest] properties: messageId: type: string format: uuid description: The `messageId` of the parent request from its `Context`. digest: type: string pattern: '^BLAKE-512=[A-Za-z0-9+/]+=*$' description: | BLAKE2b-512 hash of the parent request body, Base64-encoded with algorithm prefix. Format: `BLAKE-512={base64EncodedHash}` Intent: $id: https://schema.beckn.io/Intent/v2.0 description: A declaration of an intent to transact title: Intent x-tags: [common] type: object properties: textSearch: description: Free text search query for items type: string example: gaming laptop premium tech filters: description: Filter criteria for items type: object properties: type: description: Type of filter expression type: string enum: - jsonpath default: jsonpath expression: description: Filter expression based on the specified type type: string example: $[?(@.rating.value >= 4.0 && @.electronic.brand.name == 'Premium Tech')] required: - type - expression spatial: description: Optional array of spatial constraints (CQL2-JSON semantics). type: array items: type: object media_search: $ref: "#/components/schemas/MediaSearch" anyOf: - required: - textSearch - required: - filters - required: - spatial - required: - filters - spatial additionalProperties: false Location: description: | A place represented by GeoJSON geometry and optional address. Source: main/schema/core/v2/attributes.yaml#Location type: object required: [geo] additionalProperties: false properties: "@type": type: string enum: ["beckn:Location"] geo: $ref: '#/components/schemas/GeoJSONGeometry' address: oneOf: - type: string - $ref: '#/components/schemas/Address' MediaInput: $id: https://schema.beckn.io/MediaInput/v2.0 type: object required: [type, url] properties: id: { type: string } type: { type: string, enum: [image, audio, video] } url: { type: string, format: uri } contentType: { type: string } textHint: { type: string } language: { type: string } startMs: { type: integer } endMs: { type: integer } additionalProperties: false MediaSearch: $id: https://schema.beckn.io/MediaSearch/v2.0 type: object properties: media: type: array items: $ref: '#/components/schemas/MediaInput' options: $ref: '#/components/schemas/MediaSearchOptions' additionalProperties: false MediaSearchOptions: $id: https://schema.beckn.io/MediaSearchOptions/v2.0 type: object properties: goals: type: array items: type: string enum: [visual-similarity, visual-object-detect, text-from-image, text-from-audio, semantic-audio-match, semantic-video-match] augment_text_search: type: boolean default: true restrict_results_to_media_proximity: type: boolean default: false additionalProperties: false Offer: $id: 'https://schema.beckn.io/Offer/v2.1' type: object description: | A generalized, cross-domain Offer that captures the terms under which one or more Resources may be committed. Core intent: - Support multiple terms/eligibility/constraints/price points for the same Resource(s) - Support dynamic / on-the-fly offers (e.g., bundling, combinational discounts, eligibility changes, capacity-aware pricing) This mirrors the role of Offer in current Beckn (and schema.org patterns), but keeps the shape minimal and composable via `beckn:offerAttributes`. required: ["@context", "@type", "id"] properties: "@context": type: string format: uri description: JSON-LD context URI for the core Offer schema enum: ["https://schema.beckn.io/Offer/v2.2/context.jsonld"] "@type": type: string description: Type of the core Offer enum: ["beckn:Offer"] id: type: string description: Unique identifier of the offer. descriptor: description: Human / agent-readable description of this offer. $ref: '#/components/schemas/Descriptor' provider: description: > Provider of this offer. - If the offer is published by the same provider as the item it is associated with, use only the provider's `id` (string reference). - If the offer is published by a different provider, include the full Provider object. oneOf: - type: object description: Same provider as the item — identified by id only. required: [id] properties: id: type: string description: Identifier of the provider (same as the item's provider). - $ref: '#/components/schemas/Provider' resourceIds: type: array description: References (IDs) to resources covered by this offer. items: $ref: '#/components/schemas/Resource/properties/id' addOnIds: type: array description: IDs of optional extra Offers or Resources that can be attached. items: $ref: '#/components/schemas/AddOn/properties/id' considerationIds: type: array items: $ref: '#/components/schemas/Consideration/properties/id' fulfillmentIds: description: Details regarding the fulfillment of this offer $ref: '#/components/schemas/Consideration' validity: $ref: '#/components/schemas/TimePeriod' availableTo: type: array description: > Optional visibility constraint indicating which network participants (by participantId / networkId / role) are allowed to discover or transact on this entity. If omitted, the entity is assumed to be visible to all participants in the addressed network(s). items: type: object required: [type, id] properties: type: type: string enum: [NETWORK, PARTICIPANT, ROLE] description: Scope of visibility constraint. id: type: string description: Identifier of the network, participant, or role. offerAttributes: $ref: '#/components/schemas/Attributes' PriceSpecification: type: object properties: priceUnit: type: string consideredValue: type: number components: type: array items: type: object required: - lineId - lineSummary - value - currency properties: lineId: type: string lineSummary: type: string value: type: number currency: type: string commitmentId: $ref: '#/components/schemas/Commitment/properties/id' quantity: $ref: '#/components/schemas/Quantity' ProcessingNotice: $id: https://schema.beckn.io/ProcessingNotice/v2.0 type: object required: [code, message] properties: code: type: string message: type: string details: type: object additionalProperties: true Provider: type: object description: Schema definition for Provider in the Beckn Protocol v2.0.1 title: Provider x-tags: [common] properties: '@context': type: string format: uri default: "https://schema.beckn.io/" '@type': type: string const: beckn:Provider descriptor: $ref: "#/components/schemas/Descriptor" id: description: Unique identifier for the provider type: string example: tech-store-001 locations: description: Physical locations where the provider operates type: array items: $ref: "#/components/schemas/Location" policies: type: array items: type: object providerAttributes: $ref: "#/components/schemas/Attributes" required: - id - descriptor additionalProperties: false Quantity: $id: https://schema.beckn.io/Quantity/v2.0 description: Schema definition for Quantity in the Beckn Protocol v2.0.1 title: Quantity type: object properties: maxQuantity: description: Maximum quantity for this price type: number x-jsonld: '@id': schema:Number example: 100 minQuantity: description: Minimum quantity for this price type: number x-jsonld: '@id': schema:Number example: 1 unitCode: description: Unit code for the quoted price (e.g., KWH, MIN, H, MON) type: string x-jsonld: '@id': schema:unitCode example: KWH unitQuantity: description: Quantity of the unit type: number x-jsonld: '@id': schema:Number example: 1 unitText: description: Unit for the quoted price (e.g., kWh, minute, hour, month) type: string x-jsonld: '@id': schema:unitText example: kWh x-jsonld: '@id': schema:QuantitativeValue additionalProperties: false x-tags: - common RatingForm: # Move to schema.beckn.io/RatingForm/v2.0 $id: https://schema.beckn.io/RatingForm/v2.0 $schema: "https://json-schema.org/draft/2020-12/schema" description: A form designed to capture rating and feedback from a user. This can be used by both BAP and BPP to fetch ratings and feedback of their respective users. title: RatingForm x-tags: [common] type: object properties: '@context': type: string format: uri const: "https://schema.beckn.io/" '@type': type: string default: RatingForm x-jsonld: '@id': beckn:RatingForm target: description: The entity being rated type: object properties: '@context': type: string format: uri const: "https://schema.beckn.io/" '@type': type: string default: RatingTarget x-jsonld: '@id': beckn:RatingTarget id: description: ID of the entity being rated (order/item/fulfillment/provider/agent). type: string ratingTargetType: description: What is being rated. type: string enum: [Order, Fulfillment, FulfillmentStage, Provider, Agent] range: oneOf: - type: object properties: bestRating: description: Maximum of the rating scale (default 5 if omitted). type: number worstRating: description: Minimum of the rating scale (default 1 or 0 if omitted). type: number - type: array description: A custom rating range indexed from 0 to n items: type: object properties: index: type: integer minimum: 0 value: $ref: "#/components/schemas/Descriptor" feedbackForm: description: A feedback form sent along with a rating request type: object feedbackRequired: type: boolean description: Specifies whether feedback after rating is required for acceptance of rating required: - '@context' - '@type' - target - feedbackRequired additionalProperties: false RatingInput: $id: https://schema.beckn.io/RatingInput/v2.0 title: RatingInput description: | A rating input form. Extends FormInput with the @type fixed to beckn:RatingForm, indicating that this form instance is specifically a rating form. allOf: - type: object - type: object properties: '@type': type: string const: 'beckn:RatingForm' Rating: $id: https://schema.beckn.io/Rating oneOf: - $ref: '#/components/schemas/Rating' - title: Rating type: object description: Aggregated rating information for an entity. Aligns with schema.org/AggregateRating semantics. properties: '@context': type: string format: uri const: https://schema.beckn.io/ '@type': type: string default: beckn:Rating minValue: description: Rating value (typically 0-5) type: number maxValue: description: Number of ratings type: integer minimum: 0 x-jsonld: '@id': schema:ratingCount reviewText: description: Optional textual review or comment type: string x-jsonld: '@id': schema:reviewBody additionalProperties: false x-tags: - common Resource: $id: 'https://schema.beckn.io/Resource/v2.0' type: object description: > A minimal, domain-neutral abstraction representing any discoverable, referenceable, or committable unit of value, capability, service, entitlement, or asset within the network. Examples: - A retail product SKU, a mobility ride, a job role, a carbon credit unit, a dataset/API entitlement, a training course, a clinic service slot. Designed for composability through `resourceAttributes` where domain packs can plug in their specific fields without changing the core. required: ["@context", "@type", "id", "descriptor"] properties: "@context": type: string format: uri description: JSON-LD context URI for the core Resource schema "@type": type: string description: Type of the core Resource const: "beckn:Resource" id: type: string description: Globally unique identifier of the resource. descriptor: $ref: '#/components/schemas/Descriptor' resourceAttributes: description: All the properties of a resource that describe its value, its terms of usage, fulfillment, and consideration $ref: '#/components/schemas/Attributes' Settlement: $id: 'https://schema.beckn.io/Settlement/v2.0' type: object properties: "@context": type: string format: uri description: The domain-specific context in which this settlement is taking place. examples: - https://schema.beckn.io/Settlement/2.0/context.jsonld - https://schema.beckn.io/RetailOrderSettlement/2.0/context.jsonld - https://schema.beckn.io/P2PTradeSettlement/context.jsonld "@type": type: string description: Type of settlement within the context of this settlement examples: - "beckn:Settlement" - "beckn:MonetaryTransfer" - "beckn:TokenTransfer" - "beckn:CreditSettlement" - "beckn:AssetTransfer" - "beckn:ServiceSettlement" default: "beckn:MonetaryTransfer" id: type: string considerationId: $ref: '#/components/schemas/Consideration/properties/id' status: type: string enum: - DRAFT - COMMITTED - COMPLETE settlementTerms: type: array items: $ref: '#/components/schemas/SettlementTerm' settlementActions: type: array items: $ref: '#/components/schemas/SettlementAction' settlementAttributes: $ref: '#/components/schemas/Attributes' SettlementAction: $id: 'https://schema.beckn.io/SettlementAction/v2.0' type: object properties: settlementTermId: $ref: '#/components/schemas/SettlementTerm/properties/id' status: $ref: '#/components/schemas/Descriptor' from: $ref: '#/components/schemas/Participant' to: $ref: '#/components/schemas/Participant' method: $ref: '#/components/schemas/SettlementMethod' instrument: $ref: '#/components/schemas/SettlementInstrument' SettlementInstrument: type: object properties: '@context': type: string '@type': type: string id: type: string descriptor: $ref: '#/components/schemas/Descriptor' SettlementMethod: type: object properties: '@context': type: string '@type': type: string id: type: string descriptor: $ref: '#/components/schemas/Descriptor' SettlementTerm: $id: 'https://schema.beckn.io/SettlementTerm/v2.0' type: object properties: id: type: string committed: type: boolean default: false commitments: type: array items: type: object properties: id: $ref: '#/components/schemas/Commitment/properties/id' required: - id performance: required: - id oneOf: - type: object properties: id: $ref: '#/components/schemas/Performance/properties/id' - $ref: '#/components/schemas/Performance' type: string trigger: $ref: '#/components/schemas/ActionTrigger' eligibleInstrument: $ref: '#/components/schemas/SettlementInstrument' schedule: $ref: '#/components/schemas/Schedule' from: $ref: '#/components/schemas/Participant' to: $ref: '#/components/schemas/Participant' eligibleMethods: type: array items: $ref: '#/components/schemas/SettlementMethod' settlementTermAttributes: $ref: '#/components/schemas/Attributes' Schedule: $id: 'https://schema.beckn.io/Schedule/v2.0' title: Schedule description: > A schedule defines a repeating time period used to describe a regularly occurring Event. At a minimum a schedule will specify repeatFrequency which describes the interval between occurrences of the event. Additional information can be provided to specify the duration of occurrences, an exception to the schedule (exceptDate), and an end condition (either numberOfRepeats, repeatCount or endDate). Modeled after https://schema.org/Schedule. type: object properties: byDay: description: > Defines the day(s) of the week on which a recurring Event takes place. More specifically, to specify the day(s) of the week, use DayOfWeek; for daily recurrence, use schema:DayOfWeek/Everyday. A string value may also be used, for example "Sunday", "MO" (for Monday), or "MO TU" (for Monday and Tuesday). oneOf: - type: string description: A day-of-week string (e.g. "Monday", "MO", "MO TU WE") - type: array items: type: string description: Day-of-week strings (e.g. "Monday", "MO") byMonth: description: > Defines the month(s) of the year on which a recurring Event takes place. Specified as an Integer between 1-12. January is 1. oneOf: - type: integer minimum: 1 maximum: 12 - type: array items: type: integer minimum: 1 maximum: 12 byMonthDay: description: > Defines the day(s) of the month on which a recurring Event takes place. Specified as an Integer between 1-31. oneOf: - type: integer minimum: 1 maximum: 31 - type: array items: type: integer minimum: 1 maximum: 31 byMonthWeek: description: > Defines the week(s) of the month on which a recurring Event takes place. Specified as an Integer between 1-5. For clarity, byMonthWeek is best used in conjunction with byDay to indicate concepts like the first and third Mondays of a month. oneOf: - type: integer minimum: 1 maximum: 5 - type: array items: type: integer minimum: 1 maximum: 5 duration: description: > The duration of the item (e.g., using ISO 8601 duration format). type: string format: duration example: PT1H30M endDate: description: > The end date and time of the item (in ISO 8601 date format). type: string format: date-time example: "2025-12-31T23:59:59Z" endTime: description: > The end time of the item. For a reserved event or service (e.g. EventReservation), the time that it is expected to end. For actions that span a period of time, when the action was performed. e.g. John wrote a book from January to December. For media, including audio and video, it's the time offset of the end of a clip within a larger file. type: string format: time example: "18:00:00" exceptDate: description: > Defines a Date or DateTime during which a scheduled Event will not take place. The property allows exceptions to a Schedule to be specified. If an exception is specified as a DateTime then only the event that would have started at that specific date and time should be excluded from the schedule. If an exception is specified as a Date then any event that is scheduled for that 24 hour period should be excluded from the schedule. This allows a whole day to be excluded from the schedule without having to itemise every scheduled event. oneOf: - type: string format: date - type: string format: date-time - type: array items: oneOf: - type: string format: date - type: string format: date-time repeatCount: description: > Defines the number of times a recurring Event will take place. type: integer minimum: 1 repeatFrequency: description: > Defines the frequency at which Events will occur according to a schedule Schedule. The intervals between events should be defined as a Duration of time. A schema:repeatFrequency value can be specified as either an ISO 8601 string (e.g. "P1W" for weekly) or by using one of the standard values from schema.org such as "Daily", "Weekly", "Monthly", "Yearly". type: string example: P1W scheduleTimezone: description: > Indicates the timezone for which the time(s) indicated in the Schedule are given. The value provided should be among those listed in the IANA Time Zone Database. type: string example: Asia/Kolkata startDate: description: > The start date and time of the item (in ISO 8601 date format). type: string format: date-time example: "2025-01-01T00:00:00Z" startTime: description: > The start time of the item. For a reserved event or service (e.g. EventReservation), the time that it is expected to start. For actions that span a period of time, when the action was performed. e.g. John wrote a book from January to December. type: string format: time example: "09:00:00" Signature: title: Beckn HTTP Signature description: | A digitally signed authentication credential in the HTTP `Authorization` header. Follows draft-cavage-http-signatures-12 as profiled by BECKN-006. format: ``` Signature keyId="{subscriberId}|{uniqueKeyId}|{algorithm}", algorithm="{algorithm}",created="{unixTimestamp}",expires="{unixTimestamp}", headers="{signedHeaders}",signature="{base64Signature}" ``` | Attribute | Description | |-----------|-------------| | `keyId` | `{subscriberId}|{uniqueKeyId}|{algorithm}` — FQDN, registry UUID, algorithm | | `algorithm` | MUST be `ed25519` | | `created` | Unix timestamp when the signature was created | | `expires` | Unix timestamp when the signature expires | | `headers` | Space-separated signed headers. MUST include `(created)`, `(expires)`, `digest` | | `signature` | Base64-encoded Ed25519 signature over the signing string | Signing string: `(created): {value}\n(expires): {value}\ndigest: BLAKE-512={digest}` where `digest` is a BLAKE2b-512 hash of the request body, Base64-encoded. type: string pattern: '^Signature keyId="[^|"]+\|[^|"]+\|[^"]+",algorithm="[^"]+",created="\d+",expires="\d+",headers="[^"]+",signature="[A-Za-z0-9+/]+=*"$' Support: $id: https://schema.beckn.io/Support description: Describes a support session info title: Support type: object properties: '@context': type: string format: uri default: https://schema.beckn.io/ '@type': type: string const: "beckn:Support" orderId: description: The order against which support is required type: string descriptor: description: A description of the nature of support needed $ref: '#/components/schemas/Descriptor' channels: description: Available support channels described in individual linked data JSON objects type: array minItems: 1 items: $ref: '#/components/schemas/Attributes' required: - '@context' - '@type' additionalProperties: false x-tags: - common Tracking: $id: https://schema.beckn.io/Tracking description: Information regarding live tracking of the fufillment of a contract title: Tracking type: object properties: '@context': description: TBD type: string format: uri default: https://schema.beckn.io/ '@type': description: TBD type: string default: beckn:Tracking refId: description: Tracking reference ID for the tracking session. Could be the Order ID, Fulfillment ID, Fulfillment Stage ID, or any other unique tracking identifier type: string status: type: string enum: - ACTIVE - INACTIVE - NOT-SUPPORTED url: description: Link/handle to off-network tracking UI or endpoint. type: string format: uri required: - '@context' - '@type' - url - status x-jsonld: '@type': schema:TrackAction trackingStatus: $.trackingStatus schema:target: $.url additionalProperties: false x-tags: - common JSONLDHeaders: type: object properties: '@context': description: The JSON-LD context in which the attached object is being instantiated in. type: string format: uri default: https://schema.beckn.io/ '@type': description: The JSON-LD type in which the attached object type: string default: beckn:Tracking required: ['@context', '@type'] TimePeriod: $id: "https://schema.beckn.io/TimePeriod/v2.1" description: Time window with date-time precision for availability/validity title: TimePeriod x-tags: [common] type: object properties: '@type': description: JSON-LD type for a date-time period type: string example: TimePeriod startDate: description: Start instant (inclusive) type: string format: date-time example: '2025-01-27T09:00:00Z' x-jsonld: '@id': schema:startDate endDate: description: End instant (exclusive or inclusive per domain semantics) type: string format: date-time example: '2025-12-31T23:59:59Z' x-jsonld: '@id': schema:endDate startTime: description: Start time of the time period type: string format: time example: 09:00:00 x-jsonld: '@id': schema:startTime endTime: description: End time of the time period type: string format: time example: '22:00:00' x-jsonld: '@id': schema:endTime required: - '@type' anyOf: - required: - startDate - required: - endDate - required: - startTime - endTime additionalProperties: false # ── Ack schema (shared by Ack, AckNoCallback, NackBadRequest, NackUnauthorized responses) ── AckSchema: $id: 'https://schema.beckn.io/Ack' title: Ack oneOf: - type: object - type: object properties: status: description: ACK if the request was accepted; NACK if rejected. type: string enum: - ACK - NACK signature: description: Counter-signature proving the receiver authenticated and processed the inbound request. $ref: '#/components/schemas/CounterSignature' error: description: Optional error detail explaining why no callback will follow. $ref: '#/components/schemas/Error' required: - status - signature responses: Ack: description: Synchronous receipt acknowledgement returned for every accepted Beckn request. content: application/json: schema: $ref: '#/components/schemas/AckSchema' AckNoCallback: description: | Request received but no callback will follow (e.g. agents not found, inventory unavailable, provider closed, context.try preview complete). content: application/json: schema: allOf: - $ref: '#/components/schemas/AckSchema' - required: - status - signature - error NackBadRequest: description: 'NACK — Bad Request: Malformed or invalid request; the server could not parse or validate the payload.' content: application/json: schema: allOf: - $ref: '#/components/schemas/AckSchema' - type: object properties: status: type: string const: NACK error: $ref: '#/components/schemas/Error' NackUnauthorized: description: Invalid or missing authentication credentials; signature could not be verified. content: application/json: schema: allOf: - $ref: '#/components/schemas/AckSchema' - type: object properties: status: type: string const: NACK error: $ref: '#/components/schemas/Error' ServerError: description: Internal failure on the network participant's application; the request could not be processed. The response body MAY contain an `error` object with additional details. content: application/json: schema: type: object properties: error: $ref: '#/components/schemas/Error'