Version 0.1 (Non-Normative)
- 1. Introduction
- 2. Scope
- 3. Intended Audience
- 4. Conventions and Terminology
- 5. Terminology
- 6. Example User Journey
- 7. Reference Architecture
- 8. Creating an Open Network for Peer to Peer Energy Trading
- 9. Schema overview
- 9.1. v2 Composable Schema Architecture
- 9.2. Schema Composition Points
- 9.3. EnergyResource (Item.itemAttributes)
- 9.4. EnergyTradeOffer (Offer.offerAttributes)
- 9.5. EnergyTradeContract (Order.orderAttributes)
- 9.6. EnergyOrderItem (OrderItem.orderItemAttributes)
- 9.7. EnergyTradeDelivery (EnergyOrderItem.fulfillmentAttributes)
- 10. API Reference & examples
- 11. Additional Resources
- 12. Additional Resources
Table of contents and section auto-numbering was done using Markdown-All-In-One vscode extension. Specifically Markdown All in One: Create Table of Contents and Markdown All in One: Add/Update section numbers commands accessible via vs code command pallete.
Example jsons were imported directly from source of truth elsewhere in this repo inline by inserting the pattern below within all json expand blocks, and running this script, e.g. python3 scripts/embed_example_json.py path_to_markdown_file.md.
<details><summary><a href="/path_to_file_from_root">txt_with_json_keyword</a></summary>
</details>
This document provides an implementation guidance for deploying peer to peer (P2P) energy trading services using the Beckn Protocol ecosystem. Peer to peer energy trading enables energy producers (prosumers) to directly sell excess energy to consumers.
Peer-to-peer (P2P) energy trading enables decentralized energy exchange that benefits all participants while strengthening the grid. For consumers, P2P markets offer lower prices during periods of abundant renewable supply (such as mid-day solar or nightly wind), creating demand for supply that might otherwise be curtailed. For producers, these markets may provide higher prices incentivizing the renewable energy generation. Grid operators benefit through reduced transmission losses, local supply-demand balancing, and new revenue streams from wheeling charges on P2P transactions. Additionally, prosumers with accumulated net-metering credits can monetize them through P2P trades, converting credits into cash. These benefits extend beyond direct participants, as reduced grid congestion and improved efficiency ultimately lower costs for all ratepayers.
P2P trades are executed virtually before the delivery hour based on estimated load and generation, with actual energy flows potentially deviating from contracts. However, the economic incentives, namely better revenue for adhering to contracts and penalties for deviations, naturally align producer and consumer behavior toward delivering contracted energy. Each trade contract references a real or virtual meter for post-delivery deviation measurement, with utilities maintaining visibility and control through network policies that limit trade volumes based on sanctioned load or generation at each meter. Virtual meters enable aggregators to balance supply and demand across multiple participants, as any net deviation from zero flow through these virtual meters incurs penalties, creating a self-regulating mechanism for grid stability.
- Architecture patterns for peer-to-peer energy marketplace implementation using Beckn Protocol
- Discovery of energy trading partners.
- Some recommendations for BAPs, BPPs and NFOs on how to map protocol API calls to internal systems (or vice-versa).
- Session management and billing coordination between BAP, BPP and the utility BPP.
This document does NOT cover:
- Processes for customer onboarding, meter validation and settlement.
- Fraud prevention: e.g. if a producer strikes a deal with two consumers, settlement mechanics should be aware of total commited trade flows at a meter and apportion the shortfall against it.
- Cyber-security and best practices to ensure privacy of market participants by guarding of personally identifiable information data.
- Payment guarantees or ACH hold until fulfillment to cover the cost trade participant reneging or defaulting on payment.
- Energy Trading Platforms: Platforms that want to participate in P2P trading on behalf of prosumers and consumers
- Technology Integrators: Technology providers building adaptors between existing DERs and applications
- System Architects: Designing scalable, interoperable P2P trading ecosystems
- Business Stakeholders: Understanding technical capabilities and implementation requirements for P2P marketplace strategies
- Standards Organizations: Evaluating interoperability approaches for future P2P standards development
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described here.
| Acronym | Full Form/Description | Description |
|---|---|---|
| BAP | Beckn Application Platform | Consumer-facing application that initiates transactions. |
| BPP | Beckn Provider Platform | Service provider platform that responds to BAP requests. |
| NFO | Network Facilitator Organization | Organization responsible for the adoption and growth of the network. Usually the custodian of the network’s registry. |
| CDS | Catalog Discovery Service | Enables discovery of energy services from BPPs in the network by providing a cache service for catalogs. |
| MDMS | Meter Data Management System | Platform that enables collection, storage and processing of smart meter data |
| RMS | Revenue Management System | Platform that enables money flows throughout the transaction and post fulfillment |
This walkthrough demonstrates a complete P2P energy trading transaction:
Nisha, who has a large rooftop solar is hoping to get better returns than 3 INR/kwh for the surplus energy mid-day and wants to sell it at 6 INR/kwh. She is eligible to participate and is enrolled as a prosumer in a peer to peer trading app (BPP), which publishes the offer to catalog discovery service (CDS).
In parallel, nearby, Swati runs a small mill which has a sanctioned load of 20kw. Anticipating large seasonal demand, she is looking to purchase cheaper energy than the utility import price of of 10 INR/kwh between 10am to 6pm for next week. Swati is eligible to participate and is already enrolled as a consumer on a different peer to peer energy trading app (BAP), and declares her intent to buy with above price and time of day filters.
To her delight, the Beckn network helps her discovers Nisha's offer of renewable energy at 6 INR/kwh between 12am to 4pm on all days in that week. With wheeling charges of 1 INR/kwh, the total 8 INR/kwh is still 20% cheaper than importing.
She initiates in an order of 20kw. The (BAP) app knows and shares her meter number with the seller's app (BPP), which in turn shares both with the utility BPP which knows the sanctioned import & export for each meter and existing trades. Utility BPP applies a 50% cap policy and replies back saying that upto 10kw of trade is allowed and adds wheeling charges to the quote. It also adds terms & conditions that specify that any underconsumption by Swati will be treated as a spot export by her reimbursed at 3 INR/kwh and any underproduction by solar farm by the farm is treated as a spot import at 10$/kwh. After this Swati confirms the 8 INR/kwh final order with her BAP, solar farm BPP in turn cascaded it to utility BPP and utility BPP acknowledges, locks and logs the trade and deducts it from the further trading allowance in those hours for both Swati & Nisha.
On the delivery day, the floor mill is busy and consumes 400 kwh from the rooftop solar and saves on its in energy costs. The solar farm gains additional revenue, and utility gets revenue for the upkeep of transmission & to cover the administration cost. Utility BPP sends the final settlement including the wheeling and deviation charges to Swati & the solar farm. Swati pays the solar farm BPP for the trade itself via her BAP.
Scenario: Consumer (BAP: bap.energy-consumer.com) buys 10 kWh from Producer (BPP: bpp.energy-provider.com) on Oct 4, 2025, 10:00 AM - 6:00 PM. Source meter: 100200300, Target meter: 98765456. Transaction ID: txn-energy-001.
sequenceDiagram
participant P2P Trading BAP
participant CDS
participant P2P Trading BPP
participant Utility Company
P2P Trading BPP-->>CDS: upload(Item/Offer changes)
Note over P2P Trading BAP, Utility Company: Opening Bell
P2P Trading BAP->>+CDS: discover
CDS-->>-P2P Trading BAP: on_discover
Note over P2P Trading BAP, P2P Trading BPP: Post-discovery, BAP calls BPP directly for transaction APIs
P2P Trading BAP->>+P2P Trading BPP: select
P2P Trading BPP-->>-P2P Trading BAP: on_select
P2P Trading BAP->>+P2P Trading BPP: init (Trading Order)
P2P Trading BPP->>+Utility Company: cascaded init (Initialze a delivery order)
Note right of Utility Company: 1. Calculate wheeling charges<br/>2. remaining trading limit
Utility Company-->>-P2P Trading BPP: on_init (Wheeling charges, remaining trading limit etc. )
P2P Trading BPP-->>-P2P Trading BAP: cascaded_on_init
P2P Trading BAP->>+P2P Trading BPP: confirm (Trading Order)
P2P Trading BPP->>+Utility Company: cascaded confirm (Initialize a delivery order)
Note right of Utility Company: 1. Log trade<br/>2. Deduct from trading limits.
Utility Company-->>-P2P Trading BPP: on_confirm (remaining trading limit etc. )
P2P Trading BPP-->>-P2P Trading BAP: on_confirm (Trading Order)
Note over P2P Trading BAP, Utility Company: Closing Bell
Note over P2P Trading BAP, Utility Company: Fulfillment
Utility Company->> Utility Company: Calculate total actual energy <br> surplus produced by provider
alt if total produced energy is less than total traded
Utility Company->> Utility Company: Calculate penalty charges <br> (Will be adjusted in the provider's monthly bill)
else if total produced energy is more than total traded
Utility Company->> Utility Company: Calculate amount to be paid to provider <br> (Total Surplus - Total Traded ) X Grid buying rate"
end
Utility Company->> Utility Company: Apportion total actual energy <br> produced in proportion to <br> energy promised across all trades <br> on that day before closing bell
loop Send on_update to each consumer(P2P Trading BPP) containing updated order details
Utility Company->>+P2P Trading BPP: on_update (updated Delivery Order details)
end
loop Send cascaded on_update to each P2P Trading BAP containing updated order details
P2P Trading BPP->>+P2P Trading BAP: cascaded on_update (updated Delivery Order details)
end
1. Discover - Consumer searches for solar energy with JSONPath filters (sourceType == 'SOLAR', deliveryMode == 'GRID_INJECTION', availableQuantity >= 10.0).
Request: discover-request.json | Response: discover-response.json
Result: Found energy-resource-solar-001 at $0.15/kWh, 30.5 kWh available
2. Select - Consumer selects item and receives quote breakdown.
Request: select-request.json | Response: select-response.json
Result: Quote $4.00 ($1.50 energy + $2.50 wheeling)
3. Init - Consumer provides meter IDs (100200300 → 98765456), time window, and payment details. BPP may cascade to Utility for load verification and wheeling charges.
Request: init-request.json | Response: init-response.json
Cascaded Flow: cascaded-init-request.json | cascaded-on-init-response.json
Result: Order initialized, contract PENDING. Utility BPP responds with wheeling charges in orderValue.components and remaining trading limits in orderAttributes.remainingTradingLimit.
4. Confirm - Consumer confirms order to activate contract. BPP may cascade to Utility to log the trade and deduct from trading limits.
Request: confirm-request.json | Response: confirm-response.json
Cascaded Flow: cascaded-confirm-request.json | cascaded-on-confirm-response.json
Result: Contract ACTIVE, settlement cycle settle-2024-10-04-001 created. Utility BPP logs trade and responds with updated remaining trading limits in orderAttributes.remainingTradingLimit.
5. Status (In Progress) - Consumer monitors delivery progress. BPP updates meter readings and telemetry every 15-30 minutes.
Request: status-request.json | Response: status-response.json
Result: Delivery IN_PROGRESS, 9.8 kWh delivered (98%), real-time telemetry
6. Status (Completed) - Consumer checks final status after delivery completion.
Response: status-response-completed.json
Result: Delivery COMPLETED, 10.0 kWh delivered, settlement SETTLED ($4.00)
Summary: Transaction completed in ~8.5 hours. 10.0 kWh delivered. Total cost $4.00. Daily settlement cycle processed.
The section defines the reference ecosystem architecture that is used for building this implementation guide.
TBD
- Prosumers and consumers with smart meters.
- Beckn One Global Root Registry
- Beckn One Catalog Discovery Service
- Beckn Application Platforms
- Beckn Provider Platforms
- Peer to Peer trading Registry
TODO: Explain the role of each entity in detail for P2P trading, and whether they are required or optional and API interface to them.
TODO: move this section into a seperate ../core_spec/ folder, and reference from there in implementation guides of EV charging, P2P tradig etc.
To create an open network for energy trading requires all the producers, prosumers and consumers BAPs, BPPs, to be able to discover each other and become part of a common club. This club is manifested in the form of a Registry maintained by an NFO.
The NP Registry serves as the root of addressability and trust for all network participants. It maintains comprehensive details such as the participant’s globally unique identifier (ID), network address (Beckn API URL), public key, operational domains, and assigned role (e.g., BAP, BPP, CDS). In addition to managing participant registration, authentication, authorization, and permission control, the Registry oversees participant verification, activation, and overall lifecycle management, ensuring that only validated and authorized entities can operate within the network.
You can publish your registries at DeDi.global.
To get started, any platform that has implemented Beckn Protocol MUST create a globally unique namespace for themselves.
All NPs (BAPs, BPPs, CDS’es) MUST register as a user on dedi.global and claim a unique namespace against their FQDN to become globally addressable. As part of the claiming process, the user must prove ownership of the namespace by verifying the ownership of their domain. Namespace would be at an organisation level. You can put your organisation name as the name of the namespace.
Once the namespace is claimed, each NP MUST create a Beckn NP registry in the namespace to list their subscriber details. While creating the registry, the user MUST configure it with the subscriber schema. Example of a registry name can be subscription-details.
In the registry that is created, NPs MUST publish their subscription details including their ID, network endpoints, public keys, operational domains and assigned roles (BAP, BPP) as records.
Detailed steps to create namespaces and registries in dedi.global can be found here.
Once the registry is created and details are published, the namespace and the registry name of the newly created registry should be shared with the beckn one team.
An NFO MAY register as a user on dedi.global and claim a unique namespace against their FQDN. As part of the claiming process, the user must prove ownership of that namespace by verifying the ownership of that domain. The NFO name can be set as the name of the namespace. Note: A calibrated roll out of this infrastructure is planned and hence before it is open to the general public NFOs are advised to share their own domain and the domains of their NPs to the Beckn One team so that they can be whitelisted which will allow the NPs to verify the same using TXT records in their DNS.
Network facilitators MAY create registries under their own namespace using the subscriber reference schema to point to either whole registries or records created by the NPs in their own namespaces. Example of a registry name can be subscription-details.
In the registry that is created, NFOs MAY publish records which act as pointers to either whole registries or records created by the NPs records. The URL field in the record would be the lookup URL for a registry or a record as per DeDi protocol.
Example: For referencing another registry created by an NP, the record details created would be:
{
"url": "https://.dedi.global/dedi/lookup/example-company/subscription-details",
"type": "Registry",
"subscriber_id": "example-company.com"
}Here example-company is the namespace of the NP, and all records added in the registry is referenced here.
If only one record in the registry needs to be referenced, then the record details created would be:
{
"url": "https://.dedi.global/dedi/lookup/example-company/subscription-details/energy-bap",
"type": "Record",
"subscriber_id": "example-company.com"
}Here energy-bap is the name of the record created by the NP in this registry. Only that record is referenced here.
Detailed steps to create namespaces and registries in dedi.global can be found here.
Once the registry is created and details are published, the namespace and the registry name of the newly created registry should be shared with the beckn one team.
This section contains instructions to set up and test the protocol stack for transactions.
All NPs SHOULD install the Beckn ONIX adapter to quickly get set up and become Beckn Protocol compliant. Click here) to learn how to set up Beckn ONIX.
A detailed Configuration Guide is available here. A quick read of key concepts from the link is recommended.
Specifically, please use the following configuration:
- Configure dediregistry plugin instead of registry plugin. Read more here.
- Start with using Simplekeymanager plugin during development, read more here. For production deployment, you may setup vault.
- For routing calls to Catalog Discovery Service, refer to routing configuration here.
Step 1 : Download the postman collection, from here.
Step 2 : Run API calls
If you are a BAP
- Configure the collection/environment variables to the newly installed Beckn ONIX adapter URL and other variables in the collection.
- Select the discover example and hit send
- You should see the service catalog response
If you are a BPP
- Configure the collection/environment variables to the newly installed Beckn ONIX adapter URL and other variables in the collection.
- Select the on_status example and hit send
- You should see the response in your console
Beckn Protocol v2 provides a composable schema architecture that enables:
- Modular Attribute Bundles: Energy-specific attributes attached to core Beckn objects
- JSON-LD Semantics: Full semantic interoperability
- Standards Alignment: Integration with IEEE 2030.5 (mRID), OCPP, OCPI
- Flexible Discovery: Meter-based discovery and filtering
┌─────────────────────────────────────────────────────────┐
│ Core Beckn Objects │
│ Item | Offer | Order | Fulfillment | Provider │
└─────────────────────────────────────────────────────────┘
│
│ Attach Attributes
▼
┌─────────────────────────────────────────────────────────┐
│ Energy* Attribute Bundles │
│ EnergyResource | EnergyTradeOffer | EnergyTradeContract │
│ EnergyTradeDelivery │
└─────────────────────────────────────────────────────────┘
| Attribute Bundle | Attach To | Purpose |
|---|---|---|
| EnergyResource | Item.itemAttributes |
Energy source characteristics (source type, delivery mode, meter ID, availability) |
| EnergyTradeOffer | Offer.offerAttributes |
Pricing models, settlement types, wheeling charges, validity windows |
| EnergyTradeContract | Order.orderAttributes |
Contract status, meter IDs, settlement cycles, billing cycles |
| EnergyOrderItem | OrderItem.orderItemAttributes |
Wrapper containing customerAttributes and optional fulfillmentAttributes |
| EnergyTradeDelivery | EnergyOrderItem.fulfillmentAttributes |
Per-orderItem delivery status, meter readings with time windows, energy allocation |
Purpose: Describes tradable energy resources
Key Attributes:
sourceType: SOLAR, BATTERY, GRID, HYBRID, RENEWABLEdeliveryMode: EV_CHARGING, BATTERY_SWAP, V2G, GRID_INJECTIONmeterId: IEEE 2030.5 mRID (e.g.,"100200300")availableQuantity: Available energy in kWhproductionWindow: Time window when energy is availablesourceVerification: Verification status and certificates
Example:
{
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-new/refs/heads/main/schema/EnergyResource/v0.2/context.jsonld",
"@type": "EnergyResource",
"sourceType": "SOLAR",
"deliveryMode": "GRID_INJECTION",
"meterId": "100200300",
"availableQuantity": 30.5,
"productionWindow": {
"start": "2024-10-04T10:00:00Z",
"end": "2024-10-04T18:00:00Z"
}
}Purpose: Defines pricing and settlement terms for energy trades
Key Attributes:
pricingModel: PER_KWH, TIME_OF_DAY, SUBSCRIPTION, FIXEDsettlementType: REAL_TIME, HOURLY, DAILY, WEEKLY, MONTHLYwheelingCharges: Utility transmission chargesminimumQuantity/maximumQuantity: Tradable quantity limitsvalidityWindow: Offer validity periodtimeOfDayRates: Time-based pricing (for TIME_OF_DAY model)
Example:
{
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-new/refs/heads/main/schema/EnergyTradeOffer/v0.2/context.jsonld",
"@type": "EnergyTradeOffer",
"pricingModel": "PER_KWH",
"settlementType": "DAILY",
"wheelingCharges": {
"amount": 2.5,
"currency": "USD",
"description": "PG&E Grid Services wheeling charge"
},
"minimumQuantity": 1.0,
"maximumQuantity": 100.0
}Purpose: Tracks commercial agreements and contract lifecycle
Key Attributes:
contractStatus: PENDING, ACTIVE, COMPLETED, TERMINATEDsourceMeterId/targetMeterId: IEEE 2030.5 mRIDcontractedQuantity: Contracted energy in kWhtradeStartTime/tradeEndTime: Contract time windowsettlementCycles: Array of settlement periodsbillingCycles: Array of billing periodswheelingCharges: Utility charges breakdown
Example:
{
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-new/refs/heads/main/schema/EnergyTradeContract/v0.2/context.jsonld",
"@type": "EnergyTradeContract",
"contractStatus": "ACTIVE",
"sourceMeterId": "100200300",
"targetMeterId": "98765456",
"contractedQuantity": 10.0,
"settlementCycles": [...],
"billingCycles": [...]
}Purpose: Wrapper schema for per-orderItem attributes containing customer information and optional fulfillment tracking
Location: beckn:orderItemAttributes
Key Attributes:
customerAttributes: Contains EnergyCustomer schema with customer meter and utility info (always required)fulfillmentAttributes: Contains EnergyTradeDelivery schema with delivery tracking (only in on_status/on_update)
Example:
{
"beckn:orderItemAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-new/refs/heads/p2p-trading/schema/EnergyOrderItem/v0.1/context.jsonld",
"@type": "EnergyOrderItem",
"customerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-new/refs/heads/p2p-trading/schema/EnergyCustomer/v0.1/context.jsonld",
"@type": "EnergyCustomer",
"meterId": "der://meter/98765456",
"utilityCustomerId": "UTIL-CUST-123456"
},
"fulfillmentAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-new/refs/heads/p2p-trading/schema/EnergyTradeDelivery/v0.2/context.jsonld",
"@type": "EnergyTradeDelivery",
"deliveryStatus": "IN_PROGRESS",
"deliveryMode": "GRID_INJECTION",
"deliveredQuantity": 7.5,
"meterReadings": [...],
"lastUpdated": "2024-10-04T15:00:00Z"
}
}
}Purpose: Tracks physical energy transfer and delivery status per orderItem
Location: Nested within beckn:orderItemAttributes.fulfillmentAttributes (not at top-level Order)
When Populated: Only in on_status and on_update responses. NOT present in init/confirm flows.
Key Attributes:
deliveryStatus: PENDING, IN_PROGRESS, COMPLETED, FAILEDdeliveryMode: EV_CHARGING, BATTERY_SWAP, V2G, GRID_INJECTIONdeliveredQuantity: Total quantity delivered so far in kWhmeterReadings: Array of meter readings with time windows (see below)curtailedQuantity: Optional, quantity curtailed from contract (kWh)curtailmentReason: Optional, reason code (GRID_OUTAGE, EMERGENCY, CONGESTION, MAINTENANCE, OTHER)lastUpdated: UTC timestamp of last update
Meter Readings Structure (IEC 61968/ESPI compliant):
{
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2024-10-04T06:00:00Z",
"schema:endTime": "2024-10-04T09:00:00Z"
},
"deliveredEnergy": 0.0, // Energy TO customer (imported from grid) - ESPI flowDirection=1
"receivedEnergy": 7.5, // Energy FROM customer (exported to grid) - ESPI flowDirection=19
"allocatedEnergy": 7.5, // Net energy allocated for this trade
"unit": "kWh"
}Example (within EnergyOrderItem.fulfillmentAttributes):
{
"beckn:orderItemAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-new/refs/heads/p2p-trading/schema/EnergyOrderItem/v0.1/context.jsonld",
"@type": "EnergyOrderItem",
"customerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-new/refs/heads/p2p-trading/schema/EnergyCustomer/v0.1/context.jsonld",
"@type": "EnergyCustomer",
"meterId": "der://meter/98765456",
"utilityCustomerId": "UTIL-CUST-123456"
},
"fulfillmentAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-new/refs/heads/p2p-trading/schema/EnergyTradeDelivery/v0.2/context.jsonld",
"@type": "EnergyTradeDelivery",
"deliveryStatus": "IN_PROGRESS",
"deliveryMode": "GRID_INJECTION",
"deliveredQuantity": 7.5,
"meterReadings": [
{
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2024-10-04T06:00:00Z",
"schema:endTime": "2024-10-04T09:00:00Z"
},
"deliveredEnergy": 0.0,
"receivedEnergy": 7.5,
"allocatedEnergy": 7.5,
"unit": "kWh"
}
],
"lastUpdated": "2024-10-04T15:00:00Z"
}
}
}Note: Top-level beckn:fulfillment is no longer used for energy delivery tracking. Each orderItem tracks its own fulfillment independently via fulfillmentAttributes.
Purpose: Search for available energy resources
Endpoint: POST /discover
v1 to v2 Mapping:
- v1
message.intent.item.quantity.selected.measure→ v2message.filters.expression(JSONPath filter onavailableQuantity) - v1
message.intent.fulfillment.stops[].time.range.start→ v2message.filters.expression(JSONPath filter onproductionWindow.start) - v1
message.intent.fulfillment.stops[].time.range.end→ v2message.filters.expression(JSONPath filter onproductionWindow.end) - Note: v2 does not support
intentobject. All search parameters are expressed via JSONPath filters.
Request Example
{
"context": {
"version": "2.0.0",
"action": "discover",
"timestamp": "2024-10-04T10:00:00Z",
"message_id": "msg-discover-001",
"transaction_id": "txn-energy-001",
"bap_id": "bap.energy-consumer.com",
"bap_uri": "https://bap.energy-consumer.com",
"bpp_id": "bpp.energy-provider.com",
"bpp_uri": "https://bpp.energy-provider.com",
"ttl": "PT30S",
"domain": "beckn.one:deg:p2p-trading:2.0.0",
"location": {
"city": {
"code": "BLR",
"name": "Bangalore"
},
"country": {
"code": "IND",
"name": "India"
}
},
"schema_context": [
"https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyResource/v0.2/context.jsonld"
]
},
"message": {
"filters": {
"type": "jsonpath",
"expression": "$[?('p2p-trading-pilot-network' == @.beckn:networkId && @.beckn:itemAttributes.sourceType == 'SOLAR' && @.beckn:itemAttributes.deliveryMode == 'GRID_INJECTION' && @.beckn:itemAttributes.availableQuantity >= 10.0 )]"
}
}
}
Immediate successful Response
{
"ack_status": "ACK",
"timestamp": "2025-10-14T07:31:05Z"
}Async Response Example: `on_discover`
{
"context": {
"version": "2.0.0",
"action": "on_discover",
"timestamp": "2024-10-04T10:00:05Z",
"message_id": "msg-on-discover-001",
"transaction_id": "txn-energy-001",
"bap_id": "bap.energy-consumer.com",
"bap_uri": "https://bap.energy-consumer.com",
"bpp_id": "bpp.energy-provider.com",
"bpp_uri": "https://bpp.energy-provider.com",
"ttl": "PT30S",
"domain": "beckn.one:deg:p2p-trading:2.0.0"
},
"message": {
"catalogs": [
{
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Catalog",
"beckn:id": "catalog-energy-001",
"beckn:bppId": "bpp.energy-provider.com",
"beckn:bppUri": "https://bpp.energy-provider.com",
"beckn:descriptor": {
"@type": "beckn:Descriptor",
"schema:name": "Solar Energy Trading Catalog"
},
"beckn:items": [
{
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Item",
"beckn:networkId": ["p2p-trading-pilot-network"],
"beckn:isActive": true,
"beckn:id": "energy-resource-solar-001",
"beckn:descriptor": {
"@type": "beckn:Descriptor",
"schema:name": "Solar Energy - 30.5 kWh"
},
"beckn:provider": {
"beckn:id": "provider-solar-farm-001",
"beckn:descriptor": {
"@type": "beckn:Descriptor",
"schema:name": "Solar Farm 001"
}
},
"beckn:itemAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyResource/v0.2/context.jsonld",
"@type": "EnergyResource",
"sourceType": "SOLAR",
"deliveryMode": "GRID_INJECTION",
"certificationStatus": "Carbon Offset Certified",
"meterId": "der://meter/100200300",
"availableQuantity": 30.5,
"productionWindow": [
{
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T10:00:00Z",
"schema:endTime": "2026-01-09T18:00:00Z"
}
],
"sourceVerification": {
"verified": true,
"verificationDate": "2024-09-01T00:00:00Z",
"certificates": [
"https://example.com/certs/solar-panel-cert.pdf"
]
},
"productionAsynchronous": true
}
}
],
"beckn:offers": [
{
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Offer",
"beckn:id": "offer-morning-001",
"beckn:descriptor": {
"@type": "beckn:Descriptor",
"schema:name": "Morning Solar Energy Offer - 6am-12pm"
},
"beckn:provider": "provider-solar-farm-001",
"beckn:items": [
"energy-resource-solar-001"
],
"beckn:offerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOffer/v0.2/context.jsonld",
"@type": "EnergyTradeOffer",
"pricingModel": "PER_KWH",
"settlementType": "DAILY",
"sourceMeterId": "der://meter/100200300",
"wheelingCharges": {
"amount": 2.5,
"currency": "USD",
"description": "PG&E Grid Services wheeling charge"
},
"minimumQuantity": 1.0,
"maximumQuantity": 100.0,
"validityWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T00:00:00Z",
"schema:endTime": "2026-01-09T23:59:59Z"
},
"beckn:price": {
"value": 0.15,
"currency": "USD",
"unitText": "kWh"
},
"beckn:maxQuantity": {
"unitQuantity": 20.0,
"unitText": "kWh",
"unitCode": "KWH"
},
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T06:00:00Z",
"schema:endTime": "2026-01-09T12:00:00Z"
}
}
},
{
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Offer",
"beckn:id": "offer-afternoon-001",
"beckn:descriptor": {
"@type": "beckn:Descriptor",
"schema:name": "Afternoon Solar Energy Offer - 12pm-6pm"
},
"beckn:provider": "provider-solar-farm-001",
"beckn:items": [
"energy-resource-solar-001"
],
"beckn:offerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOffer/v0.2/context.jsonld",
"@type": "EnergyTradeOffer",
"pricingModel": "PER_KWH",
"settlementType": "DAILY",
"sourceMeterId": "der://meter/100200300",
"wheelingCharges": {
"amount": 2.5,
"currency": "USD",
"description": "PG&E Grid Services wheeling charge"
},
"minimumQuantity": 1.0,
"maximumQuantity": 100.0,
"validityWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T00:00:00Z",
"schema:endTime": "2026-01-09T23:59:59Z"
},
"beckn:price": {
"value": 0.18,
"currency": "USD",
"unitText": "kWh"
},
"beckn:maxQuantity": {
"unitQuantity": 15.0,
"unitText": "kWh",
"unitCode": "KWH"
},
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T12:00:00Z",
"schema:endTime": "2026-01-09T18:00:00Z"
}
}
}
]
}
]
}
}
Key Points:
- No Intent Object: v2 does not support
intentobject in discover requests. All search parameters are expressed via JSONPath filters. - Quantity Filter: Filter by
itemAttributes.availableQuantity >= 10.0in JSONPath expression - Time Range Filter: Filter by
productionWindow.startandproductionWindow.endto match desired trade time windowproductionWindow.start <= '2024-10-04T10:00:00Z'- Energy available from start time or earlierproductionWindow.end >= '2024-10-04T18:00:00Z'- Energy available until end time or later
- JSONPath Filters: Use JSONPath filters to search by
itemAttributes.sourceType,itemAttributes.deliveryMode,itemAttributes.availableQuantity, anditemAttributes.productionWindow - Response: Includes full Item with EnergyResource attributes and Offer with EnergyTradeOffer attributes
Purpose: Select items and offers to build an order
Endpoint: POST /select
Request Example
{
"context": {
"version": "2.0.0",
"action": "select",
"timestamp": "2024-10-04T10:15:00Z",
"message_id": "msg-select-001",
"transaction_id": "txn-energy-001",
"bap_id": "bap.energy-consumer.com",
"bap_uri": "https://bap.energy-consumer.com",
"bpp_id": "bpp.energy-provider.com",
"bpp_uri": "https://bpp.energy-provider.com",
"ttl": "PT30S",
"domain": "beckn.one:deg:p2p-trading:2.0.0"
},
"message": {
"order": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Order",
"beckn:orderStatus": "CREATED",
"beckn:seller": "provider-solar-farm-001",
"beckn:buyer": {
"beckn:id": "buyer-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Buyer"
},
"beckn:orderAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOrder/v0.2/context.jsonld",
"@type": "EnergyTradeOrder",
"bap_id": "bap.energy-consumer.com",
"bpp_id": "bpp.energy-provider.com",
"total_quantity": 25.0
},
"beckn:orderItems": [
{
"beckn:orderedItem": "energy-resource-solar-001",
"beckn:orderItemAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyOrderItem/v0.1/context.jsonld",
"@type": "EnergyOrderItem",
"providerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyCustomer/v0.1/context.jsonld",
"@type": "EnergyCustomer",
"meterId": "der://meter/98765456",
"utilityCustomerId": "UTIL-CUST-123456"
}
},
"beckn:quantity": {
"unitQuantity": 15.0,
"unitText": "kWh"
},
"beckn:acceptedOffer": {
"beckn:id": "offer-morning-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Offer",
"beckn:descriptor": {
"@type": "beckn:Descriptor",
"schema:name": "Morning Solar Energy Offer"
},
"beckn:provider": "provider-solar-farm-001",
"beckn:items": [
"energy-resource-solar-001"
],
"beckn:offerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOffer/v0.2/context.jsonld",
"@type": "EnergyTradeOffer",
"pricingModel": "PER_KWH",
"settlementType": "DAILY",
"sourceMeterId": "der://meter/100200300",
"minimumQuantity": 1.0,
"maximumQuantity": 100.0,
"validityWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T00:00:00Z",
"schema:endTime": "2026-01-09T05:00:00Z"
},
"beckn:price": {
"value": 0.15,
"currency": "USD",
"unitText": "kWh"
},
"beckn:maxQuantity": {
"unitQuantity": 20.0,
"unitText": "kWh",
"unitCode": "KWH"
},
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T06:00:00Z",
"schema:endTime": "2026-01-09T12:00:00Z"
}
}
}
},
{
"beckn:orderedItem": "energy-resource-solar-001",
"beckn:orderItemAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyOrderItem/v0.1/context.jsonld",
"@type": "EnergyOrderItem",
"providerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyCustomer/v0.1/context.jsonld",
"@type": "EnergyCustomer",
"meterId": "der://meter/98765456",
"utilityCustomerId": "UTIL-CUST-123456"
}
},
"beckn:quantity": {
"unitQuantity": 10.0,
"unitText": "kWh"
},
"beckn:acceptedOffer": {
"beckn:id": "offer-afternoon-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Offer",
"beckn:descriptor": {
"@type": "beckn:Descriptor",
"schema:name": "Afternoon Solar Energy Offer"
},
"beckn:provider": "provider-solar-farm-001",
"beckn:items": [
"energy-resource-solar-001"
],
"beckn:offerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOffer/v0.2/context.jsonld",
"@type": "EnergyTradeOffer",
"pricingModel": "PER_KWH",
"settlementType": "DAILY",
"sourceMeterId": "der://meter/100200300",
"minimumQuantity": 1.0,
"maximumQuantity": 100.0,
"validityWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T00:00:00Z",
"schema:endTime": "2026-01-09T05:00:00Z"
},
"beckn:price": {
"value": 0.18,
"currency": "USD",
"unitText": "kWh"
},
"beckn:maxQuantity": {
"unitQuantity": 15.0,
"unitText": "kWh",
"unitCode": "KWH"
},
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T12:00:00Z",
"schema:endTime": "2026-01-09T18:00:00Z"
}
}
}
}
]
}
}
}
Immediate successful Response
{
"ack_status": "ACK",
"timestamp": "2025-10-14T07:31:05Z"
}Asynchronous Response Example: `on_select`
{
"context": {
"version": "2.0.0",
"action": "on_select",
"timestamp": "2024-10-04T10:15:05Z",
"message_id": "msg-on-select-001",
"transaction_id": "txn-energy-001",
"bap_id": "bap.energy-consumer.com",
"bap_uri": "https://bap.energy-consumer.com",
"bpp_id": "bpp.energy-provider.com",
"bpp_uri": "https://bpp.energy-provider.com",
"ttl": "PT30S",
"domain": "beckn.one:deg:p2p-trading:2.0.0"
},
"message": {
"order": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Order",
"beckn:orderStatus": "CREATED",
"beckn:seller": "provider-solar-farm-001",
"beckn:buyer": {
"beckn:id": "buyer-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Buyer"
},
"beckn:orderAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOrder/v0.2/context.jsonld",
"@type": "EnergyTradeOrder",
"bap_id": "bap.energy-consumer.com",
"bpp_id": "bpp.energy-provider.com",
"total_quantity": 25.0
},
"beckn:orderItems": [
{
"beckn:orderedItem": "energy-resource-solar-001",
"beckn:orderItemAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyOrderItem/v0.1/context.jsonld",
"@type": "EnergyOrderItem",
"providerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyCustomer/v0.1/context.jsonld",
"@type": "EnergyCustomer",
"meterId": "der://meter/98765456",
"utilityCustomerId": "UTIL-CUST-123456"
}
},
"beckn:quantity": {
"unitQuantity": 15.0,
"unitText": "kWh"
},
"beckn:acceptedOffer": {
"beckn:id": "offer-morning-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Offer",
"beckn:descriptor": {
"@type": "beckn:Descriptor",
"schema:name": "Morning Solar Energy Offer"
},
"beckn:provider": "provider-solar-farm-001",
"beckn:items": [
"energy-resource-solar-001"
],
"beckn:offerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOffer/v0.2/context.jsonld",
"@type": "EnergyTradeOffer",
"pricingModel": "PER_KWH",
"settlementType": "DAILY",
"sourceMeterId": "der://meter/100200300",
"minimumQuantity": 1.0,
"maximumQuantity": 100.0,
"validityWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T00:00:00Z",
"schema:endTime": "2026-01-09T05:00:00Z"
},
"beckn:price": {
"value": 0.15,
"currency": "USD",
"unitText": "kWh"
},
"beckn:maxQuantity": {
"unitQuantity": 20.0,
"unitText": "kWh",
"unitCode": "KWH"
},
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T06:00:00Z",
"schema:endTime": "2026-01-09T12:00:00Z"
}
}
}
},
{
"beckn:orderedItem": "energy-resource-solar-001",
"beckn:orderItemAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyOrderItem/v0.1/context.jsonld",
"@type": "EnergyOrderItem",
"providerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyCustomer/v0.1/context.jsonld",
"@type": "EnergyCustomer",
"meterId": "der://meter/98765456",
"utilityCustomerId": "UTIL-CUST-123456"
}
},
"beckn:quantity": {
"unitQuantity": 10.0,
"unitText": "kWh"
},
"beckn:acceptedOffer": {
"beckn:id": "offer-afternoon-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Offer",
"beckn:descriptor": {
"@type": "beckn:Descriptor",
"schema:name": "Afternoon Solar Energy Offer"
},
"beckn:provider": "provider-solar-farm-001",
"beckn:items": [
"energy-resource-solar-001"
],
"beckn:offerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOffer/v0.2/context.jsonld",
"@type": "EnergyTradeOffer",
"pricingModel": "PER_KWH",
"settlementType": "DAILY",
"sourceMeterId": "der://meter/100200300",
"minimumQuantity": 1.0,
"maximumQuantity": 100.0,
"validityWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T00:00:00Z",
"schema:endTime": "2026-01-09T05:00:00Z"
},
"beckn:price": {
"value": 0.18,
"currency": "USD",
"unitText": "kWh"
},
"beckn:maxQuantity": {
"unitQuantity": 15.0,
"unitText": "kWh",
"unitCode": "KWH"
},
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T12:00:00Z",
"schema:endTime": "2026-01-09T18:00:00Z"
}
}
}
}
]
}
}
}
Key Points:
- Select items by
beckn:idand specify quantity - Select offers by
beckn:id - Response includes priced quote with breakup
Purpose: Initialize order with fulfillment and payment details
Endpoint: POST /init
v1 to v2 Mapping:
- v1
Order.fulfillments[].stops[].time.range→ v2Order.fulfillments[].stops[].time.range(same structure) - v1
Order.fulfillments[].stops[].location.address(der:// format) → v2Order.fulfillments[].stops[].location.address(IEEE mRID format) - v1
Order.attributes.*→ v2Order.orderAttributes.*(path change)
Request Example
{
"context": {
"version": "2.0.0",
"action": "init",
"timestamp": "2024-10-04T10:20:00Z",
"message_id": "msg-init-001",
"transaction_id": "txn-energy-001",
"bap_id": "bap.energy-consumer.com",
"bap_uri": "https://bap.energy-consumer.com",
"bpp_id": "bpp.energy-provider.com",
"bpp_uri": "https://bpp.energy-provider.com",
"ttl": "PT30S",
"domain": "beckn.one:deg:p2p-trading:2.0.0"
},
"message": {
"order": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Order",
"beckn:orderStatus": "CREATED",
"beckn:seller": "provider-solar-farm-001",
"beckn:buyer": {
"beckn:id": "buyer-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Buyer"
},
"beckn:orderAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOrder/v0.2/context.jsonld",
"@type": "EnergyTradeOrder",
"bap_id": "bap.energy-consumer.com",
"bpp_id": "bpp.energy-provider.com",
"total_quantity": 25.0
},
"beckn:orderItems": [
{
"beckn:orderedItem": "energy-resource-solar-001",
"beckn:orderItemAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyOrderItem/v0.1/context.jsonld",
"@type": "EnergyOrderItem",
"providerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyCustomer/v0.1/context.jsonld",
"@type": "EnergyCustomer",
"meterId": "der://meter/98765456",
"utilityCustomerId": "UTIL-CUST-123456"
}
},
"beckn:quantity": {
"unitQuantity": 15.0,
"unitText": "kWh"
},
"beckn:acceptedOffer": {
"beckn:id": "offer-morning-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Offer",
"beckn:descriptor": {
"@type": "beckn:Descriptor",
"schema:name": "Morning Solar Energy Offer"
},
"beckn:provider": "provider-solar-farm-001",
"beckn:items": [
"energy-resource-solar-001"
],
"beckn:offerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOffer/v0.2/context.jsonld",
"@type": "EnergyTradeOffer",
"pricingModel": "PER_KWH",
"settlementType": "DAILY",
"sourceMeterId": "der://meter/100200300",
"minimumQuantity": 1.0,
"maximumQuantity": 100.0,
"validityWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T00:00:00Z",
"schema:endTime": "2026-01-09T05:00:00Z"
},
"beckn:price": {
"value": 0.15,
"currency": "USD",
"unitText": "kWh"
},
"beckn:maxQuantity": {
"unitQuantity": 20.0,
"unitText": "kWh",
"unitCode": "KWH"
},
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T06:00:00Z",
"schema:endTime": "2026-01-09T12:00:00Z"
}
}
}
},
{
"beckn:orderedItem": "energy-resource-solar-001",
"beckn:orderItemAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyOrderItem/v0.1/context.jsonld",
"@type": "EnergyOrderItem",
"providerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyCustomer/v0.1/context.jsonld",
"@type": "EnergyCustomer",
"meterId": "der://meter/98765456",
"utilityCustomerId": "UTIL-CUST-123456"
}
},
"beckn:quantity": {
"unitQuantity": 10.0,
"unitText": "kWh"
},
"beckn:acceptedOffer": {
"beckn:id": "offer-afternoon-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Offer",
"beckn:descriptor": {
"@type": "beckn:Descriptor",
"schema:name": "Afternoon Solar Energy Offer"
},
"beckn:provider": "provider-solar-farm-001",
"beckn:items": [
"energy-resource-solar-001"
],
"beckn:offerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOffer/v0.2/context.jsonld",
"@type": "EnergyTradeOffer",
"pricingModel": "PER_KWH",
"settlementType": "DAILY",
"sourceMeterId": "der://meter/100200300",
"minimumQuantity": 1.0,
"maximumQuantity": 100.0,
"validityWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T00:00:00Z",
"schema:endTime": "2026-01-09T05:00:00Z"
},
"beckn:price": {
"value": 0.18,
"currency": "USD",
"unitText": "kWh"
},
"beckn:maxQuantity": {
"unitQuantity": 15.0,
"unitText": "kWh",
"unitCode": "KWH"
},
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T12:00:00Z",
"schema:endTime": "2026-01-09T18:00:00Z"
}
}
}
}
],
"beckn:fulfillment": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Fulfillment",
"beckn:id": "fulfillment-energy-001",
"beckn:mode": "DELIVERY"
}
}
}
}
Immediate successful Response
{
"ack_status": "ACK",
"timestamp": "2025-10-14T07:31:05Z"
}Asynchronous Response Example: `on_init`
{
"context": {
"version": "2.0.0",
"action": "on_init",
"timestamp": "2024-10-04T10:20:05Z",
"message_id": "msg-on-init-001",
"transaction_id": "txn-energy-001",
"bap_id": "bap.energy-consumer.com",
"bap_uri": "https://bap.energy-consumer.com",
"bpp_id": "bpp.energy-provider.com",
"bpp_uri": "https://bpp.energy-provider.com",
"ttl": "PT30S",
"domain": "beckn.one:deg:p2p-trading:2.0.0"
},
"message": {
"order": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Order",
"beckn:orderStatus": "CREATED",
"beckn:seller": "provider-solar-farm-001",
"beckn:buyer": {
"beckn:id": "buyer-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Buyer"
},
"beckn:orderAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOrder/v0.2/context.jsonld",
"@type": "EnergyTradeOrder",
"bap_id": "bap.energy-consumer.com",
"bpp_id": "bpp.energy-provider.com",
"total_quantity": 25.0
},
"beckn:orderItems": [
{
"beckn:orderedItem": "energy-resource-solar-001",
"beckn:quantity": {
"unitQuantity": 15.0,
"unitText": "kWh"
},
"beckn:orderItemAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyOrderItem/v0.1/context.jsonld",
"@type": "EnergyOrderItem",
"providerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyCustomer/v0.1/context.jsonld",
"@type": "EnergyCustomer",
"meterId": "der://meter/98765456",
"utilityCustomerId": "UTIL-CUST-123456"
}
},
"beckn:acceptedOffer": {
"beckn:id": "offer-morning-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Offer",
"beckn:descriptor": {
"@type": "beckn:Descriptor",
"schema:name": "Morning Solar Energy Offer"
},
"beckn:provider": "provider-solar-farm-001",
"beckn:items": [
"energy-resource-solar-001"
],
"beckn:offerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOffer/v0.2/context.jsonld",
"@type": "EnergyTradeOffer",
"pricingModel": "PER_KWH",
"settlementType": "DAILY",
"sourceMeterId": "der://meter/100200300",
"minimumQuantity": 1.0,
"maximumQuantity": 100.0,
"validityWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T00:00:00Z",
"schema:endTime": "2026-01-09T05:00:00Z"
},
"beckn:price": {
"value": 0.15,
"currency": "USD",
"unitText": "kWh"
},
"beckn:maxQuantity": {
"unitQuantity": 20.0,
"unitText": "kWh",
"unitCode": "KWH"
},
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T06:00:00Z",
"schema:endTime": "2026-01-09T12:00:00Z"
}
}
}
},
{
"beckn:orderedItem": "energy-resource-solar-001",
"beckn:quantity": {
"unitQuantity": 10.0,
"unitText": "kWh"
},
"beckn:orderItemAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyOrderItem/v0.1/context.jsonld",
"@type": "EnergyOrderItem",
"providerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyCustomer/v0.1/context.jsonld",
"@type": "EnergyCustomer",
"meterId": "der://meter/98765456",
"utilityCustomerId": "UTIL-CUST-123456"
}
},
"beckn:acceptedOffer": {
"beckn:id": "offer-afternoon-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Offer",
"beckn:descriptor": {
"@type": "beckn:Descriptor",
"schema:name": "Afternoon Solar Energy Offer"
},
"beckn:provider": "provider-solar-farm-001",
"beckn:items": [
"energy-resource-solar-001"
],
"beckn:offerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOffer/v0.2/context.jsonld",
"@type": "EnergyTradeOffer",
"pricingModel": "PER_KWH",
"settlementType": "DAILY",
"sourceMeterId": "der://meter/100200300",
"minimumQuantity": 1.0,
"maximumQuantity": 100.0,
"validityWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T00:00:00Z",
"schema:endTime": "2026-01-09T05:00:00Z"
},
"beckn:price": {
"value": 0.18,
"currency": "USD",
"unitText": "kWh"
},
"beckn:maxQuantity": {
"unitQuantity": 15.0,
"unitText": "kWh",
"unitCode": "KWH"
},
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T12:00:00Z",
"schema:endTime": "2026-01-09T18:00:00Z"
}
}
}
}
],
"beckn:fulfillment": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Fulfillment",
"beckn:id": "fulfillment-energy-001",
"beckn:mode": "DELIVERY"
}
}
}
}
Key Points:
- Fulfillment Stops: Must include START and END stops (same as v1)
- Time Range: Include
beckn:time.rangein stops to specify delivery time window (same as v1) - Meter IDs: Use IEEE mRID format (
"100200300") instead of v1'sder://format ("der://pge.meter/100200300") - Response: Includes EnergyTradeContract attributes with PENDING status
Purpose: Confirm and activate the order
Endpoint: POST /confirm
This flow demonstrates the cascaded /init call from the P2P Trading BPP to the Utility Company (Transmission BPP) to register the trade and calculate wheeling charges.
Request Flow: P2P Trading BPP sends a cascaded init request to the Utility BPP with the order details (items, offers, fulfillments, payments).
Response Flow: Utility BPP responds with on_init containing:
- Wheeling charges: Provided in
orderValuewith breakdown incomponentsarray (type:FEE) - Remaining trading limits: Provided in
orderAttributes.remainingTradingLimitincluding:remainingQuantity: Remaining tradable quantity in kWhsanctionedLoad: Breakdown of total, used, and remaining sanctioned loadvalidUntil: Validity timestamp for the limit information
Cascaded Request Example
{
"context": {
"version": "2.0.0",
"action": "init",
"timestamp": "2024-10-04T10:20:00Z",
"message_id": "msg-cascaded-init-001",
"transaction_id": "txn-cascaded-energy-001",
"bap_id": "p2pTrading-bpp.com",
"bap_uri": "https://api.p2pTrading-bpp.com/pilot/bap/energy/v2",
"bpp_id": "example-transmission-bpp.com",
"bpp_uri": "https://api.example-transmission-bpp.com/pilot/bpp/",
"ttl": "PT30S",
"domain": "beckn.one:deg:p2p-trading:2.0.0"
},
"message": {
"order": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Order",
"beckn:orderStatus": "CREATED",
"beckn:seller": "provider-solar-farm-001",
"beckn:buyer": {
"beckn:id": "buyer-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Buyer"
},
"beckn:orderAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOrder/v0.2/context.jsonld",
"@type": "EnergyTradeOrder",
"bap_id": "p2pTrading-bpp.com",
"bpp_id": "example-transmission-bpp.com",
"total_quantity": 15.0
},
"beckn:orderItems": [
{
"beckn:orderedItem": "energy-resource-solar-001",
"beckn:quantity": {
"unitQuantity": 15.0,
"unitText": "kWh"
},
"beckn:orderItemAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyOrderItem/v0.1/context.jsonld",
"@type": "EnergyOrderItem",
"providerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyCustomer/v0.1/context.jsonld",
"@type": "EnergyCustomer",
"meterId": "der://meter/98765456",
"utilityCustomerId": "UTIL-CUST-123456"
}
},
"beckn:acceptedOffer": {
"beckn:id": "offer-morning-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Offer",
"beckn:descriptor": {
"@type": "beckn:Descriptor",
"schema:name": "Morning Solar Energy Offer"
},
"beckn:provider": "provider-solar-farm-001",
"beckn:items": [
"energy-resource-solar-001"
],
"beckn:offerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOffer/v0.2/context.jsonld",
"@type": "EnergyTradeOffer",
"pricingModel": "PER_KWH",
"settlementType": "DAILY",
"sourceMeterId": "der://meter/100200300",
"minimumQuantity": 1.0,
"maximumQuantity": 100.0,
"validityWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T00:00:00Z",
"schema:endTime": "2026-01-09T05:00:00Z"
},
"beckn:price": {
"value": 0.15,
"currency": "USD",
"unitText": "kWh"
},
"beckn:maxQuantity": {
"unitQuantity": 20.0,
"unitText": "kWh",
"unitCode": "KWH"
},
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T06:00:00Z",
"schema:endTime": "2026-01-09T12:00:00Z"
}
}
}
}
],
"beckn:fulfillment": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Fulfillment",
"beckn:id": "fulfillment-energy-001",
"beckn:mode": "DELIVERY"
}
}
}
}
Immediate successful Response
{
"ack_status": "ACK",
"timestamp": "2025-10-14T07:31:05Z"
}Cascaded asynchronous Response Example: `on_init`
{
"context": {
"version": "2.0.0",
"action": "on_init",
"timestamp": "2024-10-04T10:20:05Z",
"message_id": "msg-cascaded-on-init-001",
"transaction_id": "txn-cascaded-energy-001",
"bap_id": "p2pTrading-bpp.com",
"bap_uri": "https://api.p2pTrading-bpp.com/pilot/bap/energy/v2",
"bpp_id": "example-transmission-bpp.com",
"bpp_uri": "https://api.example-transmission-bpp.com/pilot/bpp/",
"ttl": "PT30S",
"domain": "beckn.one:deg:p2p-trading:2.0.0"
},
"message": {
"order": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Order",
"beckn:orderStatus": "CREATED",
"beckn:seller": "provider-solar-farm-001",
"beckn:buyer": {
"beckn:id": "buyer-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Buyer"
},
"beckn:orderAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOrder/v0.2/context.jsonld",
"@type": "EnergyTradeOrder",
"bap_id": "p2pTrading-bpp.com",
"bpp_id": "example-transmission-bpp.com",
"total_quantity": 15.0
},
"beckn:orderItems": [
{
"beckn:orderedItem": "energy-resource-solar-001",
"beckn:quantity": {
"unitQuantity": 15.0,
"unitText": "kWh"
},
"beckn:orderItemAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyOrderItem/v0.1/context.jsonld",
"@type": "EnergyOrderItem",
"providerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyCustomer/v0.1/context.jsonld",
"@type": "EnergyCustomer",
"meterId": "der://meter/98765456",
"utilityCustomerId": "UTIL-CUST-123456"
}
},
"beckn:acceptedOffer": {
"beckn:id": "offer-morning-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Offer",
"beckn:descriptor": {
"@type": "beckn:Descriptor",
"schema:name": "Morning Solar Energy Offer"
},
"beckn:provider": "provider-solar-farm-001",
"beckn:items": [
"energy-resource-solar-001"
],
"beckn:offerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOffer/v0.2/context.jsonld",
"@type": "EnergyTradeOffer",
"pricingModel": "PER_KWH",
"settlementType": "DAILY",
"sourceMeterId": "der://meter/100200300",
"minimumQuantity": 1.0,
"maximumQuantity": 100.0,
"validityWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T00:00:00Z",
"schema:endTime": "2026-01-09T05:00:00Z"
},
"beckn:price": {
"value": 0.15,
"currency": "USD",
"unitText": "kWh"
},
"beckn:maxQuantity": {
"unitQuantity": 20.0,
"unitText": "kWh",
"unitCode": "KWH"
},
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T06:00:00Z",
"schema:endTime": "2026-01-09T12:00:00Z"
}
}
}
}
],
"beckn:fulfillment": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Fulfillment",
"beckn:id": "fulfillment-energy-001",
"beckn:mode": "DELIVERY"
}
}
}
}
Purpose: Confirm and activate the order
Endpoint: POST /confirm
Request Example
{
"context": {
"version": "2.0.0",
"action": "confirm",
"timestamp": "2024-10-04T10:25:00Z",
"message_id": "msg-confirm-001",
"transaction_id": "txn-energy-001",
"bap_id": "bap.energy-consumer.com",
"bap_uri": "https://bap.energy-consumer.com",
"bpp_id": "bpp.energy-provider.com",
"bpp_uri": "https://bpp.energy-provider.com",
"ttl": "PT30S",
"domain": "beckn.one:deg:p2p-trading:2.0.0"
},
"message": {
"order": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Order",
"beckn:orderStatus": "CREATED",
"beckn:seller": "provider-solar-farm-001",
"beckn:buyer": {
"beckn:id": "buyer-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Buyer"
},
"beckn:orderAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOrder/v0.2/context.jsonld",
"@type": "EnergyTradeOrder",
"bap_id": "bap.energy-consumer.com",
"bpp_id": "bpp.energy-provider.com",
"total_quantity": 25.0
},
"beckn:orderItems": [
{
"beckn:orderedItem": "energy-resource-solar-001",
"beckn:orderItemAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyOrderItem/v0.1/context.jsonld",
"@type": "EnergyOrderItem",
"providerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyCustomer/v0.1/context.jsonld",
"@type": "EnergyCustomer",
"meterId": "der://meter/98765456",
"utilityCustomerId": "UTIL-CUST-123456"
}
},
"beckn:quantity": {
"unitQuantity": 15.0,
"unitText": "kWh"
},
"beckn:acceptedOffer": {
"beckn:id": "offer-morning-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Offer",
"beckn:descriptor": {
"@type": "beckn:Descriptor",
"schema:name": "Morning Solar Energy Offer"
},
"beckn:provider": "provider-solar-farm-001",
"beckn:items": [
"energy-resource-solar-001"
],
"beckn:offerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOffer/v0.2/context.jsonld",
"@type": "EnergyTradeOffer",
"pricingModel": "PER_KWH",
"settlementType": "DAILY",
"sourceMeterId": "der://meter/100200300",
"minimumQuantity": 1.0,
"maximumQuantity": 100.0,
"validityWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T00:00:00Z",
"schema:endTime": "2026-01-09T05:00:00Z"
},
"beckn:price": {
"value": 0.15,
"currency": "USD",
"unitText": "kWh"
},
"beckn:maxQuantity": {
"unitQuantity": 20.0,
"unitText": "kWh",
"unitCode": "KWH"
},
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T06:00:00Z",
"schema:endTime": "2026-01-09T12:00:00Z"
}
}
}
},
{
"beckn:orderedItem": "energy-resource-solar-001",
"beckn:orderItemAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyOrderItem/v0.1/context.jsonld",
"@type": "EnergyOrderItem",
"providerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyCustomer/v0.1/context.jsonld",
"@type": "EnergyCustomer",
"meterId": "der://meter/98765456",
"utilityCustomerId": "UTIL-CUST-123456"
}
},
"beckn:quantity": {
"unitQuantity": 10.0,
"unitText": "kWh"
},
"beckn:acceptedOffer": {
"beckn:id": "offer-afternoon-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Offer",
"beckn:descriptor": {
"@type": "beckn:Descriptor",
"schema:name": "Afternoon Solar Energy Offer"
},
"beckn:provider": "provider-solar-farm-001",
"beckn:items": [
"energy-resource-solar-001"
],
"beckn:offerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOffer/v0.2/context.jsonld",
"@type": "EnergyTradeOffer",
"pricingModel": "PER_KWH",
"settlementType": "DAILY",
"sourceMeterId": "der://meter/100200300",
"minimumQuantity": 1.0,
"maximumQuantity": 100.0,
"validityWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T00:00:00Z",
"schema:endTime": "2026-01-09T05:00:00Z"
},
"beckn:price": {
"value": 0.18,
"currency": "USD",
"unitText": "kWh"
},
"beckn:maxQuantity": {
"unitQuantity": 15.0,
"unitText": "kWh",
"unitCode": "KWH"
},
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T12:00:00Z",
"schema:endTime": "2026-01-09T18:00:00Z"
}
}
}
}
],
"beckn:fulfillment": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Fulfillment",
"beckn:id": "fulfillment-energy-001",
"beckn:mode": "DELIVERY"
}
}
}
}
Immediate successful Response
{
"ack_status": "ACK",
"timestamp": "2025-10-14T07:31:05Z"
}Asynchronous Response Example: `on_confirm`
{
"context": {
"version": "2.0.0",
"action": "on_confirm",
"timestamp": "2024-10-04T10:25:05Z",
"message_id": "msg-on-confirm-001",
"transaction_id": "txn-energy-001",
"bap_id": "bap.energy-consumer.com",
"bap_uri": "https://bap.energy-consumer.com",
"bpp_id": "bpp.energy-provider.com",
"bpp_uri": "https://bpp.energy-provider.com",
"ttl": "PT30S",
"domain": "beckn.one:deg:p2p-trading:2.0.0"
},
"message": {
"order": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Order",
"beckn:id": "order-energy-001",
"beckn:orderStatus": "CREATED",
"beckn:seller": "provider-solar-farm-001",
"beckn:buyer": {
"beckn:id": "buyer-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Buyer"
},
"beckn:orderAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOrder/v0.2/context.jsonld",
"@type": "EnergyTradeOrder",
"bap_id": "bap.energy-consumer.com",
"bpp_id": "bpp.energy-provider.com",
"total_quantity": 25.0
},
"beckn:orderItems": [
{
"beckn:orderedItem": "energy-resource-solar-001",
"beckn:quantity": {
"unitQuantity": 15.0,
"unitText": "kWh"
},
"beckn:orderItemAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyOrderItem/v0.1/context.jsonld",
"@type": "EnergyOrderItem",
"providerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyCustomer/v0.1/context.jsonld",
"@type": "EnergyCustomer",
"meterId": "der://meter/98765456",
"utilityCustomerId": "UTIL-CUST-123456"
}
},
"beckn:acceptedOffer": {
"beckn:id": "offer-morning-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Offer",
"beckn:descriptor": {
"@type": "beckn:Descriptor",
"schema:name": "Morning Solar Energy Offer"
},
"beckn:provider": "provider-solar-farm-001",
"beckn:items": [
"energy-resource-solar-001"
],
"beckn:offerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOffer/v0.2/context.jsonld",
"@type": "EnergyTradeOffer",
"pricingModel": "PER_KWH",
"settlementType": "DAILY",
"sourceMeterId": "der://meter/100200300",
"minimumQuantity": 1.0,
"maximumQuantity": 100.0,
"validityWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T00:00:00Z",
"schema:endTime": "2026-01-09T05:00:00Z"
},
"beckn:price": {
"value": 0.15,
"currency": "USD",
"unitText": "kWh"
},
"beckn:maxQuantity": {
"unitQuantity": 20.0,
"unitText": "kWh",
"unitCode": "KWH"
},
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T06:00:00Z",
"schema:endTime": "2026-01-09T12:00:00Z"
}
}
}
},
{
"beckn:orderedItem": "energy-resource-solar-001",
"beckn:quantity": {
"unitQuantity": 10.0,
"unitText": "kWh"
},
"beckn:orderItemAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyOrderItem/v0.1/context.jsonld",
"@type": "EnergyOrderItem",
"providerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyCustomer/v0.1/context.jsonld",
"@type": "EnergyCustomer",
"meterId": "der://meter/98765456",
"utilityCustomerId": "UTIL-CUST-123456"
}
},
"beckn:acceptedOffer": {
"beckn:id": "offer-afternoon-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Offer",
"beckn:descriptor": {
"@type": "beckn:Descriptor",
"schema:name": "Afternoon Solar Energy Offer"
},
"beckn:provider": "provider-solar-farm-001",
"beckn:items": [
"energy-resource-solar-001"
],
"beckn:offerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOffer/v0.2/context.jsonld",
"@type": "EnergyTradeOffer",
"pricingModel": "PER_KWH",
"settlementType": "DAILY",
"sourceMeterId": "der://meter/100200300",
"minimumQuantity": 1.0,
"maximumQuantity": 100.0,
"validityWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T00:00:00Z",
"schema:endTime": "2026-01-09T05:00:00Z"
},
"beckn:price": {
"value": 0.18,
"currency": "USD",
"unitText": "kWh"
},
"beckn:maxQuantity": {
"unitQuantity": 15.0,
"unitText": "kWh",
"unitCode": "KWH"
},
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T12:00:00Z",
"schema:endTime": "2026-01-09T18:00:00Z"
}
}
}
}
],
"beckn:fulfillment": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Fulfillment",
"beckn:id": "fulfillment-energy-001",
"beckn:mode": "DELIVERY"
}
}
}
}
Key Points:
- Contract status changes from PENDING to ACTIVE
- Settlement cycle is initialized
- Order is now active and ready for fulfillment
This flow demonstrates the cascaded /confirm call from the P2P Trading BPP to the Utility Company (Transmission BPP) to log the trade and deduct from trading limits.
Request Flow: P2P Trading BPP sends a cascaded confirm request to the Utility BPP with the order details to finalize the trade registration.
Response Flow: Utility BPP responds with on_confirm containing:
- Contract activation: Contract status set to
ACTIVEinorderAttributes.contractStatus - Settlement cycle: Initialized settlement cycle in
orderAttributes.settlementCycles - Updated remaining trading limits: Provided in
orderAttributes.remainingTradingLimitwith:remainingQuantity: Updated remaining tradable quantity (reduced by the contracted quantity)sanctionedLoad: Updated breakdown showing increasedusedand reducedremainingvalues after trade is loggedvalidUntil: Validity timestamp for the limit information
Cascaded Request Example
{
"context": {
"version": "2.0.0",
"action": "confirm",
"timestamp": "2024-10-04T10:25:00Z",
"message_id": "msg-cascaded-confirm-001",
"transaction_id": "txn-cascaded-energy-001",
"bap_id": "p2pTrading-bpp.com",
"bap_uri": "https://api.p2pTrading-bpp.com/pilot/bap/energy/v2",
"bpp_id": "example-transmission-bpp.com",
"bpp_uri": "https://api.example-transmission-bpp.com/pilot/bpp/",
"ttl": "PT30S",
"domain": "beckn.one:deg:p2p-trading:2.0.0"
},
"message": {
"order": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Order",
"beckn:orderStatus": "CREATED",
"beckn:seller": "provider-solar-farm-001",
"beckn:buyer": {
"beckn:id": "buyer-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Buyer"
},
"beckn:orderAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOrder/v0.2/context.jsonld",
"@type": "EnergyTradeOrder",
"bap_id": "p2pTrading-bpp.com",
"bpp_id": "example-transmission-bpp.com",
"total_quantity": 15.0
},
"beckn:orderItems": [
{
"beckn:orderedItem": "energy-resource-solar-001",
"beckn:quantity": {
"unitQuantity": 15.0,
"unitText": "kWh"
},
"beckn:orderItemAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyOrderItem/v0.1/context.jsonld",
"@type": "EnergyOrderItem",
"providerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyCustomer/v0.1/context.jsonld",
"@type": "EnergyCustomer",
"meterId": "der://meter/98765456",
"utilityCustomerId": "UTIL-CUST-123456"
}
},
"beckn:acceptedOffer": {
"beckn:id": "offer-morning-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Offer",
"beckn:descriptor": {
"@type": "beckn:Descriptor",
"schema:name": "Morning Solar Energy Offer"
},
"beckn:provider": "provider-solar-farm-001",
"beckn:items": [
"energy-resource-solar-001"
],
"beckn:offerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOffer/v0.2/context.jsonld",
"@type": "EnergyTradeOffer",
"pricingModel": "PER_KWH",
"settlementType": "DAILY",
"sourceMeterId": "der://meter/100200300",
"minimumQuantity": 1.0,
"maximumQuantity": 100.0,
"validityWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T00:00:00Z",
"schema:endTime": "2026-01-09T05:00:00Z"
},
"beckn:price": {
"value": 0.15,
"currency": "USD",
"unitText": "kWh"
},
"beckn:maxQuantity": {
"unitQuantity": 20.0,
"unitText": "kWh",
"unitCode": "KWH"
},
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T06:00:00Z",
"schema:endTime": "2026-01-09T12:00:00Z"
}
}
}
}
],
"beckn:fulfillment": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Fulfillment",
"beckn:id": "fulfillment-energy-001",
"beckn:mode": "DELIVERY"
}
}
}
}
Cascaded asynchronous Response Example: `on_confirm`
{
"context": {
"version": "2.0.0",
"action": "on_confirm",
"timestamp": "2024-10-04T10:25:05Z",
"message_id": "msg-cascaded-on-confirm-001",
"transaction_id": "txn-cascaded-energy-001",
"bap_id": "p2pTrading-bpp.com",
"bap_uri": "https://api.p2pTrading-bpp.com/pilot/bap/energy/v2",
"bpp_id": "example-transmission-bpp.com",
"bpp_uri": "https://api.example-transmission-bpp.com/pilot/bpp/",
"ttl": "PT30S",
"domain": "beckn.one:deg:p2p-trading:2.0.0"
},
"message": {
"order": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Order",
"beckn:id": "order-cascaded-utility-001",
"beckn:orderStatus": "CREATED",
"beckn:seller": "provider-solar-farm-001",
"beckn:buyer": {
"beckn:id": "buyer-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Buyer"
},
"beckn:orderAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOrder/v0.2/context.jsonld",
"@type": "EnergyTradeOrder",
"bap_id": "p2pTrading-bpp.com",
"bpp_id": "example-transmission-bpp.com",
"total_quantity": 15.0
},
"beckn:orderItems": [
{
"beckn:orderedItem": "energy-resource-solar-001",
"beckn:quantity": {
"unitQuantity": 15.0,
"unitText": "kWh"
},
"beckn:orderItemAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyOrderItem/v0.1/context.jsonld",
"@type": "EnergyOrderItem",
"providerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyCustomer/v0.1/context.jsonld",
"@type": "EnergyCustomer",
"meterId": "der://meter/98765456",
"utilityCustomerId": "UTIL-CUST-123456"
}
},
"beckn:acceptedOffer": {
"beckn:id": "offer-morning-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Offer",
"beckn:descriptor": {
"@type": "beckn:Descriptor",
"schema:name": "Morning Solar Energy Offer"
},
"beckn:provider": "provider-solar-farm-001",
"beckn:items": [
"energy-resource-solar-001"
],
"beckn:offerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOffer/v0.2/context.jsonld",
"@type": "EnergyTradeOffer",
"pricingModel": "PER_KWH",
"settlementType": "DAILY",
"sourceMeterId": "der://meter/100200300",
"minimumQuantity": 1.0,
"maximumQuantity": 100.0,
"validityWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T00:00:00Z",
"schema:endTime": "2026-01-09T05:00:00Z"
},
"beckn:price": {
"value": 0.15,
"currency": "USD",
"unitText": "kWh"
},
"beckn:maxQuantity": {
"unitQuantity": 20.0,
"unitText": "kWh",
"unitCode": "KWH"
},
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T06:00:00Z",
"schema:endTime": "2026-01-09T12:00:00Z"
}
}
}
}
],
"beckn:fulfillment": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Fulfillment",
"beckn:id": "fulfillment-energy-001",
"beckn:mode": "DELIVERY"
}
}
}
}
Purpose: Query order and delivery status
Endpoint: POST /status
Request Example
{
"context": {
"version": "2.0.0",
"action": "status",
"timestamp": "2024-10-04T15:00:00Z",
"message_id": "msg-status-001",
"transaction_id": "txn-energy-001",
"bap_id": "bap.energy-consumer.com",
"bap_uri": "https://bap.energy-consumer.com",
"bpp_id": "bpp.energy-provider.com",
"bpp_uri": "https://bpp.energy-provider.com",
"ttl": "PT30S",
"domain": "beckn.one:deg:p2p-trading:2.0.0"
},
"message": {
"order": {
"beckn:id": "order-energy-001"
}
}
}Immediate successful Response
{
"ack_status": "ACK",
"timestamp": "2025-10-14T07:31:05Z"
}Asynchronous Response Example: `on_status`
{
"context": {
"version": "2.0.0",
"action": "on_status",
"timestamp": "2024-10-04T15:00:05Z",
"message_id": "msg-on-status-001",
"transaction_id": "txn-energy-001",
"bap_id": "bap.energy-consumer.com",
"bap_uri": "https://bap.energy-consumer.com",
"bpp_id": "bpp.energy-provider.com",
"bpp_uri": "https://bpp.energy-provider.com",
"ttl": "PT30S",
"domain": "beckn.one:deg:p2p-trading:2.0.0"
},
"message": {
"order": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Order",
"beckn:id": "order-energy-001",
"beckn:orderStatus": "CREATED",
"beckn:seller": "provider-solar-farm-001",
"beckn:buyer": {
"beckn:id": "buyer-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Buyer"
},
"beckn:orderItems": [
{
"beckn:orderedItem": "energy-resource-solar-001",
"beckn:quantity": {
"unitQuantity": 15.0,
"unitText": "kWh"
},
"beckn:orderItemAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyOrderItem/v0.1/context.jsonld",
"@type": "EnergyOrderItem",
"providerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyCustomer/v0.1/context.jsonld",
"@type": "EnergyCustomer",
"meterId": "der://meter/98765456",
"utilityCustomerId": "UTIL-CUST-123456"
},
"fulfillmentAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeDelivery/v0.2/context.jsonld",
"@type": "EnergyTradeDelivery",
"deliveryStatus": "IN_PROGRESS",
"deliveryMode": "GRID_INJECTION",
"deliveredQuantity": 7.5,
"meterReadings": [
{
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2024-10-04T06:00:00Z",
"schema:endTime": "2024-10-04T09:00:00Z"
},
"consumedEnergy": 0.0,
"producedEnergy": 7.5,
"allocatedEnergy": 7.5,
"unit": "kWh"
}
],
"lastUpdated": "2024-10-04T15:00:00Z"
}
},
"beckn:acceptedOffer": {
"beckn:id": "offer-morning-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Offer",
"beckn:descriptor": {
"@type": "beckn:Descriptor",
"schema:name": "Morning Solar Energy Offer"
},
"beckn:provider": "provider-solar-farm-001",
"beckn:items": [
"energy-resource-solar-001"
],
"beckn:offerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOffer/v0.2/context.jsonld",
"@type": "EnergyTradeOffer",
"pricingModel": "PER_KWH",
"settlementType": "DAILY",
"sourceMeterId": "der://meter/100200300",
"minimumQuantity": 1.0,
"maximumQuantity": 100.0,
"validityWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T00:00:00Z",
"schema:endTime": "2026-01-09T05:00:00Z"
},
"beckn:price": {
"value": 0.15,
"currency": "USD",
"unitText": "kWh"
},
"beckn:maxQuantity": {
"unitQuantity": 20.0,
"unitText": "kWh",
"unitCode": "KWH"
},
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T06:00:00Z",
"schema:endTime": "2026-01-09T12:00:00Z"
}
}
}
},
{
"beckn:orderedItem": "energy-resource-solar-001",
"beckn:quantity": {
"unitQuantity": 10.0,
"unitText": "kWh"
},
"beckn:orderItemAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyOrderItem/v0.1/context.jsonld",
"@type": "EnergyOrderItem",
"providerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyCustomer/v0.1/context.jsonld",
"@type": "EnergyCustomer",
"meterId": "der://meter/98765456",
"utilityCustomerId": "UTIL-CUST-123456"
},
"fulfillmentAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeDelivery/v0.2/context.jsonld",
"@type": "EnergyTradeDelivery",
"deliveryStatus": "PENDING",
"deliveryMode": "GRID_INJECTION",
"deliveredQuantity": 0.0,
"meterReadings": [],
"lastUpdated": "2024-10-04T15:00:00Z"
}
},
"beckn:acceptedOffer": {
"beckn:id": "offer-afternoon-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Offer",
"beckn:descriptor": {
"@type": "beckn:Descriptor",
"schema:name": "Afternoon Solar Energy Offer"
},
"beckn:provider": "provider-solar-farm-001",
"beckn:items": [
"energy-resource-solar-001"
],
"beckn:offerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOffer/v0.2/context.jsonld",
"@type": "EnergyTradeOffer",
"pricingModel": "PER_KWH",
"settlementType": "DAILY",
"sourceMeterId": "der://meter/100200300",
"minimumQuantity": 1.0,
"maximumQuantity": 100.0,
"validityWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T00:00:00Z",
"schema:endTime": "2026-01-09T05:00:00Z"
},
"beckn:price": {
"value": 0.18,
"currency": "USD",
"unitText": "kWh"
},
"beckn:maxQuantity": {
"unitQuantity": 15.0,
"unitText": "kWh",
"unitCode": "KWH"
},
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T12:00:00Z",
"schema:endTime": "2026-01-09T18:00:00Z"
}
}
}
}
]
}
}
}
Key Points:
- Response includes EnergyTradeContract attributes (contract status)
- Response includes EnergyTradeDelivery attributes (delivery status, meter readings, telemetry)
- Meter readings show energy flow from source to target
- Telemetry provides real-time energy metrics
When a trade has been curtailed (e.g., due to grid outage), the status response includes curtailment information for payment reconciliation:
Curtailed Status Response Example
{
"context": {
"version": "2.0.0",
"action": "on_status",
"timestamp": "2024-10-04T16:00:00Z",
"message_id": "msg-on-status-curtailed-001",
"transaction_id": "txn-energy-001",
"bap_id": "bap.energy-consumer.com",
"bap_uri": "https://bap.energy-consumer.com",
"bpp_id": "bpp.energy-provider.com",
"bpp_uri": "https://bpp.energy-provider.com",
"ttl": "PT30S",
"domain": "beckn.one:deg:p2p-trading:2.0.0"
},
"message": {
"order": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Order",
"beckn:id": "order-energy-001",
"beckn:orderStatus": "PARTIALLYFULFILLED",
"beckn:seller": "provider-solar-farm-001",
"beckn:buyer": {
"beckn:id": "buyer-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Buyer"
},
"beckn:orderItems": [
{
"beckn:orderedItem": "energy-resource-solar-001",
"beckn:quantity": {
"unitQuantity": 15.0,
"unitText": "kWh"
},
"beckn:orderItemAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyOrderItem/v0.1/context.jsonld",
"@type": "EnergyOrderItem",
"providerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyCustomer/v0.1/context.jsonld",
"@type": "EnergyCustomer",
"meterId": "der://meter/98765456",
"utilityCustomerId": "UTIL-CUST-123456"
},
"fulfillmentAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeDelivery/v0.2/context.jsonld",
"@type": "EnergyTradeDelivery",
"deliveryStatus": "COMPLETED",
"deliveryMode": "GRID_INJECTION",
"deliveredQuantity": 10.0,
"curtailedQuantity": 5.0,
"curtailmentReason": "GRID_OUTAGE",
"meterReadings": [
{
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2024-10-04T06:00:00Z",
"schema:endTime": "2024-10-04T14:30:00Z"
},
"consumedEnergy": 0.0,
"producedEnergy": 10.0,
"allocatedEnergy": 10.0,
"unit": "kWh"
}
],
"lastUpdated": "2024-10-04T14:30:00Z"
}
},
"beckn:acceptedOffer": {
"beckn:id": "offer-morning-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Offer",
"beckn:descriptor": {
"@type": "beckn:Descriptor",
"schema:name": "Morning Solar Energy Offer"
},
"beckn:provider": "provider-solar-farm-001",
"beckn:items": [
"energy-resource-solar-001"
],
"beckn:offerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOffer/v0.2/context.jsonld",
"@type": "EnergyTradeOffer",
"pricingModel": "PER_KWH",
"settlementType": "DAILY",
"sourceMeterId": "der://meter/100200300",
"minimumQuantity": 1.0,
"maximumQuantity": 100.0,
"validityWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T00:00:00Z",
"schema:endTime": "2026-01-09T05:00:00Z"
},
"beckn:price": {
"value": 0.15,
"currency": "USD",
"unitText": "kWh"
},
"beckn:maxQuantity": {
"unitQuantity": 20.0,
"unitText": "kWh",
"unitCode": "KWH"
},
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T06:00:00Z",
"schema:endTime": "2026-01-09T12:00:00Z"
}
}
}
},
{
"beckn:orderedItem": "energy-resource-solar-001",
"beckn:quantity": {
"unitQuantity": 10.0,
"unitText": "kWh"
},
"beckn:orderItemAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyOrderItem/v0.1/context.jsonld",
"@type": "EnergyOrderItem",
"providerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyCustomer/v0.1/context.jsonld",
"@type": "EnergyCustomer",
"meterId": "der://meter/98765456",
"utilityCustomerId": "UTIL-CUST-123456"
},
"fulfillmentAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeDelivery/v0.2/context.jsonld",
"@type": "EnergyTradeDelivery",
"deliveryStatus": "FAILED",
"deliveryMode": "GRID_INJECTION",
"deliveredQuantity": 0.0,
"curtailedQuantity": 10.0,
"curtailmentReason": "GRID_OUTAGE",
"meterReadings": [],
"lastUpdated": "2024-10-04T14:30:00Z"
}
},
"beckn:acceptedOffer": {
"beckn:id": "offer-afternoon-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Offer",
"beckn:descriptor": {
"@type": "beckn:Descriptor",
"schema:name": "Afternoon Solar Energy Offer"
},
"beckn:provider": "provider-solar-farm-001",
"beckn:items": [
"energy-resource-solar-001"
],
"beckn:offerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOffer/v0.2/context.jsonld",
"@type": "EnergyTradeOffer",
"pricingModel": "PER_KWH",
"settlementType": "DAILY",
"sourceMeterId": "der://meter/100200300",
"minimumQuantity": 1.0,
"maximumQuantity": 100.0,
"validityWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T00:00:00Z",
"schema:endTime": "2026-01-09T05:00:00Z"
},
"beckn:price": {
"value": 0.18,
"currency": "USD",
"unitText": "kWh"
},
"beckn:maxQuantity": {
"unitQuantity": 15.0,
"unitText": "kWh",
"unitCode": "KWH"
},
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T12:00:00Z",
"schema:endTime": "2026-01-09T18:00:00Z"
}
}
}
}
]
}
}
}
Curtailment Fields for Payment Reconciliation:
curtailedQuantity: Revised trade limit (kWh) - the billable quantitycurtailmentReason: Why curtailment occurred (GRID_OUTAGE,EMERGENCY,CONGESTION,MAINTENANCE,OTHER)curtailmentTime: When the curtailment was issued
Payment Calculation:
- Original contracted:
orderItems[].quantity - Actually delivered:
deliveredQuantity - Billable amount:
min(deliveredQuantity, curtailedQuantity) × price
Purpose: Notify BAP of changes to an active order initiated by the provider (BPP) or utility
Endpoint: POST /on_update (unsolicited callback from BPP to BAP)
In Beckn protocol, on_update can be sent without a preceding update request from BAP. This is the standard "push notification" pattern for provider-initiated changes such as:
- Trade curtailment due to grid outages
- Delivery interruptions
- Settlement adjustments
During active energy delivery, grid operators may need to curtail trades due to:
- Grid outages: Unexpected failures requiring immediate load reduction
- Emergency conditions: Frequency deviations, voltage issues
- Congestion: Transmission capacity limits
- Scheduled maintenance: Planned outages
When this happens, the Utility Company sends an unsolicited on_update to the BPP, which forwards it to the BAP. This enables both parties to reconcile payments based on the revised trade quantity.
sequenceDiagram
participant Utility as Utility Grid Operator
participant BPP as P2P Trading BPP
participant BAP as P2P Trading BAP
Note over Utility: Grid outage detected
Utility->>BPP: on_update (curtailment notification)
Note right of BPP: curtailedQuantity: 10kWh<br/>curtailmentReason: GRID_OUTAGE
BPP->>BAP: on_update (forwarded)
Note over BAP: Update UI, adjust payment
Curtailment Notification Example (`on_update`)
{
"context": {
"version": "2.0.0",
"action": "on_update",
"timestamp": "2024-10-04T14:30:00Z",
"message_id": "msg-on-update-curtailment-001",
"transaction_id": "txn-energy-001",
"bap_id": "bap.energy-consumer.com",
"bap_uri": "https://bap.energy-consumer.com",
"bpp_id": "bpp.energy-provider.com",
"bpp_uri": "https://bpp.energy-provider.com",
"ttl": "PT30S",
"domain": "beckn.one:deg:p2p-trading:2.0.0"
},
"message": {
"order": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Order",
"beckn:id": "order-energy-001",
"beckn:orderStatus": "INPROGRESS",
"beckn:seller": "provider-solar-farm-001",
"beckn:buyer": {
"beckn:id": "buyer-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Buyer"
},
"beckn:orderItems": [
{
"beckn:orderedItem": "energy-resource-solar-001",
"beckn:quantity": {
"unitQuantity": 15.0,
"unitText": "kWh"
},
"beckn:orderItemAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyOrderItem/v0.1/context.jsonld",
"@type": "EnergyOrderItem",
"providerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyCustomer/v0.1/context.jsonld",
"@type": "EnergyCustomer",
"meterId": "der://meter/98765456",
"utilityCustomerId": "UTIL-CUST-123456"
},
"fulfillmentAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeDelivery/v0.2/context.jsonld",
"@type": "EnergyTradeDelivery",
"deliveryStatus": "IN_PROGRESS",
"deliveryMode": "GRID_INJECTION",
"deliveredQuantity": 8.5,
"curtailedQuantity": 6.5,
"curtailmentReason": "GRID_OUTAGE",
"meterReadings": [
{
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2024-10-04T06:00:00Z",
"schema:endTime": "2024-10-04T12:00:00Z"
},
"consumedEnergy": 0.0,
"producedEnergy": 8.5,
"allocatedEnergy": 8.5,
"unit": "kWh"
}
],
"lastUpdated": "2024-10-04T14:30:00Z"
}
},
"beckn:acceptedOffer": {
"beckn:id": "offer-morning-001",
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tags/core-2.0.0-rc-eos-release/schema/core/v2/context.jsonld",
"@type": "beckn:Offer",
"beckn:descriptor": {
"@type": "beckn:Descriptor",
"schema:name": "Morning Solar Energy Offer"
},
"beckn:provider": "provider-solar-farm-001",
"beckn:items": [
"energy-resource-solar-001"
],
"beckn:offerAttributes": {
"@context": "https://raw.githubusercontent.com/beckn/protocol-specifications-v2/tpddl-p2p-trading-pilot-v20260201/schema/EnergyTradeOffer/v0.2/context.jsonld",
"@type": "EnergyTradeOffer",
"pricingModel": "PER_KWH",
"settlementType": "DAILY",
"sourceMeterId": "der://meter/100200300",
"minimumQuantity": 1.0,
"maximumQuantity": 100.0,
"validityWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T00:00:00Z",
"schema:endTime": "2026-01-09T05:00:00Z"
},
"beckn:price": {
"value": 0.15,
"currency": "USD",
"unitText": "kWh"
},
"beckn:maxQuantity": {
"unitQuantity": 20.0,
"unitText": "kWh",
"unitCode": "KWH"
},
"beckn:timeWindow": {
"@type": "beckn:TimePeriod",
"schema:startTime": "2026-01-09T06:00:00Z",
"schema:endTime": "2026-01-09T12:00:00Z"
}
}
}
}
]
}
}
}
Key Points:
on_updateis unsolicited - no precedingupdaterequest needed- Contains
curtailedQuantityfor payment reconciliation curtailmentReasonprovides audit trail for dispute resolution- BAP should update UI and adjust pending payment based on revised quantity
- Beckn 1.0 to 2.0 field mapping: See
./v1_to_v2_field_mapping.md - Taxonomy Reference: See
./taxonomy.md - Solar Energy Discovery: Search for solar energy with grid injection delivery
- Daily Settlement: Contract with daily settlement cycle
- Meter-Based Tracking: Track energy flow using meter readings
- Telemetry Monitoring: Monitor energy delivery with real-time telemetry
This is a specific scenario of P2P trading where the participants come under differnet energy retailers and distribution utilities and engages in direct energy trade. Here, nuances of financial settlement, dispute resolution, energy accounting etc will have to be thought through without affecting ease of participation. More information can be found here Inter-retailer P2P energy trading
- Field Mapping: See
docs/v1_to_v2_field_mapping.md - Taxonomy Reference: See
docs/TAXONOMY.md - Schema Definitions: See
schema/Energy*/v0.2/attributes.yaml - Context Files: See
schema/Energy*/v0.2/context.jsonld - Profile Configuration: See
schema/EnergyResource/v0.2/profile.json
This section gives a general walkthrough of how you would integrate your software with the Beckn network (say the sandbox environment). Refer to the starter kit for details on how to register with the sandbox and get credentials.
Beckn-ONIX is an initiative to promote easy installation and maintenance of a Beckn Network. Apart from the Registry and Gateway components that are required for a network facilitator, Beckn-ONIX provides a Beckn Adapter. A reference implementation of the Beckn-ONIX specification is available at Beckn-ONIX repository. The reference implementation of the Beckn Adapter is called the Protocol Server. Based on whether we are writing the seeker platform or the provider platform, we will be installing the BAP Protocol Server or the BPP Protocol Server respectively.
TODO
If you are writing the seeker platform software, the following are the steps you can follow to build and integrate your application.
- Discovery: Use JSONPath filters to search by energy attributes (sourceType, deliveryMode, availableQuantity, productionWindow)
- Order Management: Track order state through PENDING → ACTIVE → COMPLETED
- Status Polling: Poll status endpoint every 15-30 minutes during active delivery
- Error Handling: Handle cases where delivery fails or quantities don't match
- Settlement: Monitor settlement cycle status for payment processing
TODO
If you are writing the provider platform software, the following are the steps you can follow to build and integrate your application.
- Catalog Management: Keep catalog updated with available energy and accurate production windows
- Meter Readings: Update meter readings regularly during delivery (every 15-30 minutes)
- Telemetry: Provide real-time telemetry data for monitoring
- Settlement: Calculate settlement amounts based on delivered quantity and pricing model
- State Management: Properly transition contract and delivery statuses
TODO
