beckn / beckn/protocol-specifications-v2

All Providers to be made Addressable on Beckn

Open
#138 1 comment 0 reactions 1 assignee Claimed by @ravi-prakash-v View on GitHub
design-discussion documentation enhancement RFC
Dominant language
No language data
Stars
15
Forks
13
PR merge metrics
No merged PRs in 30d

Description

### Summary
This proposal introduces a structural change to the Beckn addressing architecture: **all providers MUST be individually addressable via the registry**, not just the BPPs they are onboarded through.

This evolves the network mental model from *platform-addressability* to *provider-addressability*, while retaining backward compatibility in lookup semantics.

---

### Problem Statement
Currently, the registry only maintains entries for **BPPs (subscriberId = bppId)**. Providers SHOULD be implicitly reachable *through* their BPPs but are not first-class addressable entities.

---

### Proposed Change

#### 1. Provider-Level Registry Entries
- **All providers MUST be registered as first-class records in the registry.**
- Each provider will have:
- `subscriberId = provider.id`
- `role = BPP` (Retained for backward compatibility)

#### 2. Endpoint Resolution Logic
- If a provider is **Self-hosted (e.g., Shopify storefront)** → its own URL is registered.
- If a provider is **Onboarded via an aggregator** → aggregator’s URL is registered against the provider.

#### 3. Key resolution logic
- If a provider is self-hosted (e.g., Shopify storefront), then its own public key is registered.
- If a provider is onboarded via an aggregator** there are two options,
- The aggregator's key is registered, or
- The provider's own key is registered
- Note: The key MUST belong to the entity that will take liability for the fulfillment of the established contract terms.

---

### Runtime Flow Changes

#### Discovery Phase (unchanged structurally)
- BAP calls `discover` on the Discovery Service
- BAP receives `on_discover` response with array of items of type `Catalog`. Each `Catalog` item in the array has a property called `provider` of type `Provider` which contains its identifier at `catalog.provider.id`.

#### Lookup Phase (updated usage)
- BAP calls `lookup` on the Registry: with `subscriberId` set with value of `catalog.provider.id` obtained from the `on_discover` response
- Registry returns records with properties `subscriberId` and `apiUrl`
- BAP sets `context.bppId` with value `subscriberId` and `context.bppUrl` with value of `apiUrl`
- In the `order.participants` array, where the participant is of type `Provider`, the value of `order.participants[].id` MUST be set to the same value as the `context.bppId`.
- Interaction continues as per existing protocol semantics.

---

### Key Observations

- **Registry lookup mechanism remains unchanged**
- Only **cardinality of entries increases**
- **No change to API contracts or verb semantics**
- **Backward compatible** with existing flows

Enables:
- Fine-grained routing
- Provider-level observability
- Better alignment between semantic and network identifiers

---

### Design Implications

| Aspect | Before | After |
|------|--------|------|
| Registry entries | Only BPPs | All Providers |
| Addressability | Platform-level | Provider-level |
| subscriberId meaning | BPP identity | Provider identity |
| Routing | Indirect via BPP | Direct via provider |
| Catalog → Network mapping | Loose | Strong |

---

### Rationale

This change aligns with Beckn’s core principle of **unambiguous, machine-resolvable contracts**:

- A `provider.id` in a catalog is no longer just a semantic identifier — it becomes a **network-resolvable endpoint reference**.
- Eliminates ambiguity between **who is offering value** and **who is addressable on the network**.
- Improves **interoperability and composability** across heterogeneous provider infrastructures.
---

### Conclusion

This is a minimal but high-leverage change:
- No protocol flow changes
- No API redesign
- Significant improvement in **addressability, clarity, and extensibility**

Effectively, this moves Beckn closer to a true **Internet of Value Exchange**, where every economic actor is a **first-class, addressable node**.

---

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.