changedOutput schema / (root)
Previous value: -nullNew value: +{
+ "properties": {
+ "agent_key": {
+ "description": "The bearer key for every follow-up call on this session, shown ONCE and never again. Send it as \"Authorization: Bearer <key>\". It is a credential: use it, do not read it out to the traveller.",
+ "type": "string"
+ },
+ "api": {
+ "description": "The HTTP endpoints for this session, all taking the agent_key as a bearer token.",
+ "properties": {
+ "cancel": {
+ "description": "POST here to cancel the session.",
+ "type": "string"
+ },
+ "complete": {
+ "description": "POST here to complete the purchase, which is where payment happens.",
+ "type": "string"
+ },
+ "session": {
+ "description": "GET this to re-read the session and its current totals.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "session",
+ "complete",
+ "cancel"
+ ],
+ "type": "object"
+ },
+ "note": {
+ "description": "How to use the key and how long the prices hold. Worth following literally.",
+ "type": "string"
+ },
+ "session": {
+ "description": "The priced checkout session, in the same shape the agentic HTTP API returns it.",
+ "properties": {
+ "buyer": {
+ "description": "The buyer, when one was given. Null when no email was supplied, in which case ask for one before completing.",
+ "properties": {
+ "email": {
+ "description": "Where the eSIM is sent.",
+ "type": "string"
+ }
+ },
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "capabilities": {
+ "description": "What this session supports.",
+ "properties": {
+ "payment": {
+ "properties": {
+ "handlers": {
+ "description": "The ways this session can be paid.",
+ "items": {
+ "properties": {
+ "config": {
+ "description": "Handler-specific settings.",
+ "properties": {
+ "default_asset": {
+ "description": "Default asset for a crypto handler.",
+ "type": "string"
+ },
+ "settlement": {
+ "description": "\"synchronous\" settles during completion; \"asynchronous\" settles later, so a 200 is not yet a purchase.",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "display_name": {
+ "description": "Handler written for a person.",
+ "type": "string"
+ },
+ "id": {
+ "description": "Handler id to name when completing the session.",
+ "type": "string"
+ },
+ "name": {
+ "description": "Fully qualified handler name.",
+ "type": "string"
+ },
+ "psp": {
+ "description": "Which processor settles it.",
+ "type": "string"
+ },
+ "requires_delegate_payment": {
+ "description": "Whether the agent must mint a delegated payment token first.",
+ "type": "boolean"
+ },
+ "requires_pci_compliance": {
+ "description": "Whether card data passes through the agent.",
+ "type": "boolean"
+ },
+ "spec": {
+ "description": "Where the handler is documented.",
+ "type": "string"
+ },
+ "version": {
+ "description": "Handler version.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "id",
+ "name",
+ "display_name",
+ "version",
+ "spec",
+ "requires_delegate_payment",
+ "requires_pci_compliance",
+ "psp",
+ "config"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "handlers"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "payment"
+ ],
+ "type": "object"
+ },
+ "created_at": {
+ "description": "ISO 8601 creation timestamp.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "currency": {
+ "description": "Lower-case ISO 4217 code every amount is in, e.g. \"eur\".",
+ "type": "string"
+ },
+ "expires_at": {
+ "description": "ISO 8601 timestamp after which this session can no longer be completed.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "fulfillment_options": {
+ "description": "How the eSIM is delivered. Instant and free, stated explicitly so nobody has to guess whether shipping is coming.",
+ "items": {
+ "properties": {
+ "description": {
+ "description": "What the traveller receives, and when.",
+ "type": "string"
+ },
+ "id": {
+ "description": "Option id.",
+ "type": "string"
+ },
+ "title": {
+ "description": "Option title.",
+ "type": "string"
+ },
+ "totals": {
+ "description": "What delivery costs. Always zero.",
+ "items": {
+ "description": "The delivery line, always zero.",
+ "properties": {
+ "amount": {
+ "description": "Amount in minor units (cents) of the session currency. A discount is NEGATIVE, so the lines sum to the total.",
+ "type": "integer"
+ },
+ "display_text": {
+ "description": "The line written for a person.",
+ "type": "string"
+ },
+ "type": {
+ "description": "What this line is, e.g. \"subtotal\", \"discount\", \"total\".",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "display_text",
+ "amount"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "type": {
+ "description": "Always \"digital\" here: an eSIM has nothing to ship.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "id",
+ "title",
+ "description",
+ "totals"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "id": {
+ "description": "Session id, used in every follow-up call.",
+ "type": "string"
+ },
+ "line_items": {
+ "description": "One entry per plan in the basket.",
+ "items": {
+ "properties": {
+ "base_amount": {
+ "description": "Price of one unit, in minor units.",
+ "type": "integer"
+ },
+ "id": {
+ "description": "Line id.",
+ "type": "string"
+ },
+ "item": {
+ "properties": {
+ "id": {
+ "description": "The plan id bought on this line.",
+ "type": "string"
+ },
+ "quantity": {
+ "description": "How many.",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "id",
+ "quantity"
+ ],
+ "type": "object"
+ },
+ "subtotal": {
+ "description": "Line subtotal, in minor units.",
+ "type": "integer"
+ },
+ "title": {
+ "description": "Plan name, for display.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "total": {
+ "description": "Line total, in minor units.",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "id",
+ "item",
+ "base_amount",
+ "subtotal",
+ "total",
+ "title"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "links": {
+ "description": "Seller policies, for a buyer who asks.",
+ "items": {
+ "properties": {
+ "type": {
+ "description": "Which document this is, e.g. \"terms_of_use\".",
+ "type": "string"
+ },
+ "url": {
+ "description": "Where it lives.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "url"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "messages": {
+ "description": "Anything the agent must read before completing: payment instructions, a gateway minimum this basket does not clear, or a warning that settlement is still pending.",
+ "items": {
+ "properties": {
+ "code": {
+ "description": "Machine-readable message code, e.g. \"payment_instructions\", \"below_payment_minimum\", \"awaiting_settlement\".",
+ "type": "string"
+ },
+ "content": {
+ "description": "The message itself. Payment instructions arrive here as fields (address, exact amount, memo): pass them through EXACTLY, never reformatted or rounded.",
+ "type": [
+ "object",
+ "string"
+ ]
+ },
+ "content_type": {
+ "description": "\"application/json\" when `content` is an object, \"text/plain\" when it is a sentence.",
+ "type": "string"
+ },
+ "type": {
+ "description": "Whether this is information or a caution.",
+ "enum": [
+ "info",
+ "warning"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "code",
+ "content_type",
+ "content"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "order": {
+ "description": "The order this session produced, once it has one. Null until then.",
+ "properties": {
+ "id": {
+ "description": "The order id.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "id"
+ ],
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "payment_handler_id": {
+ "description": "The handler this session will settle through.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "price_locked_until": {
+ "description": "ISO 8601 timestamp until which these totals hold. After it, re-read the session for fresh totals rather than quoting these.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "protocol": {
+ "description": "Agentic Commerce Protocol version this session speaks.",
+ "type": "string"
+ },
+ "status": {
+ "description": "Where the session is: \"ready_for_payment\" means it can be completed; \"complete_in_progress\" means payment has not settled yet and the purchase is NOT done; \"completed\" means the eSIM is on its way. Also \"incomplete\", \"not_ready_for_payment\", \"canceled\" and \"expired\".",
+ "type": "string"
+ },
+ "totals": {
+ "description": "The money, ordered so the lines read down to the total.",
+ "items": {
+ "description": "One money line.",
+ "properties": {
+ "amount": {
+ "description": "Amount in minor units (cents) of the session currency. A discount is NEGATIVE, so the lines sum to the total.",
+ "type": "integer"
+ },
+ "display_text": {
+ "description": "The line written for a person.",
+ "type": "string"
+ },
+ "type": {
+ "description": "What this line is, e.g. \"subtotal\", \"discount\", \"total\".",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "display_text",
+ "amount"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "updated_at": {
+ "description": "ISO 8601 update timestamp.",
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "id",
+ "protocol",
+ "status",
+ "currency",
+ "line_items",
+ "totals",
+ "fulfillment_options",
+ "capabilities",
+ "buyer",
+ "payment_handler_id",
+ "messages",
+ "links",
+ "expires_at",
+ "price_locked_until",
+ "order",
+ "created_at",
+ "updated_at"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "session",
+ "agent_key",
+ "api",
+ "note"
+ ],
+ "type": "object"
+}