{"openapi":"3.1.0","info":{"title":"OpenMerchant MPP Platform","description":"Catalog, quote, purchase, discovery, and merchant event APIs, plus published custom APIs and MCP tool HTTP routes. Commerce templates apply to merchants with catalog products; custom operations use concrete merchant paths. Follow each merchant reference for its available operations and OAuth audience.","version":"1.0.0","contact":{"email":"security@openmerchant.dev"},"x-guidance":"This is OpenMerchant’s aggregate MPP surface. Supply a merchant_slug. Catalog reads default to that seller’s default market and locale; pass country, postal_code, or market to select another priced market, and currency for optional FX presentment. Quote and purchase creation still require a binding presentment currency. A merchant that requires customer sign-in first returns a 401 Bearer challenge; after the customer access-token retry, POST purchases returns a Stripe MPP 402 challenge. Retry with the Payment credential for the exact amount."},"x-service-info":{"categories":["web","commerce","marketplace"],"docs":{"homepage":"https://openmerchant.dev","apiReference":"https://api.mpp.openmerchant.dev/openapi.json"}},"x-supported-presentment-currencies":["AED","AUD","BGN","BRL","CAD","CHF","CZK","DKK","EUR","GBP","HKD","HUF","INR","JPY","MXN","MYR","NOK","NZD","PLN","RON","SEK","SGD","THB","USD"],"servers":[{"url":"https://api.mpp.openmerchant.dev"}],"paths":{"/{merchant_slug}/catalog/search":{"post":{"operationId":"listMerchantCatalog","summary":"Search one merchant catalog.","parameters":[{"name":"merchant_slug","in":"path","required":true,"schema":{"type":"string"},"description":"Public OpenMerchant seller slug."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicMppCatalogSearchRequest"}}}},"responses":{"200":{"description":"The merchant catalog.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicMppCatalogResponse"}}}},"404":{"description":"Unknown merchant."},"429":{"description":"A shared request rate limit was exceeded.","headers":{"Retry-After":{"description":"Seconds until this caller may retry.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Limit":{"description":"Request limit for the exhausted window.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Window":{"description":"Length of the exhausted window in seconds.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitExceededResponse"}}}}},"security":[]}},"/{merchant_slug}/catalog/item_locations":{"post":{"operationId":"listMerchantCatalogItemLocations","summary":"List fulfillment locations for one merchant catalog item.","description":"Return the active, publicly published business locations where the selected item or variant is available in the resolved market. Inventory quantities remain private.","parameters":[{"name":"merchant_slug","in":"path","required":true,"schema":{"type":"string"},"description":"Public OpenMerchant seller slug."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicMppCatalogItemLocationsRequest"}}}},"responses":{"200":{"description":"Buyer-visible locations and availability for the selected listing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicMppCatalogItemLocationsResponse"}}}},"404":{"description":"Unknown merchant, item, or variant."},"429":{"description":"A shared request rate limit was exceeded.","headers":{"Retry-After":{"description":"Seconds until this caller may retry.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Limit":{"description":"Request limit for the exhausted window.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Window":{"description":"Length of the exhausted window in seconds.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitExceededResponse"}}}}},"security":[]}},"/{merchant_slug}/catalog/lookup":{"post":{"operationId":"lookupMerchantCatalog","summary":"Look up products in one merchant catalog.","parameters":[{"name":"merchant_slug","in":"path","required":true,"schema":{"type":"string"},"description":"Public OpenMerchant seller slug."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicMppCatalogLookupRequest"}}}},"responses":{"200":{"description":"Resolved products and missing input ids.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicMppCatalogLookupResponse"}}}},"404":{"description":"Unknown merchant."},"429":{"description":"A shared request rate limit was exceeded.","headers":{"Retry-After":{"description":"Seconds until this caller may retry.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Limit":{"description":"Request limit for the exhausted window.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Window":{"description":"Length of the exhausted window in seconds.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitExceededResponse"}}}}},"security":[]}},"/{merchant_slug}/catalog/product":{"post":{"operationId":"getMerchantCatalogProduct","summary":"Get one merchant catalog product.","description":"The canonical product-details read, and the availability surface for bookable listings: add the booking object with a window (date_from/date_until for appointments and classes, check_in/check_out for stays) and the response additionally carries availability - concrete, selectable slots, occurrences, or a stay verdict for the selected variant, cache-limited to seconds. An empty availability answer means genuinely nothing is open (see its truncated flag); booking window fields on a non-bookable listing fail with variant_not_bookable. Availability reads mint nothing - request a quote to pin a price and slot.","parameters":[{"name":"merchant_slug","in":"path","required":true,"schema":{"type":"string"},"description":"Public OpenMerchant seller slug."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicMppCatalogProductRequest"}}}},"responses":{"200":{"description":"Complete catalog product detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicMppCatalogProductResponse"}}}},"404":{"description":"Unknown merchant or product."},"429":{"description":"A shared request rate limit was exceeded.","headers":{"Retry-After":{"description":"Seconds until this caller may retry.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Limit":{"description":"Request limit for the exhausted window.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Window":{"description":"Length of the exhausted window in seconds.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitExceededResponse"}}}}},"security":[]}},"/{merchant_slug}/quotes":{"post":{"operationId":"requestMerchantQuote","summary":"Create a binding or price-on-request quote.","description":"Bookable requests return immutable priced offers with ordered subtotals synchronously. Price-on-request listings return requested with no offer until the merchant prices them.","parameters":[{"name":"merchant_slug","in":"path","required":true,"schema":{"type":"string"},"description":"Public OpenMerchant seller slug."},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string"},"description":"Creates the quote idempotently and becomes its Quote-Access-Token for polling and refresh."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PublicMppQuoteCreateRequest"}],"required":["currency"]}}}},"responses":{"201":{"description":"The requested quote resolved inline or from cache with immutable offers and authoritative subtotals.","headers":{"Cache-Control":{"description":"Buyer quote responses are always private and no-store.","schema":{"type":"string","example":"private, no-store"}},"Quote-Access-Token":{"description":"Dedicated opaque ownership credential minted at quote creation.","schema":{"type":"string"}},"Location":{"description":"Canonical resource to retrieve or poll.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicMppQuoteRead"}}}},"202":{"description":"The responder deadline expired; poll Location.","headers":{"Cache-Control":{"description":"Buyer quote responses are always private and no-store.","schema":{"type":"string","example":"private, no-store"}},"Quote-Access-Token":{"description":"Dedicated opaque ownership credential minted at quote creation.","schema":{"type":"string"}},"Location":{"description":"Canonical resource to retrieve or poll.","schema":{"type":"string"}},"Retry-After":{"description":"Suggested polling delay in seconds.","schema":{"type":"integer","example":2}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicMppQuoteRead"}}}},"404":{"description":"Unknown merchant or item."},"409":{"description":"Idempotency conflict or responder setup required."},"422":{"description":"Invalid request or merchant-required buyer input."},"502":{"description":"The responder returned a terminal invalid result."},"429":{"description":"A shared request rate limit was exceeded.","headers":{"Retry-After":{"description":"Seconds until this caller may retry.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Limit":{"description":"Request limit for the exhausted window.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Window":{"description":"Length of the exhausted window in seconds.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitExceededResponse"}}}}},"security":[]}},"/{merchant_slug}/quotes/{quote_id}":{"get":{"operationId":"getMerchantQuote","summary":"Poll a merchant quote using its Quote-Access-Token.","parameters":[{"name":"merchant_slug","in":"path","required":true,"schema":{"type":"string"},"description":"Public OpenMerchant seller slug."},{"name":"quote_id","in":"path","required":true,"schema":{"type":"string"},"description":"Quote identifier."},{"name":"Quote-Access-Token","in":"header","required":true,"schema":{"type":"string"},"description":"Dedicated opaque retrieval token minted at creation."}],"responses":{"200":{"description":"The current quote with immutable offers and exact ordered subtotals.","headers":{"Cache-Control":{"description":"Buyer quote responses are always private and no-store.","schema":{"type":"string","example":"private, no-store"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicMppQuoteRead"}}}},"404":{"description":"Unknown quote."},"429":{"description":"A shared request rate limit was exceeded.","headers":{"Retry-After":{"description":"Seconds until this caller may retry.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Limit":{"description":"Request limit for the exhausted window.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Window":{"description":"Length of the exhausted window in seconds.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitExceededResponse"}}}}},"security":[{"QuoteAccessToken":[]}]},"post":{"operationId":"refreshQuote","summary":"Update quote","x-mpp":{"role":"quote_refresh"},"description":"Re-run the immutable saved request in a successor generation. This bypasses the response cache, preserves old offers as superseded audit records, and never reserves inventory.","parameters":[{"name":"merchant_slug","in":"path","required":true,"schema":{"type":"string"},"description":"Public OpenMerchant seller slug."},{"name":"quote_id","in":"path","required":true,"schema":{"type":"string"},"description":"Quote identifier."},{"name":"Quote-Access-Token","in":"header","required":true,"schema":{"type":"string"},"description":"Dedicated opaque retrieval token minted at creation."},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string"},"description":"A new key for this refresh generation."}],"responses":{"200":{"description":"The quote with successor offers, their immutable ordered subtotals, and any price_changed, subtotals_changed, or booking_unavailable messages.","headers":{"Cache-Control":{"description":"Buyer quote responses are always private and no-store.","schema":{"type":"string","example":"private, no-store"}},"Quote-Access-Token":{"description":"Dedicated opaque ownership credential minted at quote creation.","schema":{"type":"string"}},"Location":{"description":"Canonical resource to retrieve or poll.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicMppQuoteRead"}}}},"404":{"description":"Unknown quote (or token mismatch)."},"202":{"description":"The responder deadline expired; poll the quote.","headers":{"Cache-Control":{"description":"Buyer quote responses are always private and no-store.","schema":{"type":"string","example":"private, no-store"}},"Quote-Access-Token":{"description":"Dedicated opaque ownership credential minted at quote creation.","schema":{"type":"string"}},"Location":{"description":"Canonical resource to retrieve or poll.","schema":{"type":"string"}},"Retry-After":{"description":"Suggested polling delay in seconds.","schema":{"type":"integer","example":2}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicMppQuoteRead"}}}},"409":{"description":"The quote state cannot be refreshed."},"422":{"description":"The merchant requires corrected buyer input."},"502":{"description":"The responder returned a terminal invalid result."},"429":{"description":"A shared request rate limit was exceeded.","headers":{"Retry-After":{"description":"Seconds until this caller may retry.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Limit":{"description":"Request limit for the exhausted window.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Window":{"description":"Length of the exhausted window in seconds.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitExceededResponse"}}}}},"security":[{"QuoteAccessToken":[]}]}},"/{merchant_slug}/purchases":{"post":{"operationId":"createMerchantPurchase","summary":"Create and settle a merchant order through MPP.","x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.50","max":"999999.99"},"protocols":[{"mpp":{"method":"stripe","intent":"charge","currency":"USD"}}]},"parameters":[{"name":"merchant_slug","in":"path","required":true,"schema":{"type":"string"},"description":"Public OpenMerchant seller slug."},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer customer access token on an identity retry, then the Payment credential on the paid retry."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PublicMppOrderCreateRequest"}],"required":["currency"]}}}},"responses":{"200":{"description":"The paid order with its standard Payment-Receipt header.","headers":{"Payment-Receipt":{"description":"Unpadded base64url JSON receipt containing method, Stripe PaymentIntent reference, success status, settlement timestamp, and the optional buyer externalId.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]+$"}},"Cache-Control":{"description":"Always private when a payment receipt is present.","schema":{"type":"string","example":"private"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicMppOrderRead"}}}},"401":{"description":"Customer sign-in is required before payment. Follow the Bearer challenge, then retry the identical purchase with the customer access token to receive the 402 payment challenge.","headers":{"WWW-Authenticate":{"description":"Bearer challenge naming the merchant issuer and RFC 9728 protected-resource metadata document.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicMppCustomerIdentityErrorResponse"}}}},"402":{"description":"Stripe Shared Payment Token challenge.","headers":{"WWW-Authenticate":{"description":"The standard MPP Payment challenge.","schema":{"type":"string"}},"Cache-Control":{"description":"Challenges are never cacheable.","schema":{"type":"string","example":"no-store"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicMppPaymentRequiredResponse"}}}},"404":{"description":"Unknown or unavailable merchant."},"502":{"description":"Payment settlement did not reach a terminal succeeded state. No Payment-Receipt is emitted."},"429":{"description":"A shared request rate limit was exceeded.","headers":{"Retry-After":{"description":"Seconds until this caller may retry.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Limit":{"description":"Request limit for the exhausted window.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Window":{"description":"Length of the exhausted window in seconds.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitExceededResponse"}}}}},"security":[{"MppPaymentCredential":[]}]}},"/{merchant_slug}/orders/{order_id}":{"get":{"operationId":"getMerchantOrder","summary":"Retrieve a paid merchant order.","description":"Requires the exact Authorization: Payment credential that successfully settled the order.","security":[{"MppPaymentCredential":[]}],"parameters":[{"name":"merchant_slug","in":"path","required":true,"schema":{"type":"string"},"description":"Public OpenMerchant seller slug."},{"name":"order_id","in":"path","required":true,"schema":{"type":"string"},"description":"Hosted MPP order identifier."}],"responses":{"200":{"description":"The authoritative current order snapshot.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicMppOrderRead"}}}},"401":{"description":"The Payment credential is missing."},"404":{"description":"Unknown order or the Payment credential does not own it."},"429":{"description":"A shared request rate limit was exceeded.","headers":{"Retry-After":{"description":"Seconds until this caller may retry.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Limit":{"description":"Request limit for the exhausted window.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Window":{"description":"Length of the exhausted window in seconds.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitExceededResponse"}}}}}}},"/{merchant_slug}/openapi.json":{"get":{"operationId":"getMerchantOpenApi","summary":"Get generated per-merchant OpenAPI discovery.","parameters":[{"name":"merchant_slug","in":"path","required":true,"schema":{"type":"string"},"description":"Public OpenMerchant seller slug."}],"responses":{"200":{"description":"OpenAPI 3.1 document."},"404":{"description":"Unknown merchant."},"429":{"description":"A shared request rate limit was exceeded.","headers":{"Retry-After":{"description":"Seconds until this caller may retry.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Limit":{"description":"Request limit for the exhausted window.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Window":{"description":"Length of the exhausted window in seconds.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitExceededResponse"}}}}},"security":[]}},"/{merchant_slug}/.well-known/mpp.json":{"get":{"operationId":"getMerchantMppManifest","summary":"Get the per-merchant MPP service manifest.","parameters":[{"name":"merchant_slug","in":"path","required":true,"schema":{"type":"string"},"description":"Public OpenMerchant seller slug."}],"responses":{"200":{"description":"MPP service manifest."},"404":{"description":"Unknown merchant."},"429":{"description":"A shared request rate limit was exceeded.","headers":{"Retry-After":{"description":"Seconds until this caller may retry.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Limit":{"description":"Request limit for the exhausted window.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Window":{"description":"Length of the exhausted window in seconds.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitExceededResponse"}}}}},"security":[]}}},"webhooks":{"quote.requested":{"post":{"operationId":"receiveQuoteRequested","summary":"quote.requested","description":"Sent when a buyer requests real-time price and availability for bookable or quotable items. Respond at POST /v1/merchant/quotes/{quote_id}/respond with one or more offers to complete the request; the offer IDs it returns are what buyers place orders against. Quote requests time out within 10 seconds. Authenticate the response either with a secret API key or by signing the exact raw response body with this destination's webhook HMAC secret (`OpenMerchant-Response-Signature`, echoing `OpenMerchant-Destination-Id` and `OpenMerchant-Webhook-Id`). The HMAC form is what a webhook receiver should use — it already holds that key, needs no API key, and can do nothing but answer the delivery it was just sent. Re-posting identical bytes is safe and reports `duplicate`; different bytes for an answered decision are refused.","parameters":[{"name":"OpenMerchant-Signature","in":"header","required":true,"schema":{"type":"string"},"description":"Timestamped HMAC signature over the raw body."},{"name":"OpenMerchant-Webhook-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Immutable event id (replays share it)."},{"name":"OpenMerchant-Delivery-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Unique per delivery attempt chain."},{"name":"OpenMerchant-Webhook-Event","in":"header","required":true,"schema":{"type":"string"},"description":"The event type, mirroring the body `type`."},{"name":"OpenMerchant-Destination-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Exact destination receiving the event."},{"name":"OpenMerchant-Response-Url","in":"header","required":false,"schema":{"type":"string"},"description":"Absolute URL to submit this delivery's decision to. Present only when this destination is authorized to answer this event. Read it from the header rather than hardcoding a host."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketplaceQuoteEventEnvelope"}}}},"responses":{"2XX":{"description":"Acknowledges delivery only. An authoritative destination submits its decision through the merchant webhook response API."}},"x-openmerchant-response":{"method":"POST","urlHeader":"OpenMerchant-Response-Url","signatureHeader":"OpenMerchant-Response-Signature","schema":{"$ref":"#/components/schemas/MerchantWebhookQuoteResponse"}}}},"order.requested":{"post":{"operationId":"receiveOrderRequested","summary":"order.requested","description":"The order awaits your action. When data.decision is present, answer it: decision.action is `reserve`, so confirm the items are available and held, or reject. When data.decision is absent this is the informational record that a buyer committed payment. Once confirmed, the buyer's payment method is charged and you receive the payment. Authenticate the response either with a secret API key or by signing the exact raw response body with this destination's webhook HMAC secret (`OpenMerchant-Response-Signature`, echoing `OpenMerchant-Destination-Id` and `OpenMerchant-Webhook-Id`). The HMAC form is what a webhook receiver should use — it already holds that key, needs no API key, and can do nothing but answer the delivery it was just sent. Re-posting identical bytes is safe and reports `duplicate`; different bytes for an answered decision are refused.","parameters":[{"name":"OpenMerchant-Signature","in":"header","required":true,"schema":{"type":"string"},"description":"Timestamped HMAC signature over the raw body."},{"name":"OpenMerchant-Webhook-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Immutable event id (replays share it)."},{"name":"OpenMerchant-Delivery-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Unique per delivery attempt chain."},{"name":"OpenMerchant-Webhook-Event","in":"header","required":true,"schema":{"type":"string"},"description":"The event type, mirroring the body `type`."},{"name":"OpenMerchant-Destination-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Exact destination receiving the event."},{"name":"OpenMerchant-Response-Url","in":"header","required":false,"schema":{"type":"string"},"description":"Absolute URL to submit this delivery's decision to. Present only when this destination is authorized to answer this event. Read it from the header rather than hardcoding a host."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketplaceOrderRequestedEventEnvelope"}}}},"responses":{"2XX":{"description":"Acknowledges delivery only. An authoritative destination submits its decision through the merchant webhook response API."}},"x-openmerchant-response":{"method":"POST","urlHeader":"OpenMerchant-Response-Url","signatureHeader":"OpenMerchant-Response-Signature","schema":{"$ref":"#/components/schemas/MerchantOrderRespondRequest"}}}},"order.confirmed":{"post":{"operationId":"receiveOrderConfirmed","summary":"order.confirmed","description":"The payment is captured. When data.decision is present, decision.action is `commit`: finalize the held resource on your side and return your own order or booking reference as confirmation_reference. When absent, this is terminal success — emitted immediately after order.requested for OpenMerchant-managed immediate-capture orders, on your confirmation for deferred-capture product orders, and once every booking confirmed plus capture landed for bookable orders. Booking lines carry their provider confirmation references. Authenticate the response either with a secret API key or by signing the exact raw response body with this destination's webhook HMAC secret (`OpenMerchant-Response-Signature`, echoing `OpenMerchant-Destination-Id` and `OpenMerchant-Webhook-Id`). The HMAC form is what a webhook receiver should use — it already holds that key, needs no API key, and can do nothing but answer the delivery it was just sent. Re-posting identical bytes is safe and reports `duplicate`; different bytes for an answered decision are refused.","parameters":[{"name":"OpenMerchant-Signature","in":"header","required":true,"schema":{"type":"string"},"description":"Timestamped HMAC signature over the raw body."},{"name":"OpenMerchant-Webhook-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Immutable event id (replays share it)."},{"name":"OpenMerchant-Delivery-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Unique per delivery attempt chain."},{"name":"OpenMerchant-Webhook-Event","in":"header","required":true,"schema":{"type":"string"},"description":"The event type, mirroring the body `type`."},{"name":"OpenMerchant-Destination-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Exact destination receiving the event."},{"name":"OpenMerchant-Response-Url","in":"header","required":false,"schema":{"type":"string"},"description":"Absolute URL to submit this delivery's decision to. Present only when this destination is authorized to answer this event. Read it from the header rather than hardcoding a host."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketplaceOrderConfirmedEventEnvelope"}}}},"responses":{"2XX":{"description":"Acknowledges delivery only. An authoritative destination submits its decision through the merchant webhook response API."}},"x-openmerchant-response":{"method":"POST","urlHeader":"OpenMerchant-Response-Url","signatureHeader":"OpenMerchant-Response-Signature","schema":{"$ref":"#/components/schemas/MerchantOrderRespondRequest"}}}},"order.rejected":{"post":{"operationId":"receiveOrderRejected","summary":"order.rejected","description":"The order ended without success. When data.decision is present, decision.action is `release`: drop the hold you are still carrying for it. When absent, this is the terminal record. reason is one of merchant_rejected | failed | cancelled | confirmation_timeout, and any refund or authorization release has been initiated. Per-line detail rides the discriminated lines[]. Authenticate the response either with a secret API key or by signing the exact raw response body with this destination's webhook HMAC secret (`OpenMerchant-Response-Signature`, echoing `OpenMerchant-Destination-Id` and `OpenMerchant-Webhook-Id`). The HMAC form is what a webhook receiver should use — it already holds that key, needs no API key, and can do nothing but answer the delivery it was just sent. Re-posting identical bytes is safe and reports `duplicate`; different bytes for an answered decision are refused.","parameters":[{"name":"OpenMerchant-Signature","in":"header","required":true,"schema":{"type":"string"},"description":"Timestamped HMAC signature over the raw body."},{"name":"OpenMerchant-Webhook-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Immutable event id (replays share it)."},{"name":"OpenMerchant-Delivery-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Unique per delivery attempt chain."},{"name":"OpenMerchant-Webhook-Event","in":"header","required":true,"schema":{"type":"string"},"description":"The event type, mirroring the body `type`."},{"name":"OpenMerchant-Destination-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Exact destination receiving the event."},{"name":"OpenMerchant-Response-Url","in":"header","required":false,"schema":{"type":"string"},"description":"Absolute URL to submit this delivery's decision to. Present only when this destination is authorized to answer this event. Read it from the header rather than hardcoding a host."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketplaceOrderRejectedEventEnvelope"}}}},"responses":{"2XX":{"description":"Acknowledges delivery only. An authoritative destination submits its decision through the merchant webhook response API."}},"x-openmerchant-response":{"method":"POST","urlHeader":"OpenMerchant-Response-Url","signatureHeader":"OpenMerchant-Response-Signature","schema":{"$ref":"#/components/schemas/MerchantOrderRespondRequest"}}}},"payment_intent.succeeded":{"post":{"operationId":"receivePaymentIntentSucceeded","summary":"payment_intent.succeeded","description":"Stripe's payment_intent.succeeded for one of your orders, forwarded verbatim: data.object is the PaymentIntent. OpenMerchant-MoR sellers only — sellers with their own Stripe account receive this from Stripe directly, so we never forward a duplicate.\n\nDelivered as an HTTPS POST to the notification destination configured for your account. The raw body is signed with the destination secret: `OpenMerchant-Signature: t=<epoch>,v1=<hex hmac-sha256 of \"{t}.{body}\">` (two `v1=` entries during the 24h secret-rotation grace — verifying against either is valid). Respond with any 2xx to acknowledge; other statuses may be retried according to the event policy. The delivery response body is never treated as a decision — a decision is submitted as its own request to the route named on the event. The envelope contract is versionless and additive-only: fields may be added, never renamed or removed.","parameters":[{"name":"OpenMerchant-Signature","in":"header","required":true,"schema":{"type":"string"},"description":"Timestamped HMAC signature over the raw body."},{"name":"OpenMerchant-Webhook-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Immutable event id (replays share it)."},{"name":"OpenMerchant-Delivery-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Unique per delivery attempt chain."},{"name":"OpenMerchant-Webhook-Event","in":"header","required":true,"schema":{"type":"string"},"description":"The event type, mirroring the body `type`."},{"name":"OpenMerchant-Destination-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Exact destination receiving the event."},{"name":"OpenMerchant-Response-Url","in":"header","required":false,"schema":{"type":"string"},"description":"Absolute URL to submit this delivery's decision to. Present only when this destination is authorized to answer this event. Read it from the header rather than hardcoding a host."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketplaceStripePaymentIntentSucceededEventEnvelope"}}}},"responses":{"2XX":{"description":"Acknowledges delivery only. An authoritative destination submits its decision through the merchant webhook response API."}}}},"payment_intent.payment_failed":{"post":{"operationId":"receivePaymentIntentPaymentFailed","summary":"payment_intent.payment_failed","description":"Stripe's payment_intent.payment_failed for one of your orders, forwarded verbatim: data.object is the PaymentIntent, with the decline detail under last_payment_error. The order-level outcome still arrives separately as order.rejected. OpenMerchant-MoR sellers only — sellers with their own Stripe account receive this from Stripe directly, so we never forward a duplicate.\n\nDelivered as an HTTPS POST to the notification destination configured for your account. The raw body is signed with the destination secret: `OpenMerchant-Signature: t=<epoch>,v1=<hex hmac-sha256 of \"{t}.{body}\">` (two `v1=` entries during the 24h secret-rotation grace — verifying against either is valid). Respond with any 2xx to acknowledge; other statuses may be retried according to the event policy. The delivery response body is never treated as a decision — a decision is submitted as its own request to the route named on the event. The envelope contract is versionless and additive-only: fields may be added, never renamed or removed.","parameters":[{"name":"OpenMerchant-Signature","in":"header","required":true,"schema":{"type":"string"},"description":"Timestamped HMAC signature over the raw body."},{"name":"OpenMerchant-Webhook-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Immutable event id (replays share it)."},{"name":"OpenMerchant-Delivery-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Unique per delivery attempt chain."},{"name":"OpenMerchant-Webhook-Event","in":"header","required":true,"schema":{"type":"string"},"description":"The event type, mirroring the body `type`."},{"name":"OpenMerchant-Destination-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Exact destination receiving the event."},{"name":"OpenMerchant-Response-Url","in":"header","required":false,"schema":{"type":"string"},"description":"Absolute URL to submit this delivery's decision to. Present only when this destination is authorized to answer this event. Read it from the header rather than hardcoding a host."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketplaceStripePaymentIntentPaymentFailedEventEnvelope"}}}},"responses":{"2XX":{"description":"Acknowledges delivery only. An authoritative destination submits its decision through the merchant webhook response API."}}}},"refund.created":{"post":{"operationId":"receiveRefundCreated","summary":"refund.created","description":"A refund was initiated against one of your orders. Forwarded verbatim from Stripe's refund.created: data.object is the Refund. Card refunds are usually already status=succeeded here; async payment methods start pending and settle on refund.updated. OpenMerchant-MoR sellers only — sellers with their own Stripe account receive this from Stripe directly, so we never forward a duplicate.\n\nDelivered as an HTTPS POST to the notification destination configured for your account. The raw body is signed with the destination secret: `OpenMerchant-Signature: t=<epoch>,v1=<hex hmac-sha256 of \"{t}.{body}\">` (two `v1=` entries during the 24h secret-rotation grace — verifying against either is valid). Respond with any 2xx to acknowledge; other statuses may be retried according to the event policy. The delivery response body is never treated as a decision — a decision is submitted as its own request to the route named on the event. The envelope contract is versionless and additive-only: fields may be added, never renamed or removed.","parameters":[{"name":"OpenMerchant-Signature","in":"header","required":true,"schema":{"type":"string"},"description":"Timestamped HMAC signature over the raw body."},{"name":"OpenMerchant-Webhook-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Immutable event id (replays share it)."},{"name":"OpenMerchant-Delivery-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Unique per delivery attempt chain."},{"name":"OpenMerchant-Webhook-Event","in":"header","required":true,"schema":{"type":"string"},"description":"The event type, mirroring the body `type`."},{"name":"OpenMerchant-Destination-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Exact destination receiving the event."},{"name":"OpenMerchant-Response-Url","in":"header","required":false,"schema":{"type":"string"},"description":"Absolute URL to submit this delivery's decision to. Present only when this destination is authorized to answer this event. Read it from the header rather than hardcoding a host."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketplaceStripeRefundCreatedEventEnvelope"}}}},"responses":{"2XX":{"description":"Acknowledges delivery only. An authoritative destination submits its decision through the merchant webhook response API."}}}},"refund.updated":{"post":{"operationId":"receiveRefundUpdated","summary":"refund.updated","description":"A refund on one of your orders changed state — this is where a pending refund reports success. Forwarded verbatim from Stripe's refund.updated: data.object is the Refund, and status is authoritative. OpenMerchant-MoR sellers only — sellers with their own Stripe account receive this from Stripe directly, so we never forward a duplicate.\n\nDelivered as an HTTPS POST to the notification destination configured for your account. The raw body is signed with the destination secret: `OpenMerchant-Signature: t=<epoch>,v1=<hex hmac-sha256 of \"{t}.{body}\">` (two `v1=` entries during the 24h secret-rotation grace — verifying against either is valid). Respond with any 2xx to acknowledge; other statuses may be retried according to the event policy. The delivery response body is never treated as a decision — a decision is submitted as its own request to the route named on the event. The envelope contract is versionless and additive-only: fields may be added, never renamed or removed.","parameters":[{"name":"OpenMerchant-Signature","in":"header","required":true,"schema":{"type":"string"},"description":"Timestamped HMAC signature over the raw body."},{"name":"OpenMerchant-Webhook-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Immutable event id (replays share it)."},{"name":"OpenMerchant-Delivery-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Unique per delivery attempt chain."},{"name":"OpenMerchant-Webhook-Event","in":"header","required":true,"schema":{"type":"string"},"description":"The event type, mirroring the body `type`."},{"name":"OpenMerchant-Destination-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Exact destination receiving the event."},{"name":"OpenMerchant-Response-Url","in":"header","required":false,"schema":{"type":"string"},"description":"Absolute URL to submit this delivery's decision to. Present only when this destination is authorized to answer this event. Read it from the header rather than hardcoding a host."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketplaceStripeRefundUpdatedEventEnvelope"}}}},"responses":{"2XX":{"description":"Acknowledges delivery only. An authoritative destination submits its decision through the merchant webhook response API."}}}},"refund.failed":{"post":{"operationId":"receiveRefundFailed","summary":"refund.failed","description":"A refund on one of your orders failed; the funds were not returned to the buyer. Forwarded verbatim from Stripe's refund.failed: data.object is the Refund, with the cause under failure_reason. OpenMerchant-MoR sellers only — sellers with their own Stripe account receive this from Stripe directly, so we never forward a duplicate.\n\nDelivered as an HTTPS POST to the notification destination configured for your account. The raw body is signed with the destination secret: `OpenMerchant-Signature: t=<epoch>,v1=<hex hmac-sha256 of \"{t}.{body}\">` (two `v1=` entries during the 24h secret-rotation grace — verifying against either is valid). Respond with any 2xx to acknowledge; other statuses may be retried according to the event policy. The delivery response body is never treated as a decision — a decision is submitted as its own request to the route named on the event. The envelope contract is versionless and additive-only: fields may be added, never renamed or removed.","parameters":[{"name":"OpenMerchant-Signature","in":"header","required":true,"schema":{"type":"string"},"description":"Timestamped HMAC signature over the raw body."},{"name":"OpenMerchant-Webhook-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Immutable event id (replays share it)."},{"name":"OpenMerchant-Delivery-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Unique per delivery attempt chain."},{"name":"OpenMerchant-Webhook-Event","in":"header","required":true,"schema":{"type":"string"},"description":"The event type, mirroring the body `type`."},{"name":"OpenMerchant-Destination-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Exact destination receiving the event."},{"name":"OpenMerchant-Response-Url","in":"header","required":false,"schema":{"type":"string"},"description":"Absolute URL to submit this delivery's decision to. Present only when this destination is authorized to answer this event. Read it from the header rather than hardcoding a host."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketplaceStripeRefundFailedEventEnvelope"}}}},"responses":{"2XX":{"description":"Acknowledges delivery only. An authoritative destination submits its decision through the merchant webhook response API."}}}},"charge.dispute.created":{"post":{"operationId":"receiveChargeDisputeCreated","summary":"charge.dispute.created","description":"A buyer disputed the payment for one of your orders. The evidence window starts now — evidence_details.due_by is the deadline. Forwarded verbatim from Stripe's charge.dispute.created: data.object is the Dispute. OpenMerchant-MoR sellers only — sellers with their own Stripe account receive this from Stripe directly, so we never forward a duplicate.\n\nDelivered as an HTTPS POST to the notification destination configured for your account. The raw body is signed with the destination secret: `OpenMerchant-Signature: t=<epoch>,v1=<hex hmac-sha256 of \"{t}.{body}\">` (two `v1=` entries during the 24h secret-rotation grace — verifying against either is valid). Respond with any 2xx to acknowledge; other statuses may be retried according to the event policy. The delivery response body is never treated as a decision — a decision is submitted as its own request to the route named on the event. The envelope contract is versionless and additive-only: fields may be added, never renamed or removed.","parameters":[{"name":"OpenMerchant-Signature","in":"header","required":true,"schema":{"type":"string"},"description":"Timestamped HMAC signature over the raw body."},{"name":"OpenMerchant-Webhook-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Immutable event id (replays share it)."},{"name":"OpenMerchant-Delivery-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Unique per delivery attempt chain."},{"name":"OpenMerchant-Webhook-Event","in":"header","required":true,"schema":{"type":"string"},"description":"The event type, mirroring the body `type`."},{"name":"OpenMerchant-Destination-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Exact destination receiving the event."},{"name":"OpenMerchant-Response-Url","in":"header","required":false,"schema":{"type":"string"},"description":"Absolute URL to submit this delivery's decision to. Present only when this destination is authorized to answer this event. Read it from the header rather than hardcoding a host."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketplaceStripeChargeDisputeCreatedEventEnvelope"}}}},"responses":{"2XX":{"description":"Acknowledges delivery only. An authoritative destination submits its decision through the merchant webhook response API."}}}},"charge.dispute.closed":{"post":{"operationId":"receiveChargeDisputeClosed","summary":"charge.dispute.closed","description":"A dispute on one of your orders was resolved; status is won, lost, or warning_closed. Forwarded verbatim from Stripe's charge.dispute.closed: data.object is the Dispute. OpenMerchant-MoR sellers only — sellers with their own Stripe account receive this from Stripe directly, so we never forward a duplicate.\n\nDelivered as an HTTPS POST to the notification destination configured for your account. The raw body is signed with the destination secret: `OpenMerchant-Signature: t=<epoch>,v1=<hex hmac-sha256 of \"{t}.{body}\">` (two `v1=` entries during the 24h secret-rotation grace — verifying against either is valid). Respond with any 2xx to acknowledge; other statuses may be retried according to the event policy. The delivery response body is never treated as a decision — a decision is submitted as its own request to the route named on the event. The envelope contract is versionless and additive-only: fields may be added, never renamed or removed.","parameters":[{"name":"OpenMerchant-Signature","in":"header","required":true,"schema":{"type":"string"},"description":"Timestamped HMAC signature over the raw body."},{"name":"OpenMerchant-Webhook-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Immutable event id (replays share it)."},{"name":"OpenMerchant-Delivery-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Unique per delivery attempt chain."},{"name":"OpenMerchant-Webhook-Event","in":"header","required":true,"schema":{"type":"string"},"description":"The event type, mirroring the body `type`."},{"name":"OpenMerchant-Destination-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Exact destination receiving the event."},{"name":"OpenMerchant-Response-Url","in":"header","required":false,"schema":{"type":"string"},"description":"Absolute URL to submit this delivery's decision to. Present only when this destination is authorized to answer this event. Read it from the header rather than hardcoding a host."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketplaceStripeChargeDisputeClosedEventEnvelope"}}}},"responses":{"2XX":{"description":"Acknowledges delivery only. An authoritative destination submits its decision through the merchant webhook response API."}}}},"charge.dispute.funds_withdrawn":{"post":{"operationId":"receiveChargeDisputeFundsWithdrawn","summary":"charge.dispute.funds_withdrawn","description":"The disputed amount for one of your orders was withdrawn from the balance. Forwarded verbatim from Stripe's charge.dispute.funds_withdrawn: data.object is the Dispute. OpenMerchant-MoR sellers only — sellers with their own Stripe account receive this from Stripe directly, so we never forward a duplicate.\n\nDelivered as an HTTPS POST to the notification destination configured for your account. The raw body is signed with the destination secret: `OpenMerchant-Signature: t=<epoch>,v1=<hex hmac-sha256 of \"{t}.{body}\">` (two `v1=` entries during the 24h secret-rotation grace — verifying against either is valid). Respond with any 2xx to acknowledge; other statuses may be retried according to the event policy. The delivery response body is never treated as a decision — a decision is submitted as its own request to the route named on the event. The envelope contract is versionless and additive-only: fields may be added, never renamed or removed.","parameters":[{"name":"OpenMerchant-Signature","in":"header","required":true,"schema":{"type":"string"},"description":"Timestamped HMAC signature over the raw body."},{"name":"OpenMerchant-Webhook-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Immutable event id (replays share it)."},{"name":"OpenMerchant-Delivery-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Unique per delivery attempt chain."},{"name":"OpenMerchant-Webhook-Event","in":"header","required":true,"schema":{"type":"string"},"description":"The event type, mirroring the body `type`."},{"name":"OpenMerchant-Destination-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Exact destination receiving the event."},{"name":"OpenMerchant-Response-Url","in":"header","required":false,"schema":{"type":"string"},"description":"Absolute URL to submit this delivery's decision to. Present only when this destination is authorized to answer this event. Read it from the header rather than hardcoding a host."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketplaceStripeChargeDisputeFundsWithdrawnEventEnvelope"}}}},"responses":{"2XX":{"description":"Acknowledges delivery only. An authoritative destination submits its decision through the merchant webhook response API."}}}},"charge.dispute.funds_reinstated":{"post":{"operationId":"receiveChargeDisputeFundsReinstated","summary":"charge.dispute.funds_reinstated","description":"The disputed amount for one of your orders was returned to the balance after the dispute closed. Forwarded verbatim from Stripe's charge.dispute.funds_reinstated: data.object is the Dispute. OpenMerchant-MoR sellers only — sellers with their own Stripe account receive this from Stripe directly, so we never forward a duplicate.\n\nDelivered as an HTTPS POST to the notification destination configured for your account. The raw body is signed with the destination secret: `OpenMerchant-Signature: t=<epoch>,v1=<hex hmac-sha256 of \"{t}.{body}\">` (two `v1=` entries during the 24h secret-rotation grace — verifying against either is valid). Respond with any 2xx to acknowledge; other statuses may be retried according to the event policy. The delivery response body is never treated as a decision — a decision is submitted as its own request to the route named on the event. The envelope contract is versionless and additive-only: fields may be added, never renamed or removed.","parameters":[{"name":"OpenMerchant-Signature","in":"header","required":true,"schema":{"type":"string"},"description":"Timestamped HMAC signature over the raw body."},{"name":"OpenMerchant-Webhook-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Immutable event id (replays share it)."},{"name":"OpenMerchant-Delivery-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Unique per delivery attempt chain."},{"name":"OpenMerchant-Webhook-Event","in":"header","required":true,"schema":{"type":"string"},"description":"The event type, mirroring the body `type`."},{"name":"OpenMerchant-Destination-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Exact destination receiving the event."},{"name":"OpenMerchant-Response-Url","in":"header","required":false,"schema":{"type":"string"},"description":"Absolute URL to submit this delivery's decision to. Present only when this destination is authorized to answer this event. Read it from the header rather than hardcoding a host."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketplaceStripeChargeDisputeFundsReinstatedEventEnvelope"}}}},"responses":{"2XX":{"description":"Acknowledges delivery only. An authoritative destination submits its decision through the merchant webhook response API."}}}},"webhook.test":{"post":{"operationId":"receiveWebhookTest","summary":"webhook.test","description":"A test event sent from the dashboard to verify this destination.\n\nDelivered as an HTTPS POST to the notification destination configured for your account. The raw body is signed with the destination secret: `OpenMerchant-Signature: t=<epoch>,v1=<hex hmac-sha256 of \"{t}.{body}\">` (two `v1=` entries during the 24h secret-rotation grace — verifying against either is valid). Respond with any 2xx to acknowledge; other statuses may be retried according to the event policy. The delivery response body is never treated as a decision — a decision is submitted as its own request to the route named on the event. The envelope contract is versionless and additive-only: fields may be added, never renamed or removed.","parameters":[{"name":"OpenMerchant-Signature","in":"header","required":true,"schema":{"type":"string"},"description":"Timestamped HMAC signature over the raw body."},{"name":"OpenMerchant-Webhook-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Immutable event id (replays share it)."},{"name":"OpenMerchant-Delivery-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Unique per delivery attempt chain."},{"name":"OpenMerchant-Webhook-Event","in":"header","required":true,"schema":{"type":"string"},"description":"The event type, mirroring the body `type`."},{"name":"OpenMerchant-Destination-Id","in":"header","required":true,"schema":{"type":"string"},"description":"Exact destination receiving the event."},{"name":"OpenMerchant-Response-Url","in":"header","required":false,"schema":{"type":"string"},"description":"Absolute URL to submit this delivery's decision to. Present only when this destination is authorized to answer this event. Read it from the header rather than hardcoding a host."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketplaceWebhookTestEnvelope"}}}},"responses":{"2XX":{"description":"Acknowledges delivery only. An authoritative destination submits its decision through the merchant webhook response API."}}}}},"components":{"schemas":{"CatalogPriceFilterBase":{"additionalProperties":false,"description":"Inclusive price bounds expressed in integer minor currency units.","properties":{"min":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Inclusive minimum unit price in minor currency units.","examples":[1000],"title":"Min"},"max":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Inclusive maximum unit price in minor currency units.","examples":[5000],"title":"Max"}},"title":"CatalogPriceFilterBase","type":"object"},"CountryCode":{"description":"ISO 3166-1 alpha-2 country code used by profile identity/address records.","enum":["AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","YE","YT","ZA","ZM","ZW"],"title":"CountryCode","type":"string"},"CurrencyCode":{"description":"ISO 4217 currency codes accepted by persisted monetary surfaces.","enum":["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BYN","BZD","CAD","CDF","CHF","CLP","CNY","COP","CRC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRU","MUR","MVR","MWK","MXN","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLE","SOS","SRD","SSP","STN","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VED","VES","VND","VUV","WST","XAF","XCD","XOF","XPF","YER","ZAR","ZMW","ZWL"],"title":"CurrencyCode","type":"string"},"JsonValue":{},"PublicMppCatalogAttribution":{"additionalProperties":{"type":"string"},"description":"Bounded campaign attribution forwarded through MPP discovery.","properties":{},"title":"PublicMppCatalogAttribution","type":"object"},"PublicMppCatalogContext":{"additionalProperties":{"$ref":"#/components/schemas/JsonValue"},"description":"Localization and buyer-intent hints accepted by MPP catalog calls.","properties":{"dev.openmerchant.market":{"anyOf":[{"maxLength":32,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Optional merchant-scoped market code.","title":"Dev.Openmerchant.Market"},"address_country":{"anyOf":[{"$ref":"#/components/schemas/CountryCode"},{"type":"null"}],"default":null,"description":"ISO-3166-1 alpha-2 country the buyer is shopping from."},"address_region":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"default":null,"description":"State, province, or region the buyer is shopping from.","title":"Address Region"},"postal_code":{"anyOf":[{"maxLength":32,"type":"string"},{"type":"null"}],"default":null,"description":"Postal code used for provisional tax and shipping estimates.","title":"Postal Code"},"intent":{"anyOf":[{"maxLength":1000,"type":"string"},{"type":"null"}],"default":null,"description":"Free-form description of the buyer intent.","title":"Intent"},"language":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"BCP-47 language tag for buyer-facing copy.","title":"Language"},"currency":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}],"default":null,"description":"Requested ISO-4217 presentment currency."},"eligibility":{"description":"Provisional, unverified entitlement claims.","items":{"type":"string"},"maxItems":50,"title":"Eligibility","type":"array"}},"title":"PublicMppCatalogContext","type":"object"},"PublicMppCatalogFilters":{"additionalProperties":{"$ref":"#/components/schemas/JsonValue"},"description":"UCP-compatible category and minor-unit price filters for MPP.","properties":{"categories":{"description":"Merchant-defined category names that results must match. See [UCP search filters](https://ucp.dev/2026-08-25/specification/shopping/catalog/search#search-filters).","examples":[["coffee","equipment"]],"items":{"type":"string"},"maxItems":100,"title":"Categories","type":"array"},"price":{"anyOf":[{"$ref":"#/components/schemas/CatalogPriceFilterBase"},{"type":"null"}],"default":null,"description":"Optional inclusive unit-price range for matching results. See [UCP price filters](https://ucp.dev/2026-08-25/specification/shopping/catalog/search#price-filter)."}},"title":"PublicMppCatalogFilters","type":"object"},"PublicMppCatalogPaginationRequest":{"additionalProperties":false,"description":"MPP catalog pagination with its historical 100-row default.","properties":{"cursor":{"anyOf":[{"maxLength":512,"type":"string"},{"type":"null"}],"default":null,"description":"Opaque cursor returned by the preceding search page.","title":"Cursor"},"limit":{"default":100,"description":"Maximum number of variant-flat catalog rows to return.","maximum":100,"minimum":1,"title":"Limit","type":"integer"}},"title":"PublicMppCatalogPaginationRequest","type":"object"},"PublicMppCatalogSignals":{"additionalProperties":{"$ref":"#/components/schemas/JsonValue"},"description":"Risk and routing signals accepted by MPP catalog calls.","properties":{"dev.ucp.buyer_ip":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Buyer IP forwarded for fraud and coarse geo decisions.","title":"Dev.Ucp.Buyer Ip"},"dev.ucp.user_agent":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"default":null,"description":"Buyer user-agent forwarded for fraud decisions.","title":"Dev.Ucp.User Agent"}},"title":"PublicMppCatalogSignals","type":"object"},"PublicMppCatalogSearchRequest":{"additionalProperties":false,"description":"Body for ``POST /mpp/{slug}/catalog/search``.","properties":{"query":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Optional natural-language or keyword catalog query.","examples":["single-origin coffee"],"title":"Query"},"context":{"anyOf":[{"$ref":"#/components/schemas/PublicMppCatalogContext"},{"type":"null"}],"default":null,"description":"Localization and buyer-intent hints for this search."},"signals":{"anyOf":[{"$ref":"#/components/schemas/PublicMppCatalogSignals"},{"type":"null"}],"default":null,"description":"Platform-observed routing and risk signals."},"attribution":{"anyOf":[{"$ref":"#/components/schemas/PublicMppCatalogAttribution"},{"type":"null"}],"default":null,"description":"Referral and campaign attribution to retain with discovery."},"filters":{"anyOf":[{"$ref":"#/components/schemas/PublicMppCatalogFilters"},{"type":"null"}],"default":null,"description":"Category and minor-unit price constraints for the search."},"pagination":{"anyOf":[{"$ref":"#/components/schemas/PublicMppCatalogPaginationRequest"},{"type":"null"}],"default":null,"description":"Cursor and page-size controls for this search."}},"title":"PublicMppCatalogSearchRequest","type":"object"},"PublicMppCatalogItemLocationsRequest":{"additionalProperties":false,"description":"Resolve buyer-visible locations for one catalog item or variant.","properties":{"id":{"description":"Stable catalog item identifier.","maxLength":64,"minLength":1,"title":"Id","type":"string"},"variant_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Exact variant; omission selects the item default.","title":"Variant Id"},"context":{"anyOf":[{"$ref":"#/components/schemas/PublicMppCatalogContext"},{"type":"null"}],"default":null,"description":"Market and locale hints used to filter eligible locations."}},"required":["id"],"title":"PublicMppCatalogItemLocationsRequest","type":"object"},"AgenticMerchantStatus":{"description":"Lifecycle of an OpenMerchant-hosted agentic merchant (seller profile).\n\n``DRAFT`` / ``ONBOARDING`` / ``ACTIVE`` are retained seller-setup display\nstates and are never payment-readiness authority. Current Stripe readiness\nis provider-derived when publication checks run. ``DISABLED`` is the one\ndurable operator state: it takes public APIs offline and unpublishes the\nregistry entry.","enum":["draft","onboarding","active","disabled"],"title":"AgenticMerchantStatus","type":"string"},"LocaleCode":{"description":"BCP 47 locale tags accepted by profile localization preferences.","enum":["ar-AE","ar-SA","cs-CZ","da-DK","de-AT","de-CH","de-DE","el-GR","en-AU","en-CA","en-GB","en-HK","en-IE","en-IN","en-NZ","en-SG","en-US","en-ZA","es-AR","es-CL","es-CO","es-ES","es-MX","es-PE","fi-FI","fr-BE","fr-CA","fr-CH","fr-FR","he-IL","hu-HU","id-ID","it-CH","it-IT","ja-JP","ko-KR","ms-MY","nb-NO","nl-BE","nl-NL","pl-PL","pt-BR","pt-PT","ro-RO","sv-SE","th-TH","tr-TR","vi-VN","zh-CN","zh-HK","zh-TW"],"title":"LocaleCode","type":"string"},"LocationHoursPeriodRead":{"additionalProperties":false,"description":"Persisted regular opening interval with stable identity and order.","properties":{"weekday":{"$ref":"#/components/schemas/WeekdayCode","description":"Local weekday when this period opens."},"opens_at":{"description":"Local wall-clock opening time.","format":"time","title":"Opens At","type":"string"},"closes_at":{"description":"Local wall-clock closing time.","format":"time","title":"Closes At","type":"string"},"closes_day_offset":{"default":0,"description":"Zero for a same-day close or one for an overnight close.","maximum":1,"minimum":0,"title":"Closes Day Offset","type":"integer"},"label":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"Optional seller-facing label for this opening period.","title":"Label"},"id":{"description":"Stable regular-period identifier.","title":"Id","type":"string"},"position":{"description":"Display order among periods for the same weekday.","minimum":0,"title":"Position","type":"integer"}},"required":["weekday","opens_at","closes_at","id","position"],"title":"LocationHoursPeriodRead","type":"object"},"LocationHoursScheduleRead":{"additionalProperties":false,"description":"Persisted opening schedule included in management/public projections.","properties":{"id":{"description":"Stable opening-hours schedule identifier.","title":"Id","type":"string"},"schedule_type":{"$ref":"#/components/schemas/MerchantLocationHoursScheduleType","description":"Whether the location is always open or follows periods."},"periods":{"description":"Regular weekly opening periods in local time.","items":{"$ref":"#/components/schemas/LocationHoursPeriodRead"},"title":"Periods","type":"array"},"special_days":{"description":"Date-specific exceptions that replace the regular schedule.","items":{"$ref":"#/components/schemas/LocationSpecialDayRead"},"title":"Special Days","type":"array"}},"required":["id","schedule_type","periods","special_days"],"title":"LocationHoursScheduleRead","type":"object"},"LocationSpecialDayRead":{"additionalProperties":false,"description":"Persisted date exception and its custom periods.","properties":{"id":{"description":"Stable special-day identifier.","title":"Id","type":"string"},"local_date":{"description":"Local calendar date this exception replaces.","format":"date","title":"Local Date","type":"string"},"status":{"$ref":"#/components/schemas/MerchantLocationSpecialDayStatus","description":"Whether this date is closed or follows custom periods."},"periods":{"description":"Custom opening periods; empty when the date is closed.","items":{"$ref":"#/components/schemas/LocationSpecialPeriodRead"},"title":"Periods","type":"array"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional seller-facing label for the date exception.","title":"Label"}},"required":["id","local_date","status","periods"],"title":"LocationSpecialDayRead","type":"object"},"LocationSpecialPeriodRead":{"additionalProperties":false,"description":"Persisted special-date interval with stable identity and order.","properties":{"opens_at":{"description":"Local wall-clock opening time.","format":"time","title":"Opens At","type":"string"},"closes_at":{"description":"Local wall-clock closing time.","format":"time","title":"Closes At","type":"string"},"closes_day_offset":{"default":0,"description":"Zero for a same-day close or one for an overnight close.","maximum":1,"minimum":0,"title":"Closes Day Offset","type":"integer"},"id":{"description":"Stable special-period identifier.","title":"Id","type":"string"},"position":{"description":"Display order among periods for this special date.","minimum":0,"title":"Position","type":"integer"}},"required":["opens_at","closes_at","id","position"],"title":"LocationSpecialPeriodRead","type":"object"},"MerchantLocationHoursScheduleType":{"description":"Shape of a location's optional regular opening schedule.","enum":["scheduled","always_open"],"title":"MerchantLocationHoursScheduleType","type":"string"},"MerchantLocationOpenState":{"description":"Computed public opening state for a location at one instant.","enum":["open","closed","unknown"],"title":"MerchantLocationOpenState","type":"string"},"MerchantLocationSpecialDayStatus":{"description":"How a date-specific exception replaces regular opening hours.","enum":["closed","custom"],"title":"MerchantLocationSpecialDayStatus","type":"string"},"PostalAddressPayload":{"additionalProperties":false,"description":"Country-aware postal address shared by location API surfaces.","properties":{"line1":{"description":"Primary street or delivery line.","maxLength":255,"minLength":1,"title":"Line1","type":"string"},"line2":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"default":null,"description":"Optional unit, suite, building, or secondary address line.","title":"Line2"},"city":{"description":"Postal locality or city.","maxLength":120,"minLength":1,"title":"City","type":"string"},"region":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Country-specific state, province, or region.","title":"Region"},"postal_code":{"anyOf":[{"maxLength":32,"type":"string"},{"type":"null"}],"default":null,"description":"Country-specific postal code, when the address has one.","title":"Postal Code"},"country":{"$ref":"#/components/schemas/CountryCode","description":"ISO 3166-1 alpha-2 country code."}},"required":["line1","city","country"],"title":"PostalAddressPayload","type":"object"},"PublicCatalogLocationAvailabilityRead":{"additionalProperties":false,"description":"Privacy-safe location plus item/variant availability for a buyer.","properties":{"location":{"$ref":"#/components/schemas/PublicMerchantLocationRead","description":"Public location at which availability was evaluated."},"is_available":{"description":"Whether this listing can currently be selected here.","title":"Is Available","type":"boolean"}},"required":["location","is_available"],"title":"PublicCatalogLocationAvailabilityRead","type":"object"},"PublicMerchantLocationRead":{"additionalProperties":false,"description":"Public location projection with no provider identities or private metadata.","properties":{"id":{"description":"Stable canonical business-location identifier.","title":"Id","type":"string"},"version_id":{"description":"Current immutable descriptive-version identifier.","title":"Version Id","type":"string"},"version_number":{"description":"Current monotonic descriptive-version number.","minimum":1,"title":"Version Number","type":"integer"},"name":{"description":"Current seller-facing location name.","title":"Name","type":"string"},"address":{"$ref":"#/components/schemas/PostalAddressPayload","description":"Current public postal address for this location."},"latitude":{"anyOf":[{"type":"number"},{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null"}],"default":null,"description":"Optional WGS84 latitude.","title":"Latitude"},"longitude":{"anyOf":[{"type":"number"},{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null"}],"default":null,"description":"Optional WGS84 longitude.","title":"Longitude"},"timezone":{"$ref":"#/components/schemas/TimeZone","description":"IANA timezone governing local hours."},"contact_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional public telephone number.","title":"Contact Phone"},"market_codes":{"description":"Merchant markets in which this location is eligible.","items":{"type":"string"},"title":"Market Codes","type":"array"},"opening_hours":{"anyOf":[{"$ref":"#/components/schemas/LocationHoursScheduleRead"},{"type":"null"}],"default":null,"description":"Optional regular hours and date-specific exceptions."},"current_open_state":{"$ref":"#/components/schemas/MerchantLocationOpenState","description":"Current derived open, closed, or unknown state."},"next_transition_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"Next UTC open/closed transition, when it can be determined.","title":"Next Transition At"}},"required":["id","version_id","version_number","name","address","timezone","market_codes","current_open_state"],"title":"PublicMerchantLocationRead","type":"object"},"PublicMppMerchantRead":{"description":"Public identity block for a merchant.","properties":{"slug":{"description":"URL segment identifying this storefront on every endpoint.","examples":["coffee-cart"],"title":"Slug","type":"string"},"display_name":{"description":"Buyer-facing merchant name.","examples":["Coffee Cart"],"title":"Display Name","type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Short description of what the merchant sells.","title":"Description"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Absolute URL of the merchant logo.","title":"Logo Url"},"support_email":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Where a buyer should take an order problem.","examples":["support@coffee-cart.example.com"],"title":"Support Email"},"support_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Merchant support or help-centre page.","title":"Support Url"},"status":{"$ref":"#/components/schemas/AgenticMerchantStatus","description":"Whether the storefront is currently transacting."},"default_currency":{"$ref":"#/components/schemas/CurrencyCode","description":"ISO-4217 currency the catalog is priced in by default."},"country":{"$ref":"#/components/schemas/CountryCode","description":"ISO-3166-1 alpha-2 country the merchant operates from."}},"required":["slug","display_name","status","default_currency","country"],"title":"PublicMppMerchantRead","type":"object"},"TimeZone":{"description":"IANA timezone identifier used for a profile's default timezone.","enum":["Africa/Abidjan","Africa/Accra","Africa/Addis_Ababa","Africa/Algiers","Africa/Asmara","Africa/Asmera","Africa/Bamako","Africa/Bangui","Africa/Banjul","Africa/Bissau","Africa/Blantyre","Africa/Brazzaville","Africa/Bujumbura","Africa/Cairo","Africa/Casablanca","Africa/Ceuta","Africa/Conakry","Africa/Dakar","Africa/Dar_es_Salaam","Africa/Djibouti","Africa/Douala","Africa/El_Aaiun","Africa/Freetown","Africa/Gaborone","Africa/Harare","Africa/Johannesburg","Africa/Juba","Africa/Kampala","Africa/Khartoum","Africa/Kigali","Africa/Kinshasa","Africa/Lagos","Africa/Libreville","Africa/Lome","Africa/Luanda","Africa/Lubumbashi","Africa/Lusaka","Africa/Malabo","Africa/Maputo","Africa/Maseru","Africa/Mbabane","Africa/Mogadishu","Africa/Monrovia","Africa/Nairobi","Africa/Ndjamena","Africa/Niamey","Africa/Nouakchott","Africa/Ouagadougou","Africa/Porto-Novo","Africa/Sao_Tome","Africa/Timbuktu","Africa/Tripoli","Africa/Tunis","Africa/Windhoek","America/Adak","America/Anchorage","America/Anguilla","America/Antigua","America/Araguaina","America/Argentina/Buenos_Aires","America/Argentina/Catamarca","America/Argentina/ComodRivadavia","America/Argentina/Cordoba","America/Argentina/Jujuy","America/Argentina/La_Rioja","America/Argentina/Mendoza","America/Argentina/Rio_Gallegos","America/Argentina/Salta","America/Argentina/San_Juan","America/Argentina/San_Luis","America/Argentina/Tucuman","America/Argentina/Ushuaia","America/Aruba","America/Asuncion","America/Atikokan","America/Atka","America/Bahia","America/Bahia_Banderas","America/Barbados","America/Belem","America/Belize","America/Blanc-Sablon","America/Boa_Vista","America/Bogota","America/Boise","America/Buenos_Aires","America/Cambridge_Bay","America/Campo_Grande","America/Cancun","America/Caracas","America/Catamarca","America/Cayenne","America/Cayman","America/Chicago","America/Chihuahua","America/Ciudad_Juarez","America/Coral_Harbour","America/Cordoba","America/Costa_Rica","America/Coyhaique","America/Creston","America/Cuiaba","America/Curacao","America/Danmarkshavn","America/Dawson","America/Dawson_Creek","America/Denver","America/Detroit","America/Dominica","America/Edmonton","America/Eirunepe","America/El_Salvador","America/Ensenada","America/Fortaleza","America/Fort_Nelson","America/Fort_Wayne","America/Glace_Bay","America/Godthab","America/Goose_Bay","America/Grand_Turk","America/Grenada","America/Guadeloupe","America/Guatemala","America/Guayaquil","America/Guyana","America/Halifax","America/Havana","America/Hermosillo","America/Indianapolis","America/Indiana/Indianapolis","America/Indiana/Knox","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Tell_City","America/Indiana/Vevay","America/Indiana/Vincennes","America/Indiana/Winamac","America/Inuvik","America/Iqaluit","America/Jamaica","America/Jujuy","America/Juneau","America/Kentucky/Louisville","America/Kentucky/Monticello","America/Knox_IN","America/Kralendijk","America/La_Paz","America/Lima","America/Los_Angeles","America/Louisville","America/Lower_Princes","America/Maceio","America/Managua","America/Manaus","America/Marigot","America/Martinique","America/Matamoros","America/Mazatlan","America/Mendoza","America/Menominee","America/Merida","America/Metlakatla","America/Mexico_City","America/Miquelon","America/Moncton","America/Monterrey","America/Montevideo","America/Montreal","America/Montserrat","America/Nassau","America/New_York","America/Nipigon","America/Nome","America/Noronha","America/North_Dakota/Beulah","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/Nuuk","America/Ojinaga","America/Panama","America/Pangnirtung","America/Paramaribo","America/Phoenix","America/Porto_Acre","America/Porto_Velho","America/Port-au-Prince","America/Port_of_Spain","America/Puerto_Rico","America/Punta_Arenas","America/Rainy_River","America/Rankin_Inlet","America/Recife","America/Regina","America/Resolute","America/Rio_Branco","America/Rosario","America/Santarem","America/Santa_Isabel","America/Santiago","America/Santo_Domingo","America/Sao_Paulo","America/Scoresbysund","America/Shiprock","America/Sitka","America/St_Barthelemy","America/St_Johns","America/St_Kitts","America/St_Lucia","America/St_Thomas","America/St_Vincent","America/Swift_Current","America/Tegucigalpa","America/Thule","America/Thunder_Bay","America/Tijuana","America/Toronto","America/Tortola","America/Vancouver","America/Virgin","America/Whitehorse","America/Winnipeg","America/Yakutat","America/Yellowknife","Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Macquarie","Antarctica/Mawson","Antarctica/McMurdo","Antarctica/Palmer","Antarctica/Rothera","Antarctica/South_Pole","Antarctica/Syowa","Antarctica/Troll","Antarctica/Vostok","Arctic/Longyearbyen","Asia/Aden","Asia/Almaty","Asia/Amman","Asia/Anadyr","Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Ashkhabad","Asia/Atyrau","Asia/Baghdad","Asia/Bahrain","Asia/Baku","Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek","Asia/Brunei","Asia/Calcutta","Asia/Chita","Asia/Choibalsan","Asia/Chongqing","Asia/Chungking","Asia/Colombo","Asia/Dacca","Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai","Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Harbin","Asia/Hebron","Asia/Hong_Kong","Asia/Hovd","Asia/Ho_Chi_Minh","Asia/Irkutsk","Asia/Istanbul","Asia/Jakarta","Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka","Asia/Karachi","Asia/Kashgar","Asia/Kathmandu","Asia/Katmandu","Asia/Khandyga","Asia/Kolkata","Asia/Krasnoyarsk","Asia/Kuala_Lumpur","Asia/Kuching","Asia/Kuwait","Asia/Macao","Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila","Asia/Muscat","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk","Asia/Omsk","Asia/Oral","Asia/Phnom_Penh","Asia/Pontianak","Asia/Pyongyang","Asia/Qatar","Asia/Qostanay","Asia/Qyzylorda","Asia/Rangoon","Asia/Riyadh","Asia/Saigon","Asia/Sakhalin","Asia/Samarkand","Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk","Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran","Asia/Tel_Aviv","Asia/Thimbu","Asia/Thimphu","Asia/Tokyo","Asia/Tomsk","Asia/Ujung_Pandang","Asia/Ulaanbaatar","Asia/Ulan_Bator","Asia/Urumqi","Asia/Ust-Nera","Asia/Vientiane","Asia/Vladivostok","Asia/Yakutsk","Asia/Yangon","Asia/Yekaterinburg","Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda","Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faeroe","Atlantic/Faroe","Atlantic/Jan_Mayen","Atlantic/Madeira","Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/Stanley","Atlantic/St_Helena","Australia/ACT","Australia/Adelaide","Australia/Brisbane","Australia/Broken_Hill","Australia/Canberra","Australia/Currie","Australia/Darwin","Australia/Eucla","Australia/Hobart","Australia/LHI","Australia/Lindeman","Australia/Lord_Howe","Australia/Melbourne","Australia/North","Australia/NSW","Australia/Perth","Australia/Queensland","Australia/South","Australia/Sydney","Australia/Tasmania","Australia/Victoria","Australia/West","Australia/Yancowinna","Brazil/Acre","Brazil/DeNoronha","Brazil/East","Brazil/West","Canada/Atlantic","Canada/Central","Canada/Eastern","Canada/Mountain","Canada/Newfoundland","Canada/Pacific","Canada/Saskatchewan","Canada/Yukon","CET","Chile/Continental","Chile/EasterIsland","CST6CDT","Cuba","EET","Egypt","Eire","EST","EST5EDT","Europe/Amsterdam","Europe/Andorra","Europe/Astrakhan","Europe/Athens","Europe/Belfast","Europe/Belgrade","Europe/Berlin","Europe/Bratislava","Europe/Brussels","Europe/Bucharest","Europe/Budapest","Europe/Busingen","Europe/Chisinau","Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar","Europe/Guernsey","Europe/Helsinki","Europe/Isle_of_Man","Europe/Istanbul","Europe/Jersey","Europe/Kaliningrad","Europe/Kiev","Europe/Kirov","Europe/Kyiv","Europe/Lisbon","Europe/Ljubljana","Europe/London","Europe/Luxembourg","Europe/Madrid","Europe/Malta","Europe/Mariehamn","Europe/Minsk","Europe/Monaco","Europe/Moscow","Europe/Nicosia","Europe/Oslo","Europe/Paris","Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome","Europe/Samara","Europe/San_Marino","Europe/Sarajevo","Europe/Saratov","Europe/Simferopol","Europe/Skopje","Europe/Sofia","Europe/Stockholm","Europe/Tallinn","Europe/Tirane","Europe/Tiraspol","Europe/Ulyanovsk","Europe/Uzhgorod","Europe/Vaduz","Europe/Vatican","Europe/Vienna","Europe/Vilnius","Europe/Volgograd","Europe/Warsaw","Europe/Zagreb","Europe/Zaporozhye","Europe/Zurich","Factory","GB","GB-Eire","GMT","GMT0","GMT-0","GMT+0","Greenwich","Hongkong","HST","Iceland","Indian/Antananarivo","Indian/Chagos","Indian/Christmas","Indian/Cocos","Indian/Comoro","Indian/Kerguelen","Indian/Mahe","Indian/Maldives","Indian/Mauritius","Indian/Mayotte","Indian/Reunion","Iran","Israel","Jamaica","Japan","Kwajalein","Libya","MET","Mexico/BajaNorte","Mexico/BajaSur","Mexico/General","MST","MST7MDT","Navajo","NZ","NZ-CHAT","Pacific/Apia","Pacific/Auckland","Pacific/Bougainville","Pacific/Chatham","Pacific/Chuuk","Pacific/Easter","Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo","Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos","Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam","Pacific/Honolulu","Pacific/Johnston","Pacific/Kanton","Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro","Pacific/Marquesas","Pacific/Midway","Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea","Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn","Pacific/Pohnpei","Pacific/Ponape","Pacific/Port_Moresby","Pacific/Rarotonga","Pacific/Saipan","Pacific/Samoa","Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu","Pacific/Truk","Pacific/Wake","Pacific/Wallis","Pacific/Yap","Poland","Portugal","PRC","PST8PDT","ROC","ROK","Singapore","Turkey","UCT","Universal","US/Alaska","US/Aleutian","US/Arizona","US/Central","US/Eastern","US/East-Indiana","US/Hawaii","US/Indiana-Starke","US/Michigan","US/Mountain","US/Pacific","US/Samoa","UTC","WET","W-SU","Zulu"],"title":"TimeZone","type":"string"},"WeekdayCode":{"description":"Two-letter weekday code used by availability schedule rules.\n\nDeliberately not :class:`datetime.date.weekday` integers — schedules are\nauthored and read by humans and LLMs, and ``mo`` survives JSON round\ntrips more legibly than ``0``.","enum":["mo","tu","we","th","fr","sa","su"],"title":"WeekdayCode","type":"string"},"PublicMppCatalogItemLocationsResponse":{"additionalProperties":false,"description":"Market-filtered public locations and availability for one listing.","properties":{"merchant":{"$ref":"#/components/schemas/PublicMppMerchantRead","description":"Identity of the storefront that owns these locations."},"market":{"description":"Resolved merchant market code.","title":"Market","type":"string"},"locale":{"$ref":"#/components/schemas/LocaleCode","description":"Resolved locale for this response."},"catalog_item_id":{"description":"Catalog item whose location availability was requested.","title":"Catalog Item Id","type":"string"},"catalog_variant_id":{"description":"Exact variant used to resolve location-scoped stock.","title":"Catalog Variant Id","type":"string"},"items":{"description":"Eligible public locations and availability for the listing.","items":{"$ref":"#/components/schemas/PublicCatalogLocationAvailabilityRead"},"title":"Items","type":"array"},"total":{"description":"Number of eligible public locations returned.","minimum":0,"title":"Total","type":"integer"}},"required":["merchant","market","locale","catalog_item_id","catalog_variant_id","items","total"],"title":"PublicMppCatalogItemLocationsResponse","type":"object"},"AgenticCatalogPriceKind":{"description":"How a public catalog amount should be interpreted by a buyer.\n\nCatalog amounts are discovery-time prices, not an order total.  A\n``booking_rate`` must be resolved through a quote for an exact booking,\nwhile ``price_on_request`` has no public amount until a merchant answers.","enum":["unit_price","booking_rate","price_on_request"],"title":"AgenticCatalogPriceKind","type":"string"},"AgenticCustomizationPricingBasis":{"description":"How a customization price delta contributes to an order line.","enum":["per_item","per_pricing_unit","flat_per_line"],"title":"AgenticCustomizationPricingBasis","type":"string"},"AgenticCustomizationSelectionMode":{"description":"How a buyer may select choices in one customization group.","enum":["single","multiple","quantity"],"title":"AgenticCustomizationSelectionMode","type":"string"},"AgenticFulfillmentType":{"description":"How a purchased catalog item is fulfilled to the buyer.\n\n``DELIVERY`` is local/courier delivery; ``SHIP`` is carrier parcel\nshipment (and forces ``requires_fulfillment_address`` on the listing).","enum":["delivery","pickup","digital","service_booking","ship"],"title":"AgenticFulfillmentType","type":"string"},"AgenticPriceUnit":{"description":"Unit named beside a catalog rate on public and admin APIs.\n\nInterval calendars are currently keyed by property-local dates, so their\nsupported interval unit is ``DAY``. Seller-facing travel UI may call that\ninterval a night, while the protocol continues to expose the neutral day\nunit.","enum":["unit","day","person","hour"],"title":"AgenticPriceUnit","type":"string"},"AgenticPricingModel":{"description":"How a listing's order total is computed from its rate.\n\n``unit_amount`` is the integer-minor-unit RATE; the line total is\n``rate × unit_count × quantity`` where ``unit_count`` derives from the\norder's captured booking window / party size:\n\n- ``PER_UNIT`` — unit_count = 1 (the shipped default behavior).\n- ``PER_INTERVAL`` — unit_count = whole day intervals in the half-open\n  booking window (booking_end date − booking_start date); requires at\n  least one interval. Travel UI presents a day interval as a night.\n- ``PER_PERSON`` — unit_count = the order's ``party_size``.\n- ``PER_HOUR`` — unit_count = the appointment booking's\n  ``duration_minutes`` expressed in whole-and-fractional hours; the line\n  base amount is ``rate × duration_minutes / 60`` rounded half-up once.\n- ``QUOTED`` — no fixed rate (``unit_amount`` is absent); a merchant\n  responder returns authoritative offers and the buyer purchases one by\n  passing its ``quote_offer_id`` on an order line.","enum":["per_unit","per_interval","per_person","per_hour","quoted"],"title":"AgenticPricingModel","type":"string"},"BookingType":{"description":"Commercial discriminator for one cart / checkout / order line.\n\nA line is *bookable* whenever this is not :attr:`QUANTITY`. The type\ndecides which booking_snapshot branch the line carries, which supply the offer\nis priced against, and whether a booking hold is required before\npayment. It deliberately lives on the line — one order may mix a\nshipped product with a class reservation.","enum":["quantity","appointment","scheduled_class","stay"],"title":"BookingType","type":"string"},"CatalogFxRead":{"additionalProperties":false,"description":"Buyer-presentment FX metadata; absent for native market currency.","properties":{"exchange_rate":{"anyOf":[{"exclusiveMinimum":0.0,"type":"number"},{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"}],"description":"Fee-inclusive native-to-presentment exchange rate.","title":"Exchange Rate"},"native_currency":{"$ref":"#/components/schemas/CurrencyCode","description":"Binding currency of the resolved merchant market."}},"required":["exchange_rate","native_currency"],"title":"CatalogFxRead","type":"object"},"CatalogMediaRole":{"description":"Presentation role of an item- or variant-owned catalog image.","enum":["primary","gallery"],"title":"CatalogMediaRole","type":"string"},"CatalogOperationMessage":{"additionalProperties":false,"description":"Portable informational or warning message for a catalog operation.","properties":{"type":{"$ref":"#/components/schemas/CatalogOperationMessageType","default":"info","description":"Severity category of this operation message."},"code":{"description":"Stable machine-readable message code.","examples":["partial_lookup"],"maxLength":120,"minLength":1,"title":"Code","type":"string"},"content":{"description":"Buyer-platform-readable explanation of the message.","maxLength":2000,"minLength":1,"title":"Content","type":"string"},"path":{"anyOf":[{"maxLength":512,"type":"string"},{"type":"null"}],"default":null,"description":"Request-field path associated with the message, when applicable.","examples":["ids[1]"],"title":"Path"}},"required":["code","content"],"title":"CatalogOperationMessage","type":"object"},"CatalogOperationMessageType":{"description":"Portable severity category for catalog-operation messages.","enum":["info","warning"],"title":"CatalogOperationMessageType","type":"string"},"CatalogPriceRangeRead":{"additionalProperties":false,"description":"Derived item or stay range for one resolved market.","properties":{"market":{"description":"Merchant-scoped market code used to derive this price range.","maxLength":32,"minLength":1,"title":"Market","type":"string"},"currency":{"$ref":"#/components/schemas/CurrencyCode","description":"ISO 4217 currency of the returned integer minor-unit bounds."},"min_amount":{"description":"Lowest effective selling amount in integer minor units.","minimum":0,"title":"Min Amount","type":"integer"},"max_amount":{"description":"Highest effective selling amount in integer minor units.","minimum":0,"title":"Max Amount","type":"integer"},"original_min_amount":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Lowest undiscounted amount when any variant is on sale.","title":"Original Min Amount"},"original_max_amount":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Highest undiscounted amount when any variant is on sale.","title":"Original Max Amount"},"fx":{"anyOf":[{"$ref":"#/components/schemas/CatalogFxRead"},{"type":"null"}],"default":null,"description":"Presentment conversion metadata; null for native market bounds."}},"required":["market","currency","min_amount","max_amount"],"title":"CatalogPriceRangeRead","type":"object"},"CatalogPriceRead":{"additionalProperties":false,"description":"One resolved fixed or quoted-range price in integer minor units.","properties":{"market":{"description":"Merchant-scoped market code that supplied the binding price.","maxLength":32,"minLength":1,"title":"Market","type":"string"},"currency":{"$ref":"#/components/schemas/CurrencyCode","description":"ISO 4217 currency of the returned integer minor-unit amounts."},"unit_amount":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Fixed unit price in integer minor units; null for quoted pricing.","title":"Unit Amount"},"min_amount":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Inclusive lower price bound in integer minor units.","title":"Min Amount"},"max_amount":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Inclusive upper price bound in integer minor units.","title":"Max Amount"},"original_amount":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Undiscounted fixed price, or null when the price is not on sale.","title":"Original Amount"},"fx":{"anyOf":[{"$ref":"#/components/schemas/CatalogFxRead"},{"type":"null"}],"default":null,"description":"Presentment conversion metadata; null for a native market price."},"promotion":{"anyOf":[{"$ref":"#/components/schemas/CatalogPromotionRead"},{"type":"null"}],"default":null,"description":"Running seller promotion that may lower this price at checkout. Null when none applies. A catalog response may be cached for a short time, so compare `promotion.ends_at` with the clock; the price actually charged is always the one on the checkout or order."}},"required":["market","currency"],"title":"CatalogPriceRead","type":"object"},"CatalogPromotionRead":{"description":"A running seller promotion advertised beside a catalog price.\n\nAn advertisement, not an offer. ``from_unit_amount`` is the price at the\npromotion's *shallowest* arm, the one every buyer is eligible for; the arm\na buyer is actually drawn, its deadline, and whether it is reserved appear\nonly on the quote offer, checkout, or order that holds the claim. Nothing\nhere says how many redemptions remain, and the campaign id is not\npublished — buyers hold a claim, not a sale.","properties":{"title":{"description":"Name the seller gave the promotion.","title":"Title","type":"string"},"headline":{"description":"Plain description of the least a buyer gets, such as \"from 10% off\".","title":"Headline","type":"string"},"from_unit_amount":{"description":"Unit price at the promotion's shallowest arm, in minor units of `currency`. `unit_amount` stays the regular price.","minimum":0,"title":"From Unit Amount","type":"integer"},"ends_at":{"description":"When the promotion stops making new offers.","format":"date-time","title":"Ends At","type":"string"},"max_discount_amount":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Most the promotion takes off one order, in the market's currency.","title":"Max Discount Amount"}},"required":["title","headline","from_unit_amount","ends_at"],"title":"CatalogPromotionRead","type":"object"},"CatalogResponseAnalytics":{"additionalProperties":false,"description":"Fresh per-response token used to link discovery to commerce analytics.","properties":{"openmerchant_attribution_id":{"description":"OpenMerchant discovery token to pass into later commerce analytics.","examples":["om_attr_01J8S3Q8AZ2A7P4H3K5M6N7R8T"],"maxLength":64,"minLength":1,"title":"Openmerchant Attribution Id","type":"string"}},"required":["openmerchant_attribution_id"],"title":"CatalogResponseAnalytics","type":"object"},"DurationRule":{"additionalProperties":false,"description":"Allowed appointment durations as a bounded, stepped range.\n\n``min_minutes == max_minutes`` expresses a fixed-length service (a\n60-minute massage); a wider range with a step expresses a variable one\n(cleanings in whole-hour increments).","properties":{"min_minutes":{"description":"Shortest bookable duration.","maximum":10080,"minimum":1,"title":"Min Minutes","type":"integer"},"max_minutes":{"description":"Longest bookable duration. Must be reachable from `min_minutes` in whole `step_minutes` increments.","maximum":10080,"minimum":1,"title":"Max Minutes","type":"integer"},"step_minutes":{"default":15,"description":"Increment between allowed durations.","maximum":1440,"minimum":1,"title":"Step Minutes","type":"integer"}},"required":["min_minutes","max_minutes"],"title":"DurationRule","type":"object"},"MppPaymentIntent":{"description":"MPP payment intent identifiers used by service endpoints.","enum":["charge","session"],"title":"MppPaymentIntent","type":"string"},"MppPaymentMethod":{"description":"Payment method identifiers advertised by MPP services.","enum":["stripe","tempo"],"title":"MppPaymentMethod","type":"string"},"PartySizeRule":{"additionalProperties":false,"description":"Inclusive bounds on how many people one line may cover.","properties":{"min":{"default":1,"description":"Fewest people one line may cover.","maximum":1000,"minimum":1,"title":"Min","type":"integer"},"max":{"default":1,"description":"Most people one line may cover.","maximum":1000,"minimum":1,"title":"Max","type":"integer"}},"title":"PartySizeRule","type":"object"},"PublicAppointmentBookingRead":{"description":"Buyer-visible appointment bounds; internal resources stay private.","properties":{"type":{"const":"appointment","default":"appointment","description":"Discriminator marking an appointment-bookable variant.","title":"Type","type":"string"},"timezone":{"description":"IANA timezone the merchant authored this schedule in; every wall-clock rule above is evaluated in it.","examples":["America/Los_Angeles"],"title":"Timezone","type":"string"},"duration":{"$ref":"#/components/schemas/DurationRule","description":"Durations this variant can be booked for."},"party_size":{"$ref":"#/components/schemas/PartySizeRule","description":"How many people one booking may cover."},"lead_time_minutes":{"description":"Minimum notice before a start becomes bookable.","title":"Lead Time Minutes","type":"integer"},"horizon_days":{"description":"How far ahead the calendar is open.","title":"Horizon Days","type":"integer"},"resources":{"description":"Nameable resources a buyer may pin; empty when unnamed.","items":{"$ref":"#/components/schemas/ResourceRule"},"title":"Resources","type":"array"}},"required":["timezone","duration","party_size","lead_time_minutes","horizon_days"],"title":"PublicAppointmentBookingRead","type":"object"},"PublicCatalogItemType":{"description":"Catalog item categories manageable through the public v1 API.","enum":["product","service","travel_booking"],"title":"PublicCatalogItemType","type":"string"},"PublicCatalogMediaRead":{"description":"Public ordered media without the internal reusable-cache identifier.","properties":{"id":{"description":"Stable identifier for this catalog media association.","examples":["om_agcm_4c1a"],"title":"Id","type":"string"},"source_url":{"description":"Absolute HTTP(S) URL of the published image.","examples":["https://merchant.example/images/espresso.jpg"],"title":"Source Url","type":"string"},"role":{"$ref":"#/components/schemas/CatalogMediaRole","description":"How the image is used within the item or variant gallery."},"alt_text":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Accessible alternative text for the image, when supplied.","examples":["A ceramic cup filled with espresso"],"title":"Alt Text"},"display_order":{"description":"Zero-based relative ordering of the image within its gallery.","title":"Display Order","type":"integer"}},"required":["id","source_url","role","display_order"],"title":"PublicCatalogMediaRead","type":"object"},"PublicCatalogRequirementsRead":{"description":"Complete buyer information requirements returned by public v1.","properties":{"fulfillment_address":{"description":"An order must carry a fulfillment address before it can be placed.","title":"Fulfillment Address","type":"boolean"},"customer_email":{"description":"An order must carry a buyer email address.","title":"Customer Email","type":"boolean"},"customer_phone":{"description":"An order must carry a buyer phone number.","title":"Customer Phone","type":"boolean"},"customer_name":{"description":"An order must name the person the order is for.","title":"Customer Name","type":"boolean"},"date_of_birth":{"description":"An order must carry the buyer's structured date of birth.","title":"Date Of Birth","type":"boolean"},"scheduling":{"description":"An order must pick an appointment or class occurrence — the listing cannot be bought without a scheduled time.","title":"Scheduling","type":"boolean"},"booking_window":{"description":"An order must carry a start/end window, as a stay or a per-night / per-day listing does.","title":"Booking Window","type":"boolean"}},"required":["fulfillment_address","customer_email","customer_phone","customer_name","date_of_birth","scheduling","booking_window"],"title":"PublicCatalogRequirementsRead","type":"object"},"PublicCatalogVariantInventoryRead":{"description":"Quantity stock returned for one finite variant.","properties":{"quantity":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Units of this variant on hand. Null means the merchant does not track a finite count, which is not the same as zero.","title":"Quantity"}},"title":"PublicCatalogVariantInventoryRead","type":"object"},"PublicFulfillmentServiceRead":{"additionalProperties":false,"description":"One buyer-facing fulfillment service advertised beside a catalog listing.\n\nThis is the \"what will it cost to get this to me, and how fast?\" answer an\nagent needs *before* it opens a checkout. ``amount_from`` is a starting\nprice, not a quote: a tiered card's cheapest band and a carrier card's\nunknowable live rate are both honest answers, and the second is ``null``\nrather than a guess the buyer would later be charged more than.","properties":{"rate_card_id":{"description":"Stable id of the service, quotable as `rate_card_id`.","examples":["om_agrc_9f21"],"title":"Rate Card Id","type":"string"},"title":{"description":"Buyer-facing service name.","examples":["FedEx Ground"],"title":"Title","type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Merchant's own copy for the service, when it has any.","title":"Description"},"amount_from":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Lowest charge this service can produce, in currency minor units. Zero for a free service; null when only a live carrier quote can answer.","examples":[695],"title":"Amount From"},"currency":{"$ref":"#/components/schemas/CurrencyCode","description":"ISO-4217 currency `amount_from` is expressed in."},"min_transit_days":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Fastest published transit time in days, when published.","title":"Min Transit Days"},"max_transit_days":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Slowest published transit time in days, when published.","title":"Max Transit Days"}},"required":["rate_card_id","title","currency"],"title":"PublicFulfillmentServiceRead","type":"object"},"PublicMppAppliedOptionRead":{"description":"One concise key/value option applied to an exact variant.","properties":{"key":{"description":"Option axis name.","examples":["Size"],"title":"Key","type":"string"},"value":{"description":"Selected value on that axis.","examples":["Large"],"title":"Value","type":"string"}},"required":["key","value"],"title":"PublicMppAppliedOptionRead","type":"object"},"PublicMppCatalogItemRead":{"description":"One flat purchasable variant row on the public MPP catalog.","properties":{"id":{"description":"Stable catalog item id; several variant rows share it.","examples":["om_agci_4c1a"],"title":"Id","type":"string"},"variant_id":{"description":"The exact purchasable variant this row describes.","examples":["om_agcv_9d10"],"title":"Variant Id","type":"string"},"is_default_variant":{"description":"Whether an order that names only the item lands on this variant.","title":"Is Default Variant","type":"boolean"},"sku":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Merchant SKU for the variant, when it has one.","examples":["ESP-1-L"],"title":"Sku"},"name":{"description":"Buyer-facing name of this variant.","examples":["Espresso — Large"],"title":"Name","type":"string"},"product_name":{"description":"Buyer-facing name of the parent item, without variant detail.","examples":["Espresso"],"title":"Product Name","type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Merchant copy describing the listing.","title":"Description"},"product_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL of the item's page on the merchant's own site.","title":"Product Url"},"variant_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL of this specific variant on the merchant site.","title":"Variant Url"},"item_type":{"$ref":"#/components/schemas/PublicCatalogItemType","description":"Listing family — a physical good, a service, a stay, and so on."},"fulfillment_options":{"description":"Every supported fulfillment mode, with the stable public ids accepted by quote constraints.","items":{"$ref":"#/components/schemas/PublicQuoteFulfillmentRead"},"title":"Fulfillment Options","type":"array"},"price":{"anyOf":[{"$ref":"#/components/schemas/CatalogPriceRead"},{"type":"null"}],"default":null,"description":"Resolved market price; null for unbounded price-on-request."},"price_range":{"anyOf":[{"$ref":"#/components/schemas/CatalogPriceRangeRead"},{"type":"null"}],"default":null,"description":"Effective unit-rate bounds. For stays these summarize the published interval calendar."},"is_available":{"description":"Whether the variant can be purchased right now. False may mean out of stock, unpublished, or outside its selling window.","title":"Is Available","type":"boolean"},"inventory":{"$ref":"#/components/schemas/PublicCatalogVariantInventoryRead","description":"Stock position for this variant."},"media":{"description":"Ordered variant image gallery, falling back to the item gallery when the variant has no images of its own.","items":{"$ref":"#/components/schemas/PublicCatalogMediaRead"},"title":"Media","type":"array"},"requirements":{"$ref":"#/components/schemas/PublicCatalogRequirementsRead","description":"Item-level buyer data required for every variant — address, contact details, scheduling — before an order will be accepted."},"attributes":{"additionalProperties":{"type":"string"},"description":"Merchant display attributes (room type, plan tier, …).","title":"Attributes","type":"object"},"options":{"description":"Finite option values applied to this exact variant.","items":{"$ref":"#/components/schemas/PublicMppAppliedOptionRead"},"title":"Options","type":"array"},"variant_options":{"description":"The option axis / value pairs that identify this variant, with their publisher-assigned ids.","items":{"$ref":"#/components/schemas/PublicMppVariantOptionRead"},"title":"Variant Options","type":"array"},"customization_groups":{"description":"Order-time choices a buyer may make on this variant.","items":{"$ref":"#/components/schemas/PublicMppCustomizationGroupRead"},"title":"Customization Groups","type":"array"},"pricing_model":{"$ref":"#/components/schemas/AgenticPricingModel","default":"per_unit","description":"How the line total derives from the rate — per unit, night, day, or person — or `quoted` for price on request."},"price_kind":{"$ref":"#/components/schemas/AgenticCatalogPriceKind","default":"unit_price","description":"Whether the advertised amount is a unit price or a starting-from rate."},"quote_required":{"default":false,"description":"The listing cannot be bought directly; raise a quote and purchase the resulting offer.","title":"Quote Required","type":"boolean"},"price_unit":{"anyOf":[{"$ref":"#/components/schemas/AgenticPriceUnit"},{"type":"null"}],"default":null,"description":"Unit represented by the listing rate; stays use day."},"booking_type":{"$ref":"#/components/schemas/BookingType","default":"quantity","description":"Commercial discriminator for lines buying this variant. Anything other than quantity must be purchased through a quote offer."},"booking_config":{"anyOf":[{"discriminator":{"mapping":{"appointment":"#/components/schemas/PublicAppointmentBookingRead","scheduled_class":"#/components/schemas/PublicScheduledClassBookingRead","stay":"#/components/schemas/PublicStayBookingRead"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/PublicAppointmentBookingRead"},{"$ref":"#/components/schemas/PublicScheduledClassBookingRead"},{"$ref":"#/components/schemas/PublicStayBookingRead"}]},{"type":"null"}],"default":null,"description":"Buyer-visible bounds for a bookable variant (durations, party sizes, night limits). Null for ordinary quantity listings.","title":"Booking Config"},"availability_path":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"POST product-detail endpoint that accepts this row’s item id, variant_id, and a booking window; null unless the variant is bookable.","title":"Availability Path"},"quote_path":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Quotes endpoint path. Set for price-on-request listings and for every bookable variant, since bookings are purchased by offer.","title":"Quote Path"},"payment":{"description":"Advertised Stripe Shared Payment Token settlement for this item.","items":{"$ref":"#/components/schemas/PublicMppPaymentBlock"},"title":"Payment","type":"array"}},"required":["id","variant_id","is_default_variant","name","product_name","item_type","is_available","inventory","requirements"],"title":"PublicMppCatalogItemRead","type":"object"},"PublicMppCatalogPaginationResponse":{"additionalProperties":false,"description":"Opaque MPP cursor state for variant-flat catalog search.","properties":{"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Opaque cursor for the next page, or null at the end.","title":"Cursor"},"has_next_page":{"description":"Whether another page can be requested with this cursor.","title":"Has Next Page","type":"boolean"},"total_count":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Total number of variant-flat rows matching the search.","title":"Total Count"}},"required":["has_next_page"],"title":"PublicMppCatalogPaginationResponse","type":"object"},"PublicMppCustomizationChoiceRead":{"description":"One selectable order-time customization choice.","properties":{"id":{"description":"Identifier to select this choice with on an order line.","examples":["om_agcc_oat"],"title":"Id","type":"string"},"label":{"description":"Buyer-facing label of the choice.","examples":["Oat milk"],"title":"Label","type":"string"},"delta_amount":{"description":"How much selecting this choice moves the price, in minor units. May be negative.","title":"Delta Amount","type":"integer"},"currency":{"$ref":"#/components/schemas/CurrencyCode","description":"ISO-4217 currency of this resolved market delta."},"pricing_basis":{"$ref":"#/components/schemas/AgenticCustomizationPricingBasis","description":"Whether the delta applies per line or per selected unit."},"min_quantity":{"description":"Fewest of this choice that may be selected.","title":"Min Quantity","type":"integer"},"max_quantity":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Most that may be selected; null means unbounded.","title":"Max Quantity"},"default_quantity":{"description":"How many are selected when the buyer says nothing.","title":"Default Quantity","type":"integer"},"is_available":{"description":"Whether the choice can currently be selected.","title":"Is Available","type":"boolean"}},"required":["id","label","delta_amount","currency","pricing_basis","min_quantity","default_quantity","is_available"],"title":"PublicMppCustomizationChoiceRead","type":"object"},"PublicMppCustomizationGroupRead":{"description":"One order-time customization group applicable to this variant.","properties":{"id":{"description":"Identifier to reference this group with on an order line.","examples":["om_agcg_milk"],"title":"Id","type":"string"},"name":{"description":"Buyer-facing name of the group.","examples":["Milk"],"title":"Name","type":"string"},"selection_mode":{"$ref":"#/components/schemas/AgenticCustomizationSelectionMode","description":"Whether the buyer picks one choice or several."},"min_total_quantity":{"description":"Fewest selections across the whole group. Above zero makes the group mandatory.","title":"Min Total Quantity","type":"integer"},"max_total_quantity":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Most selections across the group; null means unbounded.","title":"Max Total Quantity"},"choices":{"description":"Selectable choices, in merchant display order.","items":{"$ref":"#/components/schemas/PublicMppCustomizationChoiceRead"},"title":"Choices","type":"array"}},"required":["id","name","selection_mode","min_total_quantity","choices"],"title":"PublicMppCustomizationGroupRead","type":"object"},"PublicMppPaymentBlock":{"description":"Payment metadata advertised per purchasable item / endpoint.\n\nMirrors the :class:`app.types.mpp.MppEndpointPayment` wire shape\n(camelCase handled by explicit field names ``amount`` in minor units as\na string, plus ``decimals``) so agents that already parse directory\nentries can parse the catalog too.","properties":{"intent":{"$ref":"#/components/schemas/MppPaymentIntent","default":"charge","description":"What paying does — charge the buyer now, or open a session."},"method":{"$ref":"#/components/schemas/MppPaymentMethod","description":"Rail the payment settles over."},"currency":{"description":"ISO-4217 currency the advertised amount is in.","examples":["usd"],"title":"Currency","type":"string"},"decimals":{"description":"ISO minor-unit exponent for the advertised currency.","maximum":3,"minimum":0,"title":"Decimals","type":"integer"},"amount":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Fixed amount in minor units, as a string (directory convention).","title":"Amount"},"amountHint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Advertised rate in minor units for dynamic computed pricing.","title":"Amounthint"},"unitType":{"anyOf":[{"$ref":"#/components/schemas/AgenticPriceUnit"},{"type":"null"}],"default":null,"description":"Pricing unit ('unit' | 'day' | 'person' | 'hour')."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Buyer-facing explanation of what the charge covers.","examples":["Order total, charged at purchase"],"title":"Description"},"dynamic":{"default":false,"description":"The amount is computed per request rather than fixed; expect a 402 challenge carrying the real total.","title":"Dynamic","type":"boolean"}},"required":["method","currency","decimals"],"title":"PublicMppPaymentBlock","type":"object"},"PublicMppVariantOptionRead":{"description":"One finite option selection identifying a catalog variant.","properties":{"option_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Identifier of the option axis, when the merchant publishes one.","examples":["om_agco_size"],"title":"Option Id"},"option_name":{"description":"Buyer-facing name of the option axis.","examples":["Size"],"title":"Option Name","type":"string"},"value_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Identifier of the selected value on that axis.","examples":["om_agov_large"],"title":"Value Id"},"value_label":{"description":"Buyer-facing label of the selected value.","examples":["Large"],"title":"Value Label","type":"string"}},"required":["option_name","value_label"],"title":"PublicMppVariantOptionRead","type":"object"},"PublicQuoteFulfillmentRead":{"additionalProperties":false,"description":"Exactly one fulfillment choice resolved on an authoritative offer.","properties":{"type":{"$ref":"#/components/schemas/AgenticFulfillmentType","description":"Fulfillment mode the merchant priced for this offer."},"option_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Stable catalog option id selected for this offer, when published.","title":"Option Id"},"location_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Canonical business location priced by this offer.","title":"Location Id"},"rate_card_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Published fulfillment service this offer priced, when the buyer constrained the quote to one.","examples":["om_agrc_9f21"],"title":"Rate Card Id"},"services":{"description":"Published services that can fulfill this listing this way in the resolved market, cheapest first. Empty on an offer, which already names the one service it priced.","items":{"$ref":"#/components/schemas/PublicFulfillmentServiceRead"},"title":"Services","type":"array"}},"required":["type"],"title":"PublicQuoteFulfillmentRead","type":"object"},"PublicScheduledClassBookingRead":{"description":"Buyer-visible class bounds.","properties":{"type":{"const":"scheduled_class","default":"scheduled_class","description":"Discriminator marking a class-bookable variant.","title":"Type","type":"string"},"timezone":{"description":"IANA timezone the merchant authored this schedule in; every wall-clock rule above is evaluated in it.","examples":["America/Los_Angeles"],"title":"Timezone","type":"string"},"party_size":{"$ref":"#/components/schemas/PartySizeRule","description":"How many seats one booking may reserve."}},"required":["timezone","party_size"],"title":"PublicScheduledClassBookingRead","type":"object"},"PublicStayBookingRead":{"description":"Buyer-visible stay bounds.","properties":{"type":{"const":"stay","default":"stay","description":"Discriminator marking a stay-bookable variant.","title":"Type","type":"string"},"timezone":{"description":"IANA timezone the merchant authored this schedule in; every wall-clock rule above is evaluated in it.","examples":["America/Los_Angeles"],"title":"Timezone","type":"string"},"minimum_nights":{"description":"Shortest stay the property accepts.","title":"Minimum Nights","type":"integer"},"maximum_nights":{"description":"Longest stay the property accepts.","title":"Maximum Nights","type":"integer"},"maximum_rooms":{"description":"Most rooms one booking may reserve.","title":"Maximum Rooms","type":"integer"},"max_guests_per_room":{"description":"Occupancy ceiling per room, adults and children combined.","title":"Max Guests Per Room","type":"integer"}},"required":["timezone","minimum_nights","maximum_nights","maximum_rooms","max_guests_per_room"],"title":"PublicStayBookingRead","type":"object"},"ResourceRule":{"additionalProperties":false,"description":"One named bookable resource (a staff member, room, or chair).\n\nOptional: a variant with no named resources books against a plain\n``concurrency`` count. Naming them enables buyer-visible preference\n(\"book me with Anna\") and per-resource overlap accounting.","properties":{"id":{"description":"Identifier a buyer pins the booking to.","examples":["res_anna"],"maxLength":64,"minLength":1,"title":"Id","type":"string"},"name":{"description":"Buyer-facing name of the resource.","examples":["Anna"],"maxLength":255,"minLength":1,"title":"Name","type":"string"}},"required":["id","name"],"title":"ResourceRule","type":"object"},"PublicMppCatalogResponse":{"additionalProperties":false,"description":"Response for ``POST /mpp/{slug}/catalog/search``.","properties":{"messages":{"description":"Informational and warning messages produced by the operation.","items":{"$ref":"#/components/schemas/CatalogOperationMessage"},"title":"Messages","type":"array"},"analytics":{"anyOf":[{"$ref":"#/components/schemas/CatalogResponseAnalytics"},{"type":"null"}],"default":null,"description":"Fresh correlation data for downstream commerce analytics."},"pagination":{"anyOf":[{"$ref":"#/components/schemas/PublicMppCatalogPaginationResponse"},{"type":"null"}],"default":null,"description":"Cursor state for this page of variant-flat results."},"merchant":{"$ref":"#/components/schemas/PublicMppMerchantRead","description":"Identity of the storefront these items belong to."},"market":{"description":"Merchant market resolved for this response.","title":"Market","type":"string"},"locale":{"$ref":"#/components/schemas/LocaleCode","description":"Localized-copy locale applied to this response."},"items":{"description":"One row per purchasable VARIANT, not per item — several rows may share an `id` and differ by `variant_id`.","items":{"$ref":"#/components/schemas/PublicMppCatalogItemRead"},"title":"Items","type":"array"}},"required":["merchant","market","locale","items"],"title":"PublicMppCatalogResponse","type":"object"},"PublicMppCatalogLookupRequest":{"additionalProperties":false,"description":"Body for ``POST /mpp/{slug}/catalog/lookup``.","properties":{"ids":{"description":"Up to ten product, variant, SKU, or merchant-native ids to resolve.","examples":[["om_agci_4c1a","sku_espresso_12oz"]],"items":{"type":"string"},"maxItems":10,"minItems":1,"title":"Ids","type":"array"},"filters":{"anyOf":[{"$ref":"#/components/schemas/PublicMppCatalogFilters"},{"type":"null"}],"default":null,"description":"Category and minor-unit price constraints for the lookup."},"context":{"anyOf":[{"$ref":"#/components/schemas/PublicMppCatalogContext"},{"type":"null"}],"default":null,"description":"Localization and buyer-intent hints for this lookup."},"signals":{"anyOf":[{"$ref":"#/components/schemas/PublicMppCatalogSignals"},{"type":"null"}],"default":null,"description":"Platform-observed routing and risk signals."},"attribution":{"anyOf":[{"$ref":"#/components/schemas/PublicMppCatalogAttribution"},{"type":"null"}],"default":null,"description":"Referral and campaign attribution to retain with discovery."}},"required":["ids"],"title":"PublicMppCatalogLookupRequest","type":"object"},"AppointmentAvailabilityRead":{"description":"Open appointment starts for one variant over a bounded window.","properties":{"type":{"const":"appointment","default":"appointment","description":"Discriminator selecting the appointment answer shape.","title":"Type","type":"string"},"variant_id":{"description":"Variant these starts belong to.","examples":["om_agcv_4c1a"],"title":"Variant Id","type":"string"},"timezone":{"description":"IANA timezone every instant below is anchored to.","examples":["America/Los_Angeles"],"title":"Timezone","type":"string"},"duration_minutes":{"description":"Appointment length the starts were enumerated for.","title":"Duration Minutes","type":"integer"},"slots":{"description":"Open starts, in chronological order. Empty means nothing is open.","items":{"$ref":"#/components/schemas/AppointmentSlotRead"},"title":"Slots","type":"array"},"truncated":{"default":false,"description":"True when enumeration stopped at the option cap before covering the full requested window; window.date_until is narrowed to the last fully-enumerated day — re-query from there.","title":"Truncated","type":"boolean"},"window":{"$ref":"#/components/schemas/DayWindowRead","description":"The day window this answer actually covers."}},"required":["variant_id","timezone","duration_minutes","window"],"title":"AppointmentAvailabilityRead","type":"object"},"AppointmentSlotRead":{"description":"One open appointment start.","properties":{"starts_at":{"description":"Timezone-aware instant the appointment would begin.","examples":["2026-09-01T15:00:00Z"],"format":"date-time","title":"Starts At","type":"string"},"ends_at":{"description":"Timezone-aware instant the appointment would end.","examples":["2026-09-01T16:00:00Z"],"format":"date-time","title":"Ends At","type":"string"},"resource_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Set only when the buyer filtered to one named resource.","title":"Resource Id"},"resource_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Buyer-facing name of that resource (a stylist, a room, a bay).","examples":["Chair 2"],"title":"Resource Name"}},"required":["starts_at","ends_at"],"title":"AppointmentSlotRead","type":"object"},"CatalogLookupCorrelation":{"additionalProperties":false,"description":"Map one caller input to the normalized item or variant it resolved.","properties":{"input_id":{"description":"Identifier exactly as supplied in the lookup request.","title":"Input Id","type":"string"},"product_id":{"description":"Stable product identifier the input resolved to.","title":"Product Id","type":"string"},"variant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Exact variant identifier when the input selected a variant.","title":"Variant Id"},"match":{"$ref":"#/components/schemas/CatalogLookupMatch","description":"Kind of catalog identifier that matched the input."}},"required":["input_id","product_id","match"],"title":"CatalogLookupCorrelation","type":"object"},"CatalogLookupMatch":{"description":"How a lookup input matched one normalized catalog result.","enum":["product_id","variant_id","sku","handle","url"],"title":"CatalogLookupMatch","type":"string"},"ClassOccurrenceRead":{"description":"One dated class session and its remaining capacity.","properties":{"occurrence_id":{"description":"Identifier to book this specific session with.","examples":["om_agco_7f21"],"title":"Occurrence Id","type":"string"},"starts_at":{"description":"Timezone-aware instant the session begins.","examples":["2026-09-01T18:00:00Z"],"format":"date-time","title":"Starts At","type":"string"},"ends_at":{"description":"Timezone-aware instant the session ends.","examples":["2026-09-01T19:00:00Z"],"format":"date-time","title":"Ends At","type":"string"},"seats_remaining":{"description":"Seats still bookable. Zero means sold out, not unavailable.","minimum":0,"title":"Seats Remaining","type":"integer"},"capacity":{"description":"Total seats the session holds.","minimum":0,"title":"Capacity","type":"integer"}},"required":["occurrence_id","starts_at","ends_at","seats_remaining","capacity"],"title":"ClassOccurrenceRead","type":"object"},"DayWindowRead":{"description":"Echo of the day window an answer covers.","properties":{"date_from":{"description":"First day the answer covers.","examples":["2026-09-01"],"format":"date","title":"Date From","type":"string"},"date_until":{"description":"Last day the answer covers. Narrower than the request when enumeration was truncated — re-query from here.","examples":["2026-09-07"],"format":"date","title":"Date Until","type":"string"}},"required":["date_from","date_until"],"title":"DayWindowRead","type":"object"},"PublicMppCatalogItemDetailRead":{"description":"Aggregate product detail returned by ``POST /catalog/product``.\n\nSearch remains variant-flat, while this response groups every current\nvariant under the stable item id and publishes both finite option axes and\ndescriptive, non-selectable item attributes.","properties":{"id":{"description":"Stable catalog item id.","examples":["om_agci_4c1a"],"title":"Id","type":"string"},"market":{"description":"Merchant market resolved for this item.","title":"Market","type":"string"},"locale":{"$ref":"#/components/schemas/LocaleCode","description":"Localized-copy locale applied to this item."},"name":{"description":"Buyer-facing name of the item.","examples":["Espresso"],"title":"Name","type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Merchant copy describing the item.","title":"Description"},"product_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL of the item's page on the merchant's own site.","title":"Product Url"},"media":{"description":"Ordered image gallery for the item.","items":{"$ref":"#/components/schemas/PublicCatalogMediaRead"},"title":"Media","type":"array"},"item_type":{"$ref":"#/components/schemas/PublicCatalogItemType","description":"Listing family — a physical good, a service, a stay, and so on."},"price_range":{"anyOf":[{"$ref":"#/components/schemas/CatalogPriceRangeRead"},{"type":"null"}],"default":null,"description":"Effective selling-rate bounds across the current variants."},"default_variant_id":{"description":"Variant an order lands on when it names only the item.","examples":["om_agcv_9d10"],"title":"Default Variant Id","type":"string"},"selected_variant_id":{"description":"Variant this response was resolved for — the request `variant_id` when one was sent, otherwise the default.","examples":["om_agcv_9d10"],"title":"Selected Variant Id","type":"string"},"booking_config":{"anyOf":[{"discriminator":{"mapping":{"appointment":"#/components/schemas/PublicAppointmentBookingRead","scheduled_class":"#/components/schemas/PublicScheduledClassBookingRead","stay":"#/components/schemas/PublicStayBookingRead"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/PublicAppointmentBookingRead"},{"$ref":"#/components/schemas/PublicScheduledClassBookingRead"},{"$ref":"#/components/schemas/PublicStayBookingRead"}]},{"type":"null"}],"default":null,"description":"Buyer-visible booking bounds for the selected variant; null for an ordinary quantity listing.","title":"Booking Config"},"attributes":{"additionalProperties":{"type":"string"},"description":"Descriptive item attributes such as material, roast, or plan tier.","title":"Attributes","type":"object"},"options":{"description":"Finite option axes a buyer chooses between to reach a variant.","items":{"$ref":"#/components/schemas/PublicMppCatalogOptionRead"},"title":"Options","type":"array"},"variants":{"description":"Every current variant of the item; at least one always exists.","items":{"$ref":"#/components/schemas/PublicMppCatalogItemRead"},"minItems":1,"title":"Variants","type":"array"},"availability":{"anyOf":[{"discriminator":{"mapping":{"appointment":"#/components/schemas/AppointmentAvailabilityRead","scheduled_class":"#/components/schemas/ScheduledClassAvailabilityRead","stay":"#/components/schemas/StayAvailabilityRead"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/AppointmentAvailabilityRead"},{"$ref":"#/components/schemas/ScheduledClassAvailabilityRead"},{"$ref":"#/components/schemas/StayAvailabilityRead"}]},{"type":"null"}],"default":null,"description":"Concrete bookable options for the selected variant. Populated only when the request body carried a booking window (date_from/date_until or check_in/check_out); the product read without booking never computes availability.","title":"Availability"}},"required":["id","market","locale","name","item_type","default_variant_id","selected_variant_id","variants"],"title":"PublicMppCatalogItemDetailRead","type":"object"},"PublicMppCatalogOptionRead":{"description":"One finite option axis available across an item's variants.","properties":{"id":{"description":"Identifier of the option axis.","examples":["om_agco_size"],"title":"Id","type":"string"},"name":{"description":"Buyer-facing name of the axis.","examples":["Size"],"title":"Name","type":"string"},"values":{"description":"Every value the axis offers across this item’s variants.","items":{"$ref":"#/components/schemas/PublicMppCatalogOptionValueRead"},"title":"Values","type":"array"}},"required":["id","name","values"],"title":"PublicMppCatalogOptionRead","type":"object"},"PublicMppCatalogOptionValueRead":{"description":"One allowed value for a finite catalog option axis.","properties":{"id":{"description":"Identifier of this value on its axis.","examples":["om_agov_large"],"title":"Id","type":"string"},"label":{"description":"Buyer-facing label of the value.","examples":["Large"],"title":"Label","type":"string"}},"required":["id","label"],"title":"PublicMppCatalogOptionValueRead","type":"object"},"ScheduledClassAvailabilityRead":{"description":"Class occurrences for one variant over a bounded window.","properties":{"type":{"const":"scheduled_class","default":"scheduled_class","description":"Discriminator selecting the scheduled-class answer shape.","title":"Type","type":"string"},"variant_id":{"description":"Variant these occurrences belong to.","examples":["om_agcv_4c1a"],"title":"Variant Id","type":"string"},"timezone":{"description":"IANA timezone every instant below is anchored to.","examples":["America/Los_Angeles"],"title":"Timezone","type":"string"},"occurrences":{"description":"Dated sessions in chronological order, each with its seat count.","items":{"$ref":"#/components/schemas/ClassOccurrenceRead"},"title":"Occurrences","type":"array"},"truncated":{"default":false,"description":"True when the occurrence list hit the option cap before covering the full requested window; re-query from the last occurrence.","title":"Truncated","type":"boolean"},"window":{"$ref":"#/components/schemas/DayWindowRead","description":"The day window this answer actually covers."}},"required":["variant_id","timezone","window"],"title":"ScheduledClassAvailabilityRead","type":"object"},"StayAvailabilityRead":{"description":"Nightly calendar and range verdict for one stay variant.","properties":{"type":{"const":"stay","default":"stay","description":"Discriminator selecting the stay answer shape.","title":"Type","type":"string"},"variant_id":{"description":"Variant this calendar belongs to.","examples":["om_agcv_4c1a"],"title":"Variant Id","type":"string"},"timezone":{"description":"IANA timezone the intervals are anchored to.","examples":["America/Los_Angeles"],"title":"Timezone","type":"string"},"price_unit":{"$ref":"#/components/schemas/AgenticPriceUnit","default":"day","description":"Unit represented by each dated stay interval."},"nights":{"description":"One entry per interval in the requested range, in order.","items":{"$ref":"#/components/schemas/StayNightRead"},"title":"Nights","type":"array"},"range_available":{"description":"True only when every night in the range can seat the requested rooms. An empty nights list means no calendar exists, which is not the same as availability being unknown.","title":"Range Available","type":"boolean"},"window":{"$ref":"#/components/schemas/StayWindowRead","description":"The stay range this calendar covers."}},"required":["variant_id","timezone","range_available","window"],"title":"StayAvailabilityRead","type":"object"},"StayNightRead":{"description":"One dated interval of a stay calendar.","properties":{"date":{"description":"The interval being described, in the property timezone.","examples":["2026-09-01"],"format":"date","title":"Date","type":"string"},"available_rooms":{"description":"Rooms open for this interval. Zero blocks any range covering it.","minimum":0,"title":"Available Rooms","type":"integer"},"per_interval_rate":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Effective rate for this interval in the listing currency, in minor units. Null when the merchant prices the stay as a whole rather than per interval.","title":"Per Interval Rate"}},"required":["date","available_rooms"],"title":"StayNightRead","type":"object"},"StayWindowRead":{"description":"Echo of the stay range an answer covers.","properties":{"check_in":{"description":"First night the calendar covers.","examples":["2026-09-01"],"format":"date","title":"Check In","type":"string"},"check_out":{"description":"Departure day the calendar was evaluated against.","examples":["2026-09-04"],"format":"date","title":"Check Out","type":"string"}},"required":["check_in","check_out"],"title":"StayWindowRead","type":"object"},"PublicMppCatalogLookupResponse":{"additionalProperties":false,"description":"Partial-success response for exact MPP catalog lookup.","properties":{"messages":{"description":"Informational and warning messages produced by the operation.","items":{"$ref":"#/components/schemas/CatalogOperationMessage"},"title":"Messages","type":"array"},"analytics":{"anyOf":[{"$ref":"#/components/schemas/CatalogResponseAnalytics"},{"type":"null"}],"default":null,"description":"Fresh correlation data for downstream commerce analytics."},"merchant":{"$ref":"#/components/schemas/PublicMppMerchantRead","description":"Identity of the storefront these products belong to."},"items":{"description":"Products resolved from the requested identifiers.","items":{"$ref":"#/components/schemas/PublicMppCatalogItemDetailRead"},"title":"Items","type":"array"},"correlations":{"description":"Successful input-to-product and input-to-variant mappings.","items":{"$ref":"#/components/schemas/CatalogLookupCorrelation"},"title":"Correlations","type":"array"},"missing_ids":{"description":"Requested identifiers that did not resolve in this storefront.","items":{"type":"string"},"title":"Missing Ids","type":"array"}},"required":["merchant","items"],"title":"PublicMppCatalogLookupResponse","type":"object"},"PublicMppCatalogBookingRequest":{"additionalProperties":false,"description":"MPP booking extension for a product-detail availability question.","properties":{"date_from":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null,"description":"First local day of an appointment or scheduled-class availability window.","examples":["2026-09-01"],"title":"Date From"},"date_until":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null,"description":"Last local day of an appointment or scheduled-class availability window, inclusive.","examples":["2026-09-07"],"title":"Date Until"},"duration_minutes":{"anyOf":[{"maximum":10080,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Requested appointment duration; omission uses the shortest allowed.","title":"Duration Minutes"},"party_size":{"default":1,"description":"Number of guests the appointment or class must accommodate.","maximum":1000,"minimum":1,"title":"Party Size","type":"integer"},"resource_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Optional exact appointment resource to search.","title":"Resource Id"},"include_full":{"default":true,"description":"Whether full scheduled-class occurrences remain in the answer.","title":"Include Full","type":"boolean"},"check_in":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null,"description":"First night of a stay availability window.","examples":["2026-09-01"],"title":"Check In"},"check_out":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null,"description":"Departure day of a stay availability window.","examples":["2026-09-04"],"title":"Check Out"},"rooms":{"default":1,"description":"Number of rooms the stay must accommodate.","maximum":100,"minimum":1,"title":"Rooms","type":"integer"},"adults":{"default":1,"description":"Number of adult stay guests.","maximum":100,"minimum":1,"title":"Adults","type":"integer"},"children":{"default":0,"description":"Number of child stay guests.","maximum":100,"minimum":0,"title":"Children","type":"integer"}},"title":"PublicMppCatalogBookingRequest","type":"object"},"PublicMppCatalogSelectedOption":{"additionalProperties":false,"description":"One finite option selection for an MPP product-detail request.","properties":{"name":{"description":"Name of the product option axis being selected.","examples":["Size"],"maxLength":120,"minLength":1,"title":"Name","type":"string"},"id":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Optional merchant identifier for the selected option value.","examples":["om_agov_large"],"title":"Id"},"label":{"description":"Buyer-facing label of the selected option value.","examples":["Large"],"maxLength":255,"minLength":1,"title":"Label","type":"string"}},"required":["name","label"],"title":"PublicMppCatalogSelectedOption","type":"object"},"PublicMppCatalogProductRequest":{"additionalProperties":false,"description":"Body for ``POST /mpp/{slug}/catalog/product``.","properties":{"id":{"description":"Product, variant, or merchant-native identifier to resolve. See [UCP product lookup](https://ucp.dev/2026-08-25/specification/shopping/catalog/lookup#get-product-get_product).","examples":["om_agci_4c1a"],"maxLength":2048,"minLength":1,"title":"Id","type":"string"},"selected":{"description":"Exact finite option values requested by the buyer.","items":{"$ref":"#/components/schemas/PublicMppCatalogSelectedOption"},"title":"Selected","type":"array"},"preferences":{"description":"Option-axis names the caller wants the response to prioritize. See [UCP option selection](https://ucp.dev/2026-08-25/specification/shopping/catalog/lookup#option-selection).","examples":[["Size","Color"]],"items":{"type":"string"},"maxItems":100,"title":"Preferences","type":"array"},"filters":{"anyOf":[{"$ref":"#/components/schemas/PublicMppCatalogFilters"},{"type":"null"}],"default":null,"description":"Category and minor-unit price constraints for product resolution."},"context":{"anyOf":[{"$ref":"#/components/schemas/PublicMppCatalogContext"},{"type":"null"}],"default":null,"description":"Localization and buyer-intent hints for this product."},"signals":{"anyOf":[{"$ref":"#/components/schemas/PublicMppCatalogSignals"},{"type":"null"}],"default":null,"description":"Platform-observed routing and risk signals."},"attribution":{"anyOf":[{"$ref":"#/components/schemas/PublicMppCatalogAttribution"},{"type":"null"}],"default":null,"description":"Referral and campaign attribution to retain with discovery."},"variant_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Exact variant to select within the requested product.","examples":["om_agcv_9d10"],"title":"Variant Id"},"booking":{"anyOf":[{"$ref":"#/components/schemas/PublicMppCatalogBookingRequest"},{"type":"null"}],"default":null,"description":"Optional live-availability window for a bookable product."}},"required":["id"],"title":"PublicMppCatalogProductRequest","type":"object"},"PublicMppCatalogProductResponse":{"additionalProperties":false,"description":"Response for one complete MPP catalog product.","properties":{"messages":{"description":"Informational and warning messages produced by the operation.","items":{"$ref":"#/components/schemas/CatalogOperationMessage"},"title":"Messages","type":"array"},"analytics":{"anyOf":[{"$ref":"#/components/schemas/CatalogResponseAnalytics"},{"type":"null"}],"default":null,"description":"Fresh correlation data for downstream commerce analytics."},"merchant":{"$ref":"#/components/schemas/PublicMppMerchantRead","description":"Identity of the storefront this product belongs to."},"product":{"$ref":"#/components/schemas/PublicMppCatalogItemDetailRead","description":"Complete product detail localized for the request."}},"required":["merchant","product"],"title":"PublicMppCatalogProductResponse","type":"object"},"BuyerDob":{"description":"Buyer DOB write shape without a minimum-age requirement.\n\nBuyer information capture is a merchant fulfillment input rather than a\ncardholder-eligibility decision, so a valid DOB belonging to a minor must\nbe accepted.","properties":{"day":{"description":"Day of the month (1-31).","example":15,"maximum":31,"minimum":1,"title":"Day","type":"integer"},"month":{"description":"Month of the year (1-12).","example":6,"maximum":12,"minimum":1,"title":"Month","type":"integer"},"year":{"description":"Four-digit birth year.","example":1990,"minimum":1900,"title":"Year","type":"integer"}},"required":["day","month","year"],"title":"BuyerDob","type":"object"},"OrderLineSource":{"description":"Where one requested order line's price and booking come from.\n\nThe line-level discriminator that replaced the old order-level\n``items`` versus ``quote_id`` choice, so a single order can mix a\nshipped product with a booked class.","enum":["catalog","quote_offer"],"title":"OrderLineSource","type":"string"},"PublicMppBookingRequest":{"additionalProperties":false,"description":"Scheduling / booking-window / party capture on order creates.\n\nOmit the whole object (``null``) for plain product purchases — it only\napplies to service and travel listings. Which inner fields are required\nis variant-driven (``requires_scheduling``, ``requires_booking_window``,\nparty-size bounds, per-interval / per-person pricing) and enforced\nserver-side with the same typed errors as before.","properties":{"scheduled_for":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"Requested service time for scheduling-required items.","examples":["2026-09-01T15:00:00Z"],"title":"Scheduled For"},"booking_start":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"Booking window start (check-in) for booking-window items.","examples":["2026-09-01T15:00:00Z"],"title":"Booking Start"},"booking_end":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"Booking window end (check-out).","examples":["2026-09-01T16:00:00Z"],"title":"Booking End"},"party_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"How many people the booking covers.","title":"Party Size"}},"title":"PublicMppBookingRequest","type":"object"},"PublicMppBuyerRequest":{"additionalProperties":false,"description":"Buyer contact capture shared by public MPP purchase and quote calls.","properties":{"first_name":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"Buyer first name, used for fulfillment contact only.","title":"First Name"},"last_name":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"Buyer last name, used for fulfillment contact only.","title":"Last Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Buyer email, used for fulfillment. Never sent to merchant inventory as a tax or pricing input. A seller promotion may use a keyed hash of it, never the address itself, to recognise a returning buyer.","example":"user@example.com","examples":["buyer@example.com"],"title":"Email"},"phone_number":{"anyOf":[{"maxLength":32,"type":"string"},{"type":"null"}],"default":null,"description":"Buyer phone, used for fulfillment contact. A seller promotion may use a keyed hash of it, never the number itself, to recognise a returning buyer.","examples":["+15035550123"],"title":"Phone Number"},"dob":{"anyOf":[{"$ref":"#/components/schemas/BuyerDob"},{"type":"null"}],"default":null,"description":"Buyer date of birth in structured day/month/year form."}},"title":"PublicMppBuyerRequest","type":"object"},"PublicMppCustomizationChoiceRequest":{"additionalProperties":false,"description":"One requested customization choice and quantity.","properties":{"choice_id":{"description":"The published choice being selected.","examples":["om_agcc_oat"],"maxLength":64,"title":"Choice Id","type":"string"},"quantity":{"default":1,"description":"How many of the choice to apply. Zero explicitly declines a choice the group would otherwise default in.","maximum":1000,"minimum":0,"title":"Quantity","type":"integer"}},"required":["choice_id"],"title":"PublicMppCustomizationChoiceRequest","type":"object"},"PublicMppCustomizationGroupRequest":{"additionalProperties":false,"description":"Selections supplied for one dynamic customization group.","properties":{"group_id":{"description":"The published customization group these selections belong to.","examples":["om_agcg_milk"],"maxLength":64,"title":"Group Id","type":"string"},"choices":{"description":"Selections within the group; an empty list declines it entirely.","items":{"$ref":"#/components/schemas/PublicMppCustomizationChoiceRequest"},"maxItems":100,"title":"Choices","type":"array"}},"required":["group_id"],"title":"PublicMppCustomizationGroupRequest","type":"object"},"PublicMppFulfillmentRequest":{"additionalProperties":false,"description":"One implicitly selected destination and fulfillment type for the basket.","properties":{"type":{"$ref":"#/components/schemas/AgenticFulfillmentType","description":"Fulfillment mode for every item."},"destinations":{"description":"At most one destination, implicitly selected for the entire order.","items":{"anyOf":[{"$ref":"#/components/schemas/PublicMppLocationDestination"},{"$ref":"#/components/schemas/UcpShippingDestination"}]},"maxItems":1,"title":"Destinations","type":"array"}},"required":["type"],"title":"PublicMppFulfillmentRequest","type":"object"},"PublicMppLocationDestination":{"additionalProperties":false,"description":"Canonical merchant location selector; display details are optional hints.","properties":{"id":{"description":"Canonical merchant store identifier.","examples":["store_pdx_01"],"title":"Id","type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional display name; canonical merchant data remains authoritative.","title":"Name"},"address":{"anyOf":[{"$ref":"#/components/schemas/UcpPostalAddress"},{"type":"null"}],"default":null,"description":"Where the store is, for buyer orientation."}},"required":["id"],"title":"PublicMppLocationDestination","type":"object"},"PublicMppOrderItemRequest":{"additionalProperties":false,"description":"One requested line on a public order-create call.\n\n``source`` is the line-level discriminator for catalog prices and bound\nquote offers. Every line must support the order-wide fulfillment choice. ``catalog`` is enough for fixed-price\nquantity listings; anything with live availability must arrive as a\n``quote_offer``, because only an offer pins the exact slot and price the\nbuyer was shown.","properties":{"source":{"$ref":"#/components/schemas/OrderLineSource","default":"catalog","description":"Where this line's price and booking come from."},"catalog_item_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Catalog item to buy. `variant_id` or `sku` may identify the listing instead.","examples":["om_agci_4c1a"],"title":"Catalog Item Id"},"variant_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Exact finite variant; omission selects the item default.","examples":["om_agcv_9d10"],"title":"Variant Id"},"sku":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"Merchant SKU, as an alternative to the two id fields.","examples":["ESP-1-L"],"title":"Sku"},"quote_offer_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Required when source is quote_offer. Selects the exact immutable booking, ordered subtotal ledger, and final price returned by quoting.","title":"Quote Offer Id"},"location_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Canonical public business location selected for pickup, service, stay, or location-scoped inventory.","title":"Location Id"},"quantity":{"default":1,"description":"How many of the listing to order on this line.","maximum":1000,"minimum":1,"title":"Quantity","type":"integer"},"customizations":{"description":"Order-time choices for this line. Not accepted on a `quote_offer` line, which is already fully described by its offer.","items":{"$ref":"#/components/schemas/PublicMppCustomizationGroupRequest"},"maxItems":50,"title":"Customizations","type":"array"}},"title":"PublicMppOrderItemRequest","type":"object"},"UcpPostalAddress":{"additionalProperties":false,"description":"UCP postal address used for shipping and billing destinations.","properties":{"extended_address":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"default":null,"description":"Apartment, suite, floor, or other secondary address line.","examples":["Suite 400"],"title":"Extended Address"},"street_address":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"default":null,"description":"Street number and name.","examples":["811 NW Couch St"],"title":"Street Address"},"address_locality":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"City or town.","examples":["Portland"],"title":"Address Locality"},"address_region":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"State, province, or region.","examples":["OR"],"title":"Address Region"},"address_country":{"anyOf":[{"$ref":"#/components/schemas/CountryCode"},{"type":"null"}],"default":null,"description":"ISO-3166-1 alpha-2 country code."},"postal_code":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Postal or ZIP code.","examples":["97209"],"title":"Postal Code"},"first_name":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"Recipient given name at this address.","examples":["Riley"],"title":"First Name"},"last_name":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"Recipient family name at this address.","examples":["Chen"],"title":"Last Name"},"phone_number":{"anyOf":[{"maxLength":32,"type":"string"},{"type":"null"}],"default":null,"description":"Contact phone for this delivery.","examples":["+15035550123"],"title":"Phone Number"}},"title":"UcpPostalAddress","type":"object"},"UcpShippingDestination":{"additionalProperties":false,"description":"Addressable shipping destination selected during checkout.","properties":{"extended_address":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"default":null,"description":"Apartment, suite, floor, or other secondary address line.","examples":["Suite 400"],"title":"Extended Address"},"street_address":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"default":null,"description":"Street number and name.","examples":["811 NW Couch St"],"title":"Street Address"},"address_locality":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"City or town.","examples":["Portland"],"title":"Address Locality"},"address_region":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"State, province, or region.","examples":["OR"],"title":"Address Region"},"address_country":{"anyOf":[{"$ref":"#/components/schemas/CountryCode"},{"type":"null"}],"default":null,"description":"ISO-3166-1 alpha-2 country code."},"postal_code":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Postal or ZIP code.","examples":["97209"],"title":"Postal Code"},"first_name":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"Recipient given name at this address.","examples":["Riley"],"title":"First Name"},"last_name":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"Recipient family name at this address.","examples":["Chen"],"title":"Last Name"},"phone_number":{"anyOf":[{"maxLength":32,"type":"string"},{"type":"null"}],"default":null,"description":"Contact phone for this delivery.","examples":["+15035550123"],"title":"Phone Number"},"id":{"description":"Caller-assigned handle for this destination.","examples":["home"],"maxLength":64,"title":"Id","type":"string"}},"required":["id"],"title":"UcpShippingDestination","type":"object"},"PublicMppOrderCreateRequest":{"additionalProperties":false,"description":"Body for ``POST /mpp/{slug}/purchases`` (the 402 flow).\n\nMerchant-authoritative prices are selected at line level with\n``source=quote_offer`` and an immutable ``quote_offer_id``.","properties":{"items":{"description":"Fixed-price catalog lines and explicitly selected binding quote offers. Merchant-authoritative prices require a quote_offer_id.","items":{"$ref":"#/components/schemas/PublicMppOrderItemRequest"},"maxItems":100,"minItems":1,"title":"Items","type":"array"},"market":{"anyOf":[{"maxLength":32,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Explicit merchant market to use for catalog pricing.","title":"Market"},"currency":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}],"default":null,"description":"Buyer presentment currency. Omission uses the merchant native currency; a different value creates a binding Stripe FX Quote."},"buyer":{"anyOf":[{"$ref":"#/components/schemas/PublicMppBuyerRequest"},{"type":"null"}],"default":null,"description":"Buyer contact used for fulfillment only; never forwarded to inventory as a tax or pricing input."},"fulfillment":{"anyOf":[{"$ref":"#/components/schemas/PublicMppFulfillmentRequest"},{"type":"null"}],"default":null,"description":"One fulfillment type and destination for every item; omitted only when unambiguous."},"booking":{"anyOf":[{"$ref":"#/components/schemas/PublicMppBookingRequest"},{"type":"null"}],"default":null,"description":"Scheduling / booking-window / party capture for service and travel listings; omit for product purchases."}},"required":["items"],"title":"PublicMppOrderCreateRequest","type":"object"},"MppCustomerIdentityErrorCode":{"description":"Machine-readable MPP purchase failures resolved through customer OAuth.","enum":["identity_required","invalid_token"],"title":"MppCustomerIdentityErrorCode","type":"string"},"PublicMppCustomerIdentityErrorDetail":{"additionalProperties":false,"description":"Machine-actionable detail carried by an MPP customer Bearer challenge.","properties":{"error_code":{"$ref":"#/components/schemas/MppCustomerIdentityErrorCode","default":"identity_required","description":"Why purchase creation stopped before the payment challenge."},"message":{"default":"Open authorization_endpoint in a browser with your registered OAuth client using Authorization Code with PKCE. Exchange the callback code at token_endpoint, then retry this request with Authorization: Bearer <access_token>.","description":"Buyer-facing OAuth and request-retry guidance. Structured endpoint fields remain authoritative.","title":"Message","type":"string"},"authorization_server":{"description":"OAuth issuer the buyer must use to authorize checkout.","examples":["https://api.openmerchant.dev/ucp/coffee-cart/test"],"title":"Authorization Server","type":"string"},"authorization_endpoint":{"description":"Browser URL where the buyer starts Authorization Code with PKCE.","examples":["https://api.openmerchant.dev/ucp/coffee-cart/test/oauth2/authorize"],"title":"Authorization Endpoint","type":"string"},"token_endpoint":{"description":"OAuth endpoint where the registered buyer client exchanges the authorization code or rotates a refresh token.","examples":["https://api.openmerchant.dev/ucp/coffee-cart/test/oauth2/token"],"title":"Token Endpoint","type":"string"},"resource_metadata":{"description":"RFC 9728 protected-resource metadata URL used to discover the authorization server and required scopes.","examples":["https://api.openmerchant.dev/.well-known/oauth-protected-resource/ucp/coffee-cart/test"],"title":"Resource Metadata","type":"string"}},"required":["authorization_server","authorization_endpoint","token_endpoint","resource_metadata"],"title":"PublicMppCustomerIdentityErrorDetail","type":"object"},"PublicMppCustomerIdentityErrorResponse":{"additionalProperties":false,"description":"JSON envelope accompanying a ``401`` MPP customer identity challenge.","properties":{"detail":{"$ref":"#/components/schemas/PublicMppCustomerIdentityErrorDetail","description":"OAuth discovery coordinates needed to sign the buyer in before retrying the purchase."}},"required":["detail"],"title":"PublicMppCustomerIdentityErrorResponse","type":"object"},"MppPaymentErrorCode":{"description":"Machine-readable MPP purchase failures resolved through payment.","enum":["payment_required"],"title":"MppPaymentErrorCode","type":"string"},"PriceSubtotal":{"additionalProperties":false,"description":"One ordered, signed contribution to a final payable amount.","properties":{"type":{"$ref":"#/components/schemas/SubtotalType","description":"Contribution category. Exactly one subtotal and one final total are required; tax and fee categories may repeat."},"description":{"description":"Buyer-facing label preserved verbatim and in order. Included tax or fees are disclosed here instead of emitted as a second amount.","maxLength":500,"minLength":1,"title":"Description","type":"string"},"amount":{"description":"Signed integer in the currency minor unit. Discounts are zero or negative; all other categories are non-negative. The total entry equals the sum of every non-total entry.","title":"Amount","type":"integer"}},"required":["type","description","amount"],"title":"PriceSubtotal","type":"object"},"PublicMppChallengeRead":{"description":"One advertised challenge inside the 402 JSON body.\n\n``request`` is the same base64url payload bound into the\n``WWW-Authenticate`` header, duplicated in the body for agents that\nprefer JSON over header parsing.","properties":{"method":{"$ref":"#/components/schemas/MppPaymentMethod","description":"Rail this challenge settles over."},"intent":{"$ref":"#/components/schemas/MppPaymentIntent","default":"charge","description":"What redeeming the challenge does."},"id":{"description":"Challenge identifier. Quote it back in the `Authorization: Payment` credential to say which challenge is being redeemed.","title":"Id","type":"string"},"request":{"description":"Base64url challenge payload, identical to the one in the `WWW-Authenticate` header. Duplicated here for clients that prefer JSON over header parsing.","title":"Request","type":"string"}},"required":["method","id","request"],"title":"PublicMppChallengeRead","type":"object"},"StripeFxRead":{"additionalProperties":false,"description":"Audit metadata for one Stripe FX Quote-backed presentment price.","properties":{"provider_quote_id":{"description":"Exact Stripe FX Quote identifier persisted for payment.","title":"Provider Quote Id","type":"string"},"exchange_rate":{"anyOf":[{"exclusiveMinimum":0.0,"type":"number"},{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"}],"description":"Fee-inclusive rate from presentment to settlement currency.","title":"Exchange Rate"},"rate_timestamp":{"description":"Timestamp at which Stripe supplied the exchange rate.","format":"date-time","title":"Rate Timestamp","type":"string"},"expires_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"Deadline for using the exact Stripe FX Quote, when binding.","title":"Expires At"},"settlement_currency":{"$ref":"#/components/schemas/CurrencyCode","description":"Seller currency received after Stripe conversion."},"refund_conversion_disclosure":{"default":"Refunds are issued in the original presentment currency; Stripe uses its refund-time conversion rate for settlement.","description":"Buyer-facing disclosure for cross-currency refunds.","title":"Refund Conversion Disclosure","type":"string"}},"required":["provider_quote_id","exchange_rate","rate_timestamp","settlement_currency"],"title":"StripeFxRead","type":"object"},"SubtotalType":{"description":"Closed ordered-total vocabulary shared by MPP and UCP.\n\n``subtotal`` is the pre-adjustment base; discount categories are signed\nnegative contributions; fulfillment, tax, fee, and tip are non-negative\ncontributions; and the single final ``total`` repeats their sum.","enum":["subtotal","items_discount","discount","fulfillment","tax","fee","tip","total"],"title":"SubtotalType","type":"string"},"TaxTreatment":{"description":"How tax is represented in a quote or aggregate price snapshot.\n\n``itemized`` has one or more numeric tax lines, ``included`` discloses tax\ntextually inside the subtotal without adding it again, and\n``not_applicable`` has no tax. ``mixed`` and ``unspecified`` are reserved\nfor aggregate or backfilled internal history.","enum":["itemized","included","not_applicable","mixed","unspecified"],"title":"TaxTreatment","type":"string"},"PublicMppPaymentRequiredResponse":{"description":"JSON body accompanying the ``402 Payment Required`` response.","properties":{"error":{"$ref":"#/components/schemas/MppPaymentErrorCode","default":"payment_required","description":"Machine-readable error code; always `payment_required` here."},"order_id":{"description":"The order held open by this challenge. Retry the purchase against it with a payment credential attached.","examples":["om_agmo_2f7c"],"title":"Order Id","type":"string"},"market":{"description":"Merchant market whose price is locked by this challenge.","maxLength":32,"minLength":1,"title":"Market","type":"string"},"amount_cents":{"description":"Locked final amount that the payment challenge authorizes.","title":"Amount Cents","type":"integer"},"currency":{"$ref":"#/components/schemas/CurrencyCode","description":"ISO-4217 currency shared by the challenge and subtotal ledger."},"fx":{"anyOf":[{"$ref":"#/components/schemas/StripeFxRead"},{"type":"null"}],"default":null,"description":"Stripe FX Quote backing this payment challenge."},"tax_treatment":{"$ref":"#/components/schemas/TaxTreatment","description":"How tax is represented in the locked subtotal ledger."},"subtotals":{"description":"Authoritative ordered price breakdown for the challenged amount. The final total entry equals amount_cents.","items":{"$ref":"#/components/schemas/PriceSubtotal"},"title":"Subtotals","type":"array"},"expires_at":{"description":"After this instant the challenge can no longer be redeemed.","examples":["2026-09-01T15:15:00Z"],"format":"date-time","title":"Expires At","type":"string"},"challenges":{"description":"Payment challenges the buyer may redeem to settle the order.","items":{"$ref":"#/components/schemas/PublicMppChallengeRead"},"title":"Challenges","type":"array"},"failure_code":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Provider failure code when a prior charge attempt was declined.","title":"Failure Code"},"failure_message":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Provider failure message when a prior charge attempt was declined.","title":"Failure Message"}},"required":["order_id","market","amount_cents","currency","tax_treatment","subtotals","expires_at","challenges"],"title":"PublicMppPaymentRequiredResponse","type":"object"},"AgenticMerchantOrderStatus":{"description":"State machine for a hosted merchant order (see ``order_service``).\n\n``PAYMENT_REQUIRED`` → ``PENDING_CONFIRMATION`` →\n``MERCHANT_CONFIRMED`` → ``FULFILLMENT_PENDING`` → ``FULFILLED``.\nOpenMerchant-managed inventory skips ``PENDING_CONFIRMATION``. ``FAILED``,\n``CANCELED`` and ``REFUNDED`` are terminal. ``REFUND_PENDING`` means a\npreviously captured order is in an active or retryable refund workflow;\nthe payment refund status carries the provider-level pending, action, or\nfailure detail.","enum":["payment_required","pending_confirmation","merchant_confirmed","fulfillment_pending","fulfilled","refund_pending","canceled","failed","refunded"],"title":"AgenticMerchantOrderStatus","type":"string"},"AgenticTaxCalculationProvider":{"description":"Source of the authoritative tax included in an order total.\n\nMerchant-inventory tax is accepted from a binding offer and is never\nrecalculated by hosted checkout. ``mixed`` means provider-priced and\nplatform-priced lines were aggregated into the same order.","enum":["none","stripe_tax","local_state_rate","merchant_inventory","mixed"],"title":"AgenticTaxCalculationProvider","type":"string"},"AppliedPromotionLineRead":{"description":"What one applied promotion took off one line.","properties":{"line_key":{"description":"Position key of the line within its basket, such as line_0.","title":"Line Key","type":"string"},"discount_amount":{"description":"Discount on this line, in minor units of the charged currency.","title":"Discount Amount","type":"integer"}},"required":["line_key","discount_amount"],"title":"AppliedPromotionLineRead","type":"object"},"AppliedPromotionRead":{"description":"One seller promotion as applied to a quote offer, checkout, or order.\n\nThe buyer-facing view of a claim. It deliberately says nothing about the\ncampaign — not its id, caps, remaining redemptions, or other arms. The\nbuyer is told what they were offered and until when. The campaign id\nstays on merchant-facing API responses and webhooks.","properties":{"claim_id":{"description":"This buyer's claim for the offer (`om_agpc_…`). Unique to this basket, written with `expires_at`, and never reused. A quote, checkout, and order for the same issuance share this id.","title":"Claim Id","type":"string"},"title":{"description":"Name the seller gave the promotion.","title":"Title","type":"string"},"currency":{"$ref":"#/components/schemas/CurrencyCode","description":"Currency discount_amount is in."},"discount_amount":{"description":"Total discount from this promotion, in minor units.","title":"Discount Amount","type":"integer"},"expires_at":{"description":"Instant the promotional price stops being valid. It was fixed when the offer was made and is never extended, by a refresh or otherwise.","format":"date-time","title":"Expires At","type":"string"},"reserved":{"description":"Whether the promotion is reserved for this buyer. False for an anonymous quote: the price is honored only while the campaign still has capacity when the order is created.","title":"Reserved","type":"boolean"},"redeemed":{"description":"Whether a payment has redeemed this promotion.","title":"Redeemed","type":"boolean"},"terms":{"description":"One plain sentence an agent can relay to the person it is buying for: what is offered and until when.","title":"Terms","type":"string"},"lines":{"description":"The discount per line it applied to.","items":{"$ref":"#/components/schemas/AppliedPromotionLineRead"},"title":"Lines","type":"array"}},"required":["claim_id","title","currency","discount_amount","expires_at","reserved","redeemed","terms","lines"],"title":"AppliedPromotionRead","type":"object"},"AppointmentBookingSnapshot":{"additionalProperties":false,"description":"A resolved appointment: exact start, end, duration, and assignment.","properties":{"type":{"const":"appointment","default":"appointment","description":"Discriminator selecting the resolved appointment shape.","title":"Type","type":"string"},"starts_at":{"description":"Exact instant the appointment begins.","examples":["2026-09-01T15:00:00Z"],"format":"date-time","title":"Starts At","type":"string"},"ends_at":{"description":"Exact instant it ends. Always `starts_at + duration_minutes`; never an input, so the two can never disagree.","examples":["2026-09-01T16:00:00Z"],"format":"date-time","title":"Ends At","type":"string"},"duration_minutes":{"description":"Resolved length of the appointment.","maximum":10080,"minimum":1,"title":"Duration Minutes","type":"integer"},"party_size":{"default":1,"description":"People the appointment was booked for.","maximum":1000,"minimum":1,"title":"Party Size","type":"integer"},"resource_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Resource the appointment was assigned to, if any.","examples":["res_anna"],"title":"Resource Id"},"resource_name":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"default":null,"description":"Buyer-facing name of that resource at booking time.","examples":["Anna"],"title":"Resource Name"},"timezone":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"IANA timezone the appointment was scheduled in.","examples":["America/Los_Angeles"],"title":"Timezone"}},"required":["starts_at","ends_at","duration_minutes"],"title":"AppointmentBookingSnapshot","type":"object"},"BookingStatus":{"description":"Mutable post-order lifecycle of one confirmed booking.\n\nDistinct from the order-line booking snapshot, which is immutable:\nthis row is what changes when the provider confirms, the service is\ndelivered, or the buyer no-shows.","enum":["pending","confirmed","completed","cancelled","failed","no_show"],"title":"BookingStatus","type":"string"},"BusinessLocationVersionRead":{"additionalProperties":false,"description":"Immutable location version retained by an order line.","properties":{"id":{"description":"Immutable location-version identifier.","title":"Id","type":"string"},"location_id":{"description":"Stable canonical location identifier.","title":"Location Id","type":"string"},"version_number":{"description":"Monotonic version number within the stable location.","minimum":1,"title":"Version Number","type":"integer"},"name":{"description":"Location name captured by this version.","title":"Name","type":"string"},"address":{"$ref":"#/components/schemas/PostalAddressPayload","description":"Postal address captured by this version."},"timezone":{"$ref":"#/components/schemas/TimeZone","description":"IANA timezone captured by this version."},"created_at":{"description":"Instant this immutable version was created.","format":"date-time","title":"Created At","type":"string"}},"required":["id","location_id","version_number","name","address","timezone","created_at"],"title":"BusinessLocationVersionRead","type":"object"},"FulfillmentChargeBasis":{"description":"How many times a rate card's amount is applied to one checkout.\n\n``PER_GROUP`` (the shipping default) charges once per fulfillment group —\nthe \"bundle\" a merchant ships together. ``PER_ORDER`` charges once for the\nwhole checkout however many groups the card matched. ``PER_LINE`` charges\nonce per line item and ``PER_UNIT`` multiplies by the line quantity (or, for\nbookings, the party size).","enum":["per_group","per_order","per_line","per_unit"],"title":"FulfillmentChargeBasis","type":"string"},"FulfillmentChargeRead":{"additionalProperties":false,"description":"One immutable fulfillment charge captured on an order or quote offer.\n\nBuyer-facing: this is what makes \"why was I charged $12.50 to receive this?\"\nanswerable months later, after the merchant has repriced, paused, or\ndeleted the service that produced it. Every field is a snapshot taken when\nthe charge was made, never a live read.","properties":{"id":{"description":"Stable id of this charge.","examples":["om_agoc_4c1a"],"title":"Id","type":"string"},"rate_card_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Fulfillment service that produced the charge. Null once the merchant deletes it — losing the service never loses the buyer's receipt line.","examples":["om_agrc_9f21"],"title":"Rate Card Id"},"group_key":{"description":"Bundle within the order this charge applies to. A basket that ships in two parcels, or visits two labs, carries one charge per bundle.","examples":["ship:oversize::"],"title":"Group Key","type":"string"},"fulfillment_type":{"$ref":"#/components/schemas/AgenticFulfillmentType","description":"How the bundle reaches the buyer, as charged."},"title":{"description":"Buyer-facing service name exactly as disclosed at purchase.","examples":["FedEx Ground"],"title":"Title","type":"string"},"provider":{"$ref":"#/components/schemas/FulfillmentProvider","description":"Who performs the fulfillment this charge paid for."},"service_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The provider's own service tier, when it names one.","examples":["Ground"],"title":"Service Name"},"charge_basis":{"$ref":"#/components/schemas/FulfillmentChargeBasis","description":"What the amount was applied once per — bundle, order, line, or unit."},"total_type":{"$ref":"#/components/schemas/FulfillmentChargeTotalType","description":"Which buyer-facing total carries this amount: `fulfillment` for shipping and delivery, `fee` for a service or booking fee."},"currency":{"$ref":"#/components/schemas/CurrencyCode","description":"ISO-4217 currency the buyer was charged in."},"amount":{"description":"Charge in minor units of the buyer-presentment currency.","examples":[695],"title":"Amount","type":"integer"},"native_amount":{"description":"Same charge in minor units of the merchant's settlement currency.","examples":[695],"title":"Native Amount","type":"integer"},"input_weight_grams":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Bundle weight the rate was resolved from; null when unmeasured.","title":"Input Weight Grams"},"input_order_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Qualifying order value the rate was resolved from, in minor units.","title":"Input Order Amount"},"input_distance_meters":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Origin-to-destination distance the rate was resolved from.","title":"Input Distance Meters"},"input_item_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Number of units in the bundle the rate was resolved from.","title":"Input Item Count"},"tier_display_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Position of the tier row that matched, for a tiered service; null when the service is flat, free, or carrier-quoted.","title":"Tier Display Order"},"earliest_promised_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"Earliest promised arrival or collection time; null when unpromised.","examples":["2026-09-08T00:00:00Z"],"title":"Earliest Promised At"},"latest_promised_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"Latest promised arrival or collection time; null when unpromised.","examples":["2026-09-11T00:00:00Z"],"title":"Latest Promised At"},"cutoff_applied":{"default":false,"description":"Whether the service's daily cutoff rolled the promise to a later day.","title":"Cutoff Applied","type":"boolean"}},"required":["id","group_key","fulfillment_type","title","provider","charge_basis","total_type","currency","amount","native_amount"],"title":"FulfillmentChargeRead","type":"object"},"FulfillmentChargeTotalType":{"description":"Which buyer-facing total a rate card's charge is disclosed under.\n\n``FULFILLMENT`` is a shipping or delivery charge; ``FEE`` is a service,\nbooking, or handling fee. Both values already exist in the MPP/UCP totals\nvocabulary, so a card's charge maps onto a protocol subtotal without a\nspecial case.","enum":["fulfillment","fee"],"title":"FulfillmentChargeTotalType","type":"string"},"FulfillmentProvider":{"description":"Who physically performs the fulfillment a rate card sells.\n\nThe value is buyer-facing provenance rather than an integration selector:\n``OWN_FLEET`` and ``LOCAL_COURIER`` are both merchant-operated delivery,\nbut a buyer reading \"Own fleet\" learns something different from \"Local\ncourier\". ``OTHER_CARRIER`` is the escape hatch for a parcel carrier this\nenum does not name yet; ``PARTNER_SITE`` covers a booking performed at a\nthird party's premises.","enum":["fedex","ups","usps","dhl_express","royal_mail","canada_post","australia_post","other_carrier","own_fleet","doordash_drive","uber_direct","local_courier","own_location","locker","in_person","partner_site"],"title":"FulfillmentProvider","type":"string"},"GuestCounts":{"additionalProperties":false,"description":"Occupancy for a stay booking.","properties":{"adults":{"default":1,"description":"Adult occupants across the booked rooms.","maximum":100,"minimum":1,"title":"Adults","type":"integer"},"children":{"default":0,"description":"Child occupants, counted separately for occupancy rules.","maximum":100,"minimum":0,"title":"Children","type":"integer"}},"title":"GuestCounts","type":"object"},"PublicMppBookingRead":{"description":"Booking capture echoed on order reads.\n\nThe parent field is ``null`` for orders that captured nothing —\nproduct purchases — so agents can branch on its presence.","properties":{"scheduled_for":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"Captured service time; null when nothing was scheduled.","examples":["2026-09-01T15:00:00Z"],"title":"Scheduled For"},"booking_start":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"Captured booking-window start.","examples":["2026-09-01T15:00:00Z"],"title":"Booking Start"},"booking_end":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"Captured booking-window end.","examples":["2026-09-01T16:00:00Z"],"title":"Booking End"},"party_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Captured party size.","title":"Party Size"}},"title":"PublicMppBookingRead","type":"object"},"PublicMppCustomizationSelectionRead":{"description":"One customization selection snapshotted on an order or quote.","properties":{"group_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Group the selection came from, when it is still published.","examples":["om_agcg_milk"],"title":"Group Id"},"choice_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Choice that was selected, when it is still published.","examples":["om_agcc_oat"],"title":"Choice Id"},"group_name":{"description":"Group name snapshotted at purchase, so later edits cannot rewrite it.","examples":["Milk"],"title":"Group Name","type":"string"},"choice_label":{"description":"Choice label snapshotted at purchase.","examples":["Oat milk"],"title":"Choice Label","type":"string"},"quantity":{"description":"How many of the choice were applied.","title":"Quantity","type":"integer"},"price_delta_cents":{"description":"Per-unit price effect of the choice, in minor units.","title":"Price Delta Cents","type":"integer"},"pricing_basis":{"$ref":"#/components/schemas/AgenticCustomizationPricingBasis","description":"Whether the delta applied per line or per selected unit."},"amount_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Total contribution of this selection to the line, in minor units.","title":"Amount Cents"}},"required":["group_name","choice_label","quantity","price_delta_cents","pricing_basis"],"title":"PublicMppCustomizationSelectionRead","type":"object"},"PublicMppLineBookingRead":{"description":"Live booking lifecycle for one purchased line.\n\nDistinct from ``booking_snapshot``, which is the frozen record of what was\nbought: this is what changes as the provider confirms, the service is\ndelivered, or the buyer no-shows.","properties":{"status":{"$ref":"#/components/schemas/BookingStatus","description":"Where the booking stands right now."},"confirmation_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Merchant-facing reference once the provider confirmed.","title":"Confirmation Reference"},"starts_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"Start instant, for appointment and class bookings.","examples":["2026-09-01T15:00:00Z"],"title":"Starts At"},"ends_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"End instant, for appointment and class bookings.","examples":["2026-09-01T16:00:00Z"],"title":"Ends At"},"check_in":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null,"description":"First night, for stay bookings.","examples":["2026-09-01"],"title":"Check In"},"check_out":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null,"description":"Departure day, for stay bookings.","examples":["2026-09-04"],"title":"Check Out"},"party_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"People the booking covers.","title":"Party Size"},"confirmed_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"When the provider confirmed the booking.","title":"Confirmed At"},"completed_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"When the service was delivered.","title":"Completed At"},"cancelled_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"When the booking was cancelled.","title":"Cancelled At"}},"required":["status"],"title":"PublicMppLineBookingRead","type":"object"},"PublicMppOrderLineRead":{"description":"One line echoed on the public order read.","properties":{"sku":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"SKU of the purchased variant, snapshotted at purchase.","examples":["ESP-1-L"],"title":"Sku"},"name":{"description":"Buyer-facing listing name, snapshotted at purchase.","examples":["Espresso — Large"],"title":"Name","type":"string"},"catalog_item_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Catalog item the line bought, when it is still published.","examples":["om_agci_4c1a"],"title":"Catalog Item Id"},"variant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Exact variant the line bought.","examples":["om_agcv_9d10"],"title":"Variant Id"},"location_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Canonical business location selected for this line.","title":"Location Id"},"location_version_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Immutable selected-location version retained by this line.","title":"Location Version Id"},"location":{"anyOf":[{"$ref":"#/components/schemas/BusinessLocationVersionRead"},{"type":"null"}],"default":null,"description":"Immutable selected-location version retained by this line."},"variant_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Variant name snapshotted at purchase.","examples":["Large"],"title":"Variant Name"},"quantity":{"description":"How many of the listing were ordered.","minimum":1,"title":"Quantity","type":"integer"},"pricing_model":{"$ref":"#/components/schemas/AgenticPricingModel","default":"per_unit","description":"How the line total derives from the rate."},"unit_count":{"default":1,"description":"Billable units under `pricing_model` — nights for a stay, people for a per-person listing.","title":"Unit Count","type":"integer"},"unit_amount_cents":{"description":"Rate per billable unit, in minor units.","minimum":0,"title":"Unit Amount Cents","type":"integer"},"line_amount_cents":{"description":"Final line amount, equal to the total entry in subtotals.","minimum":0,"title":"Line Amount Cents","type":"integer"},"tax_treatment":{"$ref":"#/components/schemas/TaxTreatment","default":"unspecified","description":"How tax is represented in this immutable line breakdown."},"subtotals":{"description":"Ordered line-level ledger copied from the selected offer or generated during catalog pricing.","items":{"$ref":"#/components/schemas/PriceSubtotal"},"title":"Subtotals","type":"array"},"item_discount_amount_cents":{"default":0,"description":"Discount applied to this line, in minor units.","title":"Item Discount Amount Cents","type":"integer"},"customization_amount_cents":{"default":0,"description":"Total contribution of customization selections, in minor units.","title":"Customization Amount Cents","type":"integer"},"variant_options":{"description":"Option axis / value pairs identifying the purchased variant.","items":{"$ref":"#/components/schemas/PublicMppVariantOptionRead"},"title":"Variant Options","type":"array"},"customizations":{"description":"Customization selections snapshotted onto the line.","items":{"$ref":"#/components/schemas/PublicMppCustomizationSelectionRead"},"title":"Customizations","type":"array"},"booking_snapshot":{"description":"Immutable record of exactly what was purchased on this line. Never rewritten by later catalog, provider, or booking changes.","discriminator":{"mapping":{"appointment":"#/components/schemas/AppointmentBookingSnapshot","quantity":"#/components/schemas/QuantityBookingSnapshot","scheduled_class":"#/components/schemas/ScheduledClassBookingSnapshot","stay":"#/components/schemas/StayBookingSnapshot"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/QuantityBookingSnapshot"},{"$ref":"#/components/schemas/AppointmentBookingSnapshot"},{"$ref":"#/components/schemas/ScheduledClassBookingSnapshot"},{"$ref":"#/components/schemas/StayBookingSnapshot"}],"title":"Booking Snapshot"},"quote_offer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The priced offer this line consumed, when it had one.","title":"Quote Offer Id"},"booking":{"anyOf":[{"$ref":"#/components/schemas/PublicMppLineBookingRead"},{"type":"null"}],"default":null,"description":"Mutable booking state; null for quantity lines."}},"required":["name","quantity","unit_amount_cents","line_amount_cents"],"title":"PublicMppOrderLineRead","type":"object"},"QuantityBookingSnapshot":{"additionalProperties":false,"description":"Resolved ordinary-units line.","properties":{"type":{"const":"quantity","default":"quantity","description":"Discriminator marking a resolved ordinary-units line.","title":"Type","type":"string"}},"title":"QuantityBookingSnapshot","type":"object"},"ScheduledClassBookingSnapshot":{"additionalProperties":false,"description":"A resolved class reservation carrying the occurrence's own times.","properties":{"type":{"const":"scheduled_class","default":"scheduled_class","description":"Discriminator selecting the resolved class-reservation shape.","title":"Type","type":"string"},"occurrence_id":{"description":"The reserved session.","examples":["om_agco_7f21"],"maxLength":64,"minLength":1,"title":"Occurrence Id","type":"string"},"starts_at":{"description":"When the session begins. Owned by the occurrence, not the buyer.","examples":["2026-09-01T18:00:00Z"],"format":"date-time","title":"Starts At","type":"string"},"ends_at":{"description":"When the session ends.","examples":["2026-09-01T19:00:00Z"],"format":"date-time","title":"Ends At","type":"string"},"party_size":{"default":1,"description":"Seats reserved on the occurrence.","maximum":1000,"minimum":1,"title":"Party Size","type":"integer"},"timezone":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"IANA timezone the session is scheduled in.","examples":["America/Los_Angeles"],"title":"Timezone"}},"required":["occurrence_id","starts_at","ends_at"],"title":"ScheduledClassBookingSnapshot","type":"object"},"StayBookingSnapshot":{"additionalProperties":false,"description":"A resolved stay: exact dates, rooms, occupancy, and plan.","properties":{"type":{"const":"stay","default":"stay","description":"Discriminator selecting the resolved stay shape.","title":"Type","type":"string"},"check_in":{"description":"First night of the reserved stay.","examples":["2026-09-01"],"format":"date","title":"Check In","type":"string"},"check_out":{"description":"Departure day of the reserved stay.","examples":["2026-09-04"],"format":"date","title":"Check Out","type":"string"},"nights":{"description":"Nights between check-in and check-out; derived, never an input.","maximum":365,"minimum":1,"title":"Nights","type":"integer"},"rooms":{"default":1,"description":"Rooms reserved for every night of the range.","maximum":100,"minimum":1,"title":"Rooms","type":"integer"},"guests":{"$ref":"#/components/schemas/GuestCounts","description":"Occupancy the rate was priced for."},"rate_plan_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Rate plan the stay resolved to.","examples":["rp_flex"],"title":"Rate Plan Id"},"timezone":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"IANA timezone the property calendar is kept in.","examples":["America/Los_Angeles"],"title":"Timezone"}},"required":["check_in","check_out","nights"],"title":"StayBookingSnapshot","type":"object"},"PublicMppOrderRead":{"description":"Public read shape returned after a paid retry (and on order GET).","properties":{"id":{"description":"Order identifier, stable for the life of the order.","examples":["om_agmo_2f7c"],"title":"Id","type":"string"},"merchant_slug":{"description":"Storefront the order was placed against.","examples":["coffee-cart"],"title":"Merchant Slug","type":"string"},"market":{"description":"Merchant market stamped when this order was priced.","maxLength":32,"minLength":1,"title":"Market","type":"string"},"status":{"$ref":"#/components/schemas/AgenticMerchantOrderStatus","description":"Where the order stands in its lifecycle."},"currency":{"$ref":"#/components/schemas/CurrencyCode","description":"ISO-4217 currency every amount on the order is in."},"subtotal_amount_cents":{"description":"Sum of line amounts before discounts, fulfillment, tax, and fees.","minimum":0,"title":"Subtotal Amount Cents","type":"integer"},"items_discount_amount_cents":{"default":0,"description":"Discounts applied at line level, in minor units.","title":"Items Discount Amount Cents","type":"integer"},"discount_amount_cents":{"default":0,"description":"Order-level discounts, in minor units.","title":"Discount Amount Cents","type":"integer"},"fulfillment_amount_cents":{"default":0,"description":"Shipping or delivery charge, in minor units.","title":"Fulfillment Amount Cents","type":"integer"},"tax_amount_cents":{"default":0,"description":"Tax charged on the order, in minor units.","title":"Tax Amount Cents","type":"integer"},"fee_amount_cents":{"default":0,"description":"Service or platform fees, in minor units.","title":"Fee Amount Cents","type":"integer"},"tip_amount_cents":{"default":0,"description":"Gratuity, in minor units.","title":"Tip Amount Cents","type":"integer"},"tax_treatment":{"$ref":"#/components/schemas/TaxTreatment","default":"unspecified","description":"Aggregate representation of tax across the immutable order lines."},"subtotals":{"description":"Canonical ordered final-price ledger. Merchant descriptions and repeated tax or fee contributions are preserved.","items":{"$ref":"#/components/schemas/PriceSubtotal"},"title":"Subtotals","type":"array"},"tax_calculation_provider":{"$ref":"#/components/schemas/AgenticTaxCalculationProvider","default":"none","description":"Which engine computed the tax figures, if any."},"stripe_tax_calculation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Stripe Tax calculation backing the tax figures, when used.","examples":["taxcalc_1QabcXYZ"],"title":"Stripe Tax Calculation Id"},"total_amount_cents":{"description":"Final amount authorized for this order, equal to the total entry in subtotals.","minimum":0,"title":"Total Amount Cents","type":"integer"},"fx":{"anyOf":[{"$ref":"#/components/schemas/StripeFxRead"},{"type":"null"}],"default":null,"description":"Stripe FX Quote used to localize and charge the order."},"lines":{"description":"Immutable order lines, each with its own price ledger.","items":{"$ref":"#/components/schemas/PublicMppOrderLineRead"},"minItems":1,"title":"Lines","type":"array"},"fulfillment_charges":{"description":"Immutable per-group fulfillment and fee charges applied to this order, each naming the service that produced it and the inputs it was priced from. Their amounts are already included in `fulfillment_amount_cents` and `fee_amount_cents`.","items":{"$ref":"#/components/schemas/FulfillmentChargeRead"},"title":"Fulfillment Charges","type":"array"},"booking":{"anyOf":[{"$ref":"#/components/schemas/PublicMppBookingRead"},{"type":"null"}],"default":null,"description":"Booking capture; null for product orders."},"quote_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The priced quote this order was created from, if any.","examples":["om_agq_9d10"],"title":"Quote Id"},"confirmation_required":{"description":"The merchant must confirm before funds capture — merchant-managed inventory or bookable lines. Payment stays authorized until then.","title":"Confirmation Required","type":"boolean"},"paid_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"When the buyer’s payment was accepted. For a deferred-capture order this is the AUTHORIZATION time, not settlement; read `payment_status` for whether funds actually captured.","examples":["2026-09-01T15:00:00Z"],"title":"Paid At"},"payment_status":{"default":"none","description":"Where the payment stands. A booking order reads authorized until every booking confirms and the capture lands; captured means funds settled; released means the authorization was cancelled without settling.","enum":["none","authorized","captured","released"],"title":"Payment Status","type":"string"},"reserved_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"When the merchant acknowledged stock/booking held via an inbound order.reserved; extends the confirmation-timeout clock. Null until the merchant reserves.","title":"Reserved At"},"reservation_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Merchant-side reservation reference recorded by order.reserved.","title":"Reservation Reference"},"receipt":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Legacy provider receipt reference retained for compatibility. The canonical MPP receipt is returned in Payment-Receipt.","title":"Receipt"},"created_at":{"description":"When the order was created.","examples":["2026-09-01T15:00:00Z"],"format":"date-time","title":"Created At","type":"string"},"applied_promotions":{"description":"Seller promotions this order was priced with. Their discounts are already included in `items_discount_amount_cents` and in each line's ledger; this names them and gives the fixed deadline the promotional price is valid until.","items":{"$ref":"#/components/schemas/AppliedPromotionRead"},"title":"Applied Promotions","type":"array"}},"required":["id","merchant_slug","market","status","currency","subtotal_amount_cents","total_amount_cents","lines","confirmation_required","created_at"],"title":"PublicMppOrderRead","type":"object"},"AppointmentBookingRequest":{"additionalProperties":false,"description":"A requested appointment start, duration, and optional resource pin.\n\n``ends_at`` is never an input — the server derives it from\n``duration_minutes`` so the two can never disagree.","properties":{"type":{"const":"appointment","default":"appointment","description":"Discriminator selecting the appointment request shape.","title":"Type","type":"string"},"starts_at":{"description":"Requested start; MUST carry a UTC offset.","examples":["2026-09-01T15:00:00Z"],"format":"date-time","title":"Starts At","type":"string"},"duration_minutes":{"anyOf":[{"maximum":10080,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Omit for fixed-duration services; the config supplies it.","title":"Duration Minutes"},"party_size":{"default":1,"description":"How many people the appointment is for.","maximum":1000,"minimum":1,"title":"Party Size","type":"integer"},"resource_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Optional buyer preference; otherwise assigned server-side.","title":"Resource Id"}},"required":["starts_at"],"title":"AppointmentBookingRequest","type":"object"},"PublicMppQuoteFulfillmentRequest":{"additionalProperties":false,"description":"Order-wide quote fulfillment with optional published service constraints.","properties":{"type":{"$ref":"#/components/schemas/AgenticFulfillmentType","description":"Fulfillment mode for every item."},"destinations":{"description":"At most one destination, implicitly selected for the entire order.","items":{"anyOf":[{"$ref":"#/components/schemas/PublicMppLocationDestination"},{"$ref":"#/components/schemas/UcpShippingDestination"}]},"maxItems":1,"title":"Destinations","type":"array"},"option_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Published catalog fulfillment option to quote.","title":"Option Id"},"rate_card_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Published fulfillment service to quote.","title":"Rate Card Id"}},"required":["type"],"title":"PublicMppQuoteFulfillmentRequest","type":"object"},"QuantityBookingRequest":{"additionalProperties":false,"description":"Explicit \"this is an ordinary units line\" marker.","properties":{"type":{"const":"quantity","default":"quantity","description":"Discriminator marking an ordinary units line — nothing is scheduled, so the branch carries no other fields.","title":"Type","type":"string"}},"title":"QuantityBookingRequest","type":"object"},"QuoteContextHint":{"additionalProperties":false,"description":"UCP-compatible, provisional localization hints accepted on a quote.","properties":{"market":{"anyOf":[{"maxLength":32,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Explicit merchant market code to bind to this quote.","title":"Market"},"address_country":{"anyOf":[{"$ref":"#/components/schemas/CountryCode"},{"type":"null"}],"default":null,"description":"ISO-3166-1 alpha-2 country the buyer is shopping from. Coarse enough to localize price and tax without identifying anyone."},"address_region":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"State, province, or region the buyer is shopping from.","examples":["OR"],"title":"Address Region"},"postal_code":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Postal code used to estimate destination tax and shipping before a full address is known.","examples":["97209"],"title":"Postal Code"},"intent":{"anyOf":[{"maxLength":1000,"type":"string"},{"type":"null"}],"default":null,"description":"Free-form description of what the buyer is shopping for. Retained for the merchant; never forwarded to inventory pricing, so it can never move a binding price.","examples":["Team offsite catering for 40 people"],"title":"Intent"},"language":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"BCP-47 language tag for buyer-facing copy on the quote.","examples":["en-US"],"title":"Language"},"currency":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}],"default":null,"description":"ISO-4217 currency the buyer wants to be quoted in. The merchant may decline and answer in its own currency."},"eligibility":{"description":"Typed opaque entitlement references the merchant must validate before applying a benefit to the quoted price.","examples":[[{"claim":"dev.openmerchant.member","reference":"mbr_9f2c41d0a7"}]],"items":{"$ref":"#/components/schemas/QuoteEligibilityReference"},"maxItems":20,"title":"Eligibility","type":"array"}},"title":"QuoteContextHint","type":"object"},"QuoteEligibilityReference":{"additionalProperties":false,"description":"Opaque merchant-verifiable entitlement bound to a quote price.","properties":{"claim":{"description":"Reverse-domain identifier naming what the buyer claims to be entitled to. Lower-cased on the way in; it names the benefit, never the buyer.","examples":["dev.openmerchant.member","com.example.corporate_rate"],"maxLength":255,"minLength":3,"title":"Claim","type":"string"},"reference":{"description":"Opaque token the merchant validates against its own system before applying the benefit. Never inspected or interpreted here.","examples":["mbr_9f2c41d0a7"],"maxLength":255,"minLength":1,"title":"Reference","type":"string"}},"required":["claim","reference"],"title":"QuoteEligibilityReference","type":"object"},"QuotePriceProposal":{"additionalProperties":false,"description":"A unit price a buyer proposes for the item being quoted.\n\nA typed number, deliberately not prose: the free-form ``message`` on a\nquote never affects a price, and this is the only input that can ask for a\nlower one. It is answered by the seller's own rules (a promotion marked\nnegotiable, down to its floor), or passed to a merchant that prices its own\nquotes. It can only lower a price, never extends an offer's deadline, and\na quote may make a limited number of them.","properties":{"unit_amount":{"description":"Proposed price for one unit, in minor units, before fulfillment and tax.","maximum":2147483647,"minimum":1,"title":"Unit Amount","type":"integer"},"currency":{"$ref":"#/components/schemas/CurrencyCode","description":"Currency of the proposal. Must be the market's own currency, the one the item is priced in, which may differ from a requested presentment currency."}},"required":["unit_amount","currency"],"title":"QuotePriceProposal","type":"object"},"ScheduledClassBookingRequest":{"additionalProperties":false,"description":"A requested seat count on one existing class occurrence.","properties":{"type":{"const":"scheduled_class","default":"scheduled_class","description":"Discriminator selecting the scheduled-class request shape.","title":"Type","type":"string"},"occurrence_id":{"description":"The dated session to reserve, from the availability answer.","examples":["om_agco_7f21"],"maxLength":64,"minLength":1,"title":"Occurrence Id","type":"string"},"party_size":{"default":1,"description":"Seats to reserve on that occurrence.","maximum":1000,"minimum":1,"title":"Party Size","type":"integer"}},"required":["occurrence_id"],"title":"ScheduledClassBookingRequest","type":"object"},"StayBookingRequest":{"additionalProperties":false,"description":"A requested date range, room count, and occupancy.","properties":{"type":{"const":"stay","default":"stay","description":"Discriminator selecting the stay request shape.","title":"Type","type":"string"},"check_in":{"description":"First night of the stay, in the property timezone.","examples":["2026-09-01"],"format":"date","title":"Check In","type":"string"},"check_out":{"description":"Departure day; the night before it is the last one booked.","examples":["2026-09-04"],"format":"date","title":"Check Out","type":"string"},"rooms":{"default":1,"description":"Rooms to reserve for every night of the range.","maximum":100,"minimum":1,"title":"Rooms","type":"integer"},"guests":{"$ref":"#/components/schemas/GuestCounts","description":"Occupancy across those rooms."},"rate_plan_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Optional plan pin; omission fans out over every plan.","title":"Rate Plan Id"}},"required":["check_in","check_out"],"title":"StayBookingRequest","type":"object"},"PublicMppQuoteCreateRequest":{"additionalProperties":false,"description":"Body for ``POST /mpp/{slug}/quotes`` (price on request or booking).","properties":{"catalog_item_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Catalog item to quote. Provide it alone for the default variant, or with catalog_variant_id to pin an exact variant.","title":"Catalog Item Id"},"catalog_variant_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Exact catalog variant to quote. It may be supplied alone or alongside catalog_item_id.","title":"Catalog Variant Id"},"quantity":{"default":1,"description":"How many units to quote.","maximum":1000,"minimum":1,"title":"Quantity","type":"integer"},"market":{"anyOf":[{"maxLength":32,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Explicit merchant market to use for catalog pricing.","title":"Market"},"currency":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}],"default":null,"description":"Buyer presentment currency. Omission uses native pricing; a different currency creates a binding Stripe FX Quote."},"booking":{"anyOf":[{"discriminator":{"mapping":{"appointment":"#/components/schemas/AppointmentBookingRequest","quantity":"#/components/schemas/QuantityBookingRequest","scheduled_class":"#/components/schemas/ScheduledClassBookingRequest","stay":"#/components/schemas/StayBookingRequest"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/QuantityBookingRequest"},{"$ref":"#/components/schemas/AppointmentBookingRequest"},{"$ref":"#/components/schemas/ScheduledClassBookingRequest"},{"$ref":"#/components/schemas/StayBookingRequest"}]},{"type":"null"}],"default":null,"description":"What to price for a bookable listing (appointment start, class occurrence, or stay range). Omit for price-on-request listings, which a merchant prices by hand.","title":"Booking"},"customizations":{"description":"Requested customization choices. Resolved identifiers, descriptions, quantities, and price deltas are bound to every resulting offer.","items":{"$ref":"#/components/schemas/PublicMppCustomizationGroupRequest"},"maxItems":50,"title":"Customizations","type":"array"},"context":{"anyOf":[{"$ref":"#/components/schemas/QuoteContextHint"},{"type":"null"}],"default":null,"description":"Optional provisional language and coarse country, region, or postal hints plus merchant-verifiable eligibility references. Free-form intent is not forwarded to merchant inventory pricing."},"buyer":{"anyOf":[{"$ref":"#/components/schemas/PublicMppBuyerRequest"},{"type":"null"}],"default":null,"description":"Buyer contact used for fulfillment; name, email, and phone are not sent to merchant inventory as tax or pricing inputs. A seller promotion may use keyed hashes of the email and phone to recognise a returning buyer."},"message":{"anyOf":[{"maxLength":5000,"type":"string"},{"type":"null"}],"default":null,"description":"Free-form note retained for the merchant. It is never forwarded to inventory pricing and cannot affect a binding offer.","title":"Message"},"price_proposal":{"anyOf":[{"$ref":"#/components/schemas/QuotePriceProposal"},{"type":"null"}],"default":null,"description":"A unit price the buyer proposes. Answered in the quote's `negotiation` block. It can only lower the price, never extends an offer's deadline, and a quote may make a limited number of them."},"fulfillment":{"anyOf":[{"$ref":"#/components/schemas/PublicMppQuoteFulfillmentRequest"},{"type":"null"}],"default":null,"description":"Order-wide fulfillment type and at most one destination. Omission infers the sole common enabled type; ambiguous choices require a type. Shipping and delivery require a postal destination."}},"title":"PublicMppQuoteCreateRequest","type":"object"},"AgenticQuoteStatus":{"description":"Lifecycle of one buyer-owned, merchant-authoritative quote.","enum":["requested","priced","unavailable","requires_input","declined","failed","expired","consumed"],"title":"AgenticQuoteStatus","type":"string"},"PublicMppQuoteItemRead":{"description":"The listing a quote was requested for (snapshot).","properties":{"sku":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"SKU of the listing the quote covers.","examples":["ESP-1-L"],"title":"Sku"},"name":{"description":"Listing name snapshotted when the quote was raised — authoritative even if the catalog later changes.","examples":["Espresso — Large"],"title":"Name","type":"string"},"catalog_item_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Catalog item the quote covers.","examples":["om_agci_4c1a"],"title":"Catalog Item Id"},"variant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Exact variant the quote covers.","examples":["om_agcv_9d10"],"title":"Variant Id"},"variant_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Variant name snapshotted when the quote was raised.","examples":["Large"],"title":"Variant Name"},"variant_options":{"description":"Option axis / value pairs identifying that variant.","items":{"$ref":"#/components/schemas/PublicMppVariantOptionRead"},"title":"Variant Options","type":"array"},"customizations":{"description":"Customization selections captured with the quote request.","items":{"$ref":"#/components/schemas/PublicMppCustomizationSelectionRead"},"title":"Customizations","type":"array"}},"required":["name"],"title":"PublicMppQuoteItemRead","type":"object"},"PublicMppQuoteMessageRead":{"description":"One machine-readable note about a quote or its offers.\n\nUsed by the refresh path to say ``price_changed`` (with the previous\ntotal) or ``booking_unavailable`` — never to silently substitute.","properties":{"code":{"description":"Machine-readable note code.","examples":["price_changed","booking_unavailable"],"title":"Code","type":"string"},"message":{"description":"Human-readable explanation of the same note.","title":"Message","type":"string"},"offer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The offer the note is about, when it targets one.","examples":["om_agqo_5e8b"],"title":"Offer Id"},"previous_total_amount_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"For `price_changed`: what the total was before the refresh, in minor units.","title":"Previous Total Amount Cents"}},"required":["code","message"],"title":"PublicMppQuoteMessageRead","type":"object"},"PublicMppQuoteOfferRead":{"description":"One exact, priced, expiring buyer-visible alternative beneath a quote.","properties":{"id":{"description":"Offer identifier. Pass it as a line’s `quote_offer_id` to buy exactly this alternative.","examples":["om_agqo_5e8b"],"title":"Id","type":"string"},"catalog_item_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Catalog item this offer prices, when catalog-backed.","title":"Catalog Item Id"},"catalog_variant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Resolved catalog variant this offer prices.","title":"Catalog Variant Id"},"booking_snapshot":{"anyOf":[{"discriminator":{"mapping":{"appointment":"#/components/schemas/AppointmentBookingSnapshot","quantity":"#/components/schemas/QuantityBookingSnapshot","scheduled_class":"#/components/schemas/ScheduledClassBookingSnapshot","stay":"#/components/schemas/StayBookingSnapshot"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/QuantityBookingSnapshot"},{"$ref":"#/components/schemas/AppointmentBookingSnapshot"},{"$ref":"#/components/schemas/ScheduledClassBookingSnapshot"},{"$ref":"#/components/schemas/StayBookingSnapshot"}]},{"type":"null"}],"default":null,"description":"Exact booking selection, or null for quantity inventory.","title":"Booking Snapshot"},"pricing_model":{"$ref":"#/components/schemas/AgenticPricingModel","description":"How the total derives from the rate for this offer."},"unit_count":{"description":"Billable units the total covers — nights, seats, or sessions.","title":"Unit Count","type":"integer"},"unit_amount_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Rate per billable unit, in minor units. Null when the merchant priced the offer as a whole.","title":"Unit Amount Cents"},"total_amount_cents":{"description":"Authoritative final payable amount in currency minor units.","title":"Total Amount Cents","type":"integer"},"currency":{"$ref":"#/components/schemas/CurrencyCode","description":"ISO-4217 currency shared by the offer and all subtotal entries."},"fx":{"anyOf":[{"$ref":"#/components/schemas/StripeFxRead"},{"type":"null"}],"default":null,"description":"Stripe FX Quote backing this immutable localized offer."},"tax_treatment":{"$ref":"#/components/schemas/TaxTreatment","description":"How tax is represented by this offer breakdown."},"subtotals":{"description":"Merchant-authored ordered price ledger. It contains exactly one subtotal and final total; tax and fee lines may repeat.","items":{"$ref":"#/components/schemas/PriceSubtotal"},"title":"Subtotals","type":"array"},"availability_status":{"$ref":"#/components/schemas/QuoteOfferAvailabilityStatus","description":"Availability assertion for this exact offer."},"available_quantity":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Units currently available for this offer, when quantity is known.","title":"Available Quantity"},"fulfillment":{"$ref":"#/components/schemas/PublicQuoteFulfillmentRead","description":"Exactly one fulfillment choice resolved for this offer."},"merchant_offer_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Merchant-authored reference for support and reconciliation.","title":"Merchant Offer Reference"},"expires_at":{"description":"Deadline after which this offer must be refreshed before purchase.","format":"date-time","title":"Expires At","type":"string"},"superseded_by_offer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Set on a refreshed offer; purchase the successor instead.","title":"Superseded By Offer Id"},"promotion":{"anyOf":[{"$ref":"#/components/schemas/AppliedPromotionRead"},{"type":"null"}],"default":null,"description":"Seller promotion this offer was priced with, if any. Its discount is already in `subtotals` as `items_discount`. When present, `expires_at` is the promotion's fixed deadline, and refreshing the quote does not move it."}},"required":["id","pricing_model","unit_count","total_amount_cents","currency","tax_treatment","subtotals","availability_status","fulfillment","expires_at"],"title":"PublicMppQuoteOfferRead","type":"object"},"QuoteNegotiationRead":{"additionalProperties":false,"description":"What became of the unit price a buyer proposed on this quote.","properties":{"proposed_unit_amount":{"description":"The unit price last proposed, in minor units.","title":"Proposed Unit Amount","type":"integer"},"currency":{"$ref":"#/components/schemas/CurrencyCode","description":"Currency of the proposal: the market's own."},"outcome":{"anyOf":[{"$ref":"#/components/schemas/QuoteProposalOutcome"},{"type":"null"}],"default":null,"description":"The answer. `accepted`: the offer is at or below the proposal. `countered`: too low, and the offer is the seller's lowest price instead. `declined`: too low, and the offer stands where it was. `not_negotiable`: nothing on this quote takes proposals. `forwarded`: the merchant prices this quote and received the proposal; the offer is their answer. Null while the quote is still being priced. The offers are always authoritative: buy the price an offer states, never the price proposed."},"rounds_used":{"description":"Proposals this quote has made so far.","minimum":0,"title":"Rounds Used","type":"integer"}},"required":["proposed_unit_amount","currency","rounds_used"],"title":"QuoteNegotiationRead","type":"object"},"QuoteNextAction":{"description":"Machine-readable action a buyer may take from the current quote state.","enum":["purchase","poll","resubmit"],"title":"QuoteNextAction","type":"string"},"QuoteOfferAvailabilityStatus":{"description":"Whether the exact booking behind an offer can still be sold.","enum":["available","unavailable","unknown"],"title":"QuoteOfferAvailabilityStatus","type":"string"},"QuoteProposalOutcome":{"description":"What became of the unit price a buyer proposed on a quote.\n\n``ACCEPTED`` means the offer is at or below the proposal. ``COUNTERED``\nmeans the proposal was too low and the offer is the seller's lowest price\ninstead. ``DECLINED`` means it was too low and the offer stands where it\nwas. ``NOT_NEGOTIABLE`` means nothing on this quote takes proposals.\n``FORWARDED`` means the merchant prices this quote themselves: the\nproposal was passed to their pricing, and the offer's price is the answer.","enum":["accepted","countered","declined","not_negotiable","forwarded"],"title":"QuoteProposalOutcome","type":"string"},"PublicMppQuoteRead":{"description":"Public quote status (creation response + poll endpoint).","properties":{"id":{"description":"Quote identifier; poll and purchase against it.","examples":["om_agq_9d10"],"title":"Id","type":"string"},"merchant_slug":{"description":"Storefront the quote was raised against.","examples":["coffee-cart"],"title":"Merchant Slug","type":"string"},"market":{"description":"Merchant market stamped when this quote was priced.","maxLength":32,"minLength":1,"title":"Market","type":"string"},"status":{"$ref":"#/components/schemas/AgenticQuoteStatus","description":"Where the quote stands. `requested` means keep polling; `priced` means the offers below are buyable."},"item":{"$ref":"#/components/schemas/PublicMppQuoteItemRead","description":"Snapshot of the listing the quote was requested for."},"quantity":{"description":"How many units the quote covers.","title":"Quantity","type":"integer"},"booking":{"anyOf":[{"discriminator":{"mapping":{"appointment":"#/components/schemas/AppointmentBookingRequest","quantity":"#/components/schemas/QuantityBookingRequest","scheduled_class":"#/components/schemas/ScheduledClassBookingRequest","stay":"#/components/schemas/StayBookingRequest"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/QuantityBookingRequest"},{"$ref":"#/components/schemas/AppointmentBookingRequest"},{"$ref":"#/components/schemas/ScheduledClassBookingRequest"},{"$ref":"#/components/schemas/StayBookingRequest"}]},{"type":"null"}],"default":null,"description":"The typed booking request this quote answers; null for non-bookable listings.","title":"Booking"},"offers":{"description":"Current immutable priced alternatives with authoritative subtotals. Purchase a binding availability offer by passing its id as a quote_offer line source.","items":{"$ref":"#/components/schemas/PublicMppQuoteOfferRead"},"title":"Offers","type":"array"},"messages":{"description":"Machine-readable notes such as price_changed.","items":{"$ref":"#/components/schemas/PublicMppQuoteMessageRead"},"title":"Messages","type":"array"},"decline_note":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Merchant explanation when the quote was declined.","title":"Decline Note"},"negotiation":{"anyOf":[{"$ref":"#/components/schemas/QuoteNegotiationRead"},{"type":"null"}],"default":null,"description":"The answer to the price this quote proposed; null when it never proposed one."},"next":{"anyOf":[{"$ref":"#/components/schemas/QuoteNextAction"},{"type":"null"}],"default":null,"description":"Typed next action for the current quote state."},"resolution_generation":{"description":"Monotonic merchant-resolution attempt number for this quote.","minimum":1,"title":"Resolution Generation","type":"integer"},"order_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Order created from this quote, once consumed.","examples":["om_agmo_2f7c"],"title":"Order Id"},"created_at":{"description":"When the quote was raised.","examples":["2026-09-01T15:00:00Z"],"format":"date-time","title":"Created At","type":"string"}},"required":["id","merchant_slug","market","status","item","quantity","resolution_generation","created_at"],"title":"PublicMppQuoteRead","type":"object"},"MppDocs":{"additionalProperties":true,"description":"Documentation links advertised for an MPP service.","properties":{"additional_fields":{"additionalProperties":true,"description":"Fields the publisher sent that this version of the contract does not model. Preserved verbatim so a newer directory entry is never silently truncated.","title":"Additional Fields","type":"object"},"homepage":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Human-facing landing page for the service.","examples":["https://openmerchant.dev"],"title":"Homepage"},"llmsTxt":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL of the service's llms.txt, for agent-readable orientation.","examples":["https://openmerchant.dev/llms.txt"],"title":"Llmstxt"},"apiReference":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL of the interactive or generated API reference.","examples":["https://openmerchant.dev/docs/api"],"title":"Apireference"}},"title":"MppDocs","type":"object"},"MppEndpoint":{"additionalProperties":true,"description":"One callable endpoint advertised in the MPP Directory.","properties":{"additional_fields":{"additionalProperties":true,"description":"Fields the publisher sent that this version of the contract does not model. Preserved verbatim so a newer directory entry is never silently truncated.","title":"Additional Fields","type":"object"},"method":{"$ref":"#/components/schemas/MppHttpMethod","description":"HTTP method to call the endpoint with."},"path":{"description":"Path relative to the service base URL, possibly templated.","examples":["/purchases","/catalog/{itemId}"],"title":"Path","type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"What the endpoint does, in the publisher's own words.","title":"Description"},"payment":{"anyOf":[{"$ref":"#/components/schemas/MppEndpointPayment"},{"type":"null"}],"default":null,"description":"Payment terms for calling it; null when the endpoint is free."}},"required":["method","path"],"title":"MppEndpoint","type":"object"},"MppEndpointPayment":{"additionalProperties":true,"description":"Payment metadata attached to one MPP service endpoint.","properties":{"additional_fields":{"additionalProperties":true,"description":"Fields the publisher sent that this version of the contract does not model. Preserved verbatim so a newer directory entry is never silently truncated.","title":"Additional Fields","type":"object"},"intent":{"anyOf":[{"$ref":"#/components/schemas/MppPaymentIntent"},{"type":"null"}],"default":null,"description":"What paying this endpoint does — charge now, or open a session. Null when the publisher advertised an intent this reader does not know."},"method":{"anyOf":[{"$ref":"#/components/schemas/MppPaymentMethod"},{"type":"null"}],"default":null,"description":"Rail the payment settles over. Null when unrecognized."},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"ISO-4217 currency the advertised amount is in.","examples":["usd"],"title":"Currency"},"decimals":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Minor-unit exponent for `amount` (2 for cent-denominated fiat).","title":"Decimals"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Buyer-facing explanation of what the charge is for.","examples":["Order total, charged at purchase"],"title":"Description"},"amount":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Statically advertised price, as a decimal string in minor units. Absent when `dynamic` is set and the price is computed per request.","examples":["500"],"title":"Amount"},"max":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Maximum dynamic charge as an integer minor-unit string; absent means uncapped.","title":"Max"},"amountHint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Human-readable indication of a dynamic price range.","examples":["varies by order total"],"title":"Amounthint"},"dynamic":{"default":false,"description":"The amount is computed per request rather than fixed; expect a 402 challenge carrying the real total.","title":"Dynamic","type":"boolean"},"unitType":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"What one billable unit is, when the price is per unit.","examples":["order"],"title":"Unittype"}},"title":"MppEndpointPayment","type":"object"},"MppHttpMethod":{"description":"HTTP methods supported by MPP directory endpoint entries.","enum":["GET","POST","PATCH","PUT","DELETE"],"title":"MppHttpMethod","type":"string"},"MppMethodSupport":{"additionalProperties":true,"description":"Payment intents and assets supported by a service payment method.","properties":{"additional_fields":{"additionalProperties":true,"description":"Fields the publisher sent that this version of the contract does not model. Preserved verbatim so a newer directory entry is never silently truncated.","title":"Additional Fields","type":"object"},"intents":{"description":"Payment intents this method can satisfy. Values the reader does not recognize are dropped rather than failing the entry.","items":{"$ref":"#/components/schemas/MppPaymentIntent"},"title":"Intents","type":"array"},"assets":{"description":"Settlement assets the method accepts.","examples":[["usd"]],"items":{"type":"string"},"title":"Assets","type":"array"}},"title":"MppMethodSupport","type":"object"},"MppProvider":{"additionalProperties":true,"description":"Provider identity advertised for an MPP service.","properties":{"additional_fields":{"additionalProperties":true,"description":"Fields the publisher sent that this version of the contract does not model. Preserved verbatim so a newer directory entry is never silently truncated.","title":"Additional Fields","type":"object"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Organization operating the service.","examples":["OpenMerchant"],"title":"Name"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Canonical site for that organization.","examples":["https://openmerchant.dev"],"title":"Url"}},"title":"MppProvider","type":"object"},"MppServiceStatus":{"description":"Operational status values exposed by the MPP Directory.","enum":["active","inactive","unknown"],"title":"MppServiceStatus","type":"string"},"MppService":{"additionalProperties":true,"description":"One service entry returned by the MPP Directory.","properties":{"additional_fields":{"additionalProperties":true,"description":"Fields the publisher sent that this version of the contract does not model. Preserved verbatim so a newer directory entry is never silently truncated.","title":"Additional Fields","type":"object"},"id":{"description":"Directory-unique identifier for the service.","examples":["openmerchant.coffee-cart"],"title":"Id","type":"string"},"name":{"description":"Display name for the service.","examples":["Coffee Cart"],"title":"Name","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Marketing or landing URL. Not necessarily callable.","examples":["https://coffee-cart.example.com"],"title":"Url"},"serviceUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Base URL every endpoint path is resolved against. Preferred over `url` for making calls.","examples":["https://api.mpp.openmerchant.dev/coffee-cart"],"title":"Serviceurl"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"What the service sells or does.","title":"Description"},"categories":{"description":"Directory taxonomy the service is listed under.","examples":[["commerce","marketplace"]],"items":{"type":"string"},"title":"Categories","type":"array"},"integration":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"How the service is integrated with the directory operator.","title":"Integration"},"tags":{"description":"Free-form labels used for discovery filtering.","examples":[["coffee","pickup"]],"items":{"type":"string"},"title":"Tags","type":"array"},"status":{"$ref":"#/components/schemas/MppServiceStatus","default":"unknown","description":"Operational status. Unknown when the publisher omitted it or sent a value this reader does not recognize."},"docs":{"$ref":"#/components/schemas/MppDocs","description":"Documentation links advertised for the service."},"methods":{"additionalProperties":{"$ref":"#/components/schemas/MppMethodSupport"},"description":"Supported payment methods, keyed by rail name (e.g. `stripe`), each declaring the intents and assets it accepts.","title":"Methods","type":"object"},"realm":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Authentication realm quoted back in the `Payment` challenge; it participates in the credential HMAC.","title":"Realm"},"provider":{"$ref":"#/components/schemas/MppProvider","description":"Organization operating the service."},"endpoints":{"description":"Callable endpoints, each with its own payment terms.","items":{"$ref":"#/components/schemas/MppEndpoint"},"title":"Endpoints","type":"array"}},"required":["id","name"],"title":"MppService","type":"object"},"QuoteResponderMessage":{"additionalProperties":false,"description":"One buyer-visible, machine-addressable responder message.","properties":{"code":{"description":"Machine-readable reason or change code.","examples":["price_changed","booking_unavailable"],"maxLength":120,"minLength":1,"title":"Code","type":"string"},"message":{"description":"Buyer-visible explanation of the outcome or change.","maxLength":5000,"minLength":1,"title":"Message","type":"string"},"offer_reference":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"default":null,"description":"Merchant offer reference this message concerns, when applicable.","title":"Offer Reference"},"previous_total_amount_cents":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Previous authoritative total for a price-change message.","title":"Previous Total Amount Cents"}},"required":["code","message"],"title":"QuoteResponderMessage","type":"object"},"QuoteResponderOffer":{"additionalProperties":false,"description":"One immutable merchant-authored price and availability alternative.","properties":{"catalog_item_id":{"description":"Hosted catalog item this offer prices.","maxLength":64,"minLength":1,"title":"Catalog Item Id","type":"string"},"catalog_variant_id":{"anyOf":[{"maxLength":64,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Exact hosted variant this offer prices. Omit to use the item's default variant.","title":"Catalog Variant Id"},"merchant_offer_reference":{"description":"Merchant idempotency reference unique within this response.","maxLength":255,"minLength":1,"title":"Merchant Offer Reference","type":"string"},"external_account_id":{"anyOf":[{"maxLength":255,"pattern":"^acct_[A-Za-z0-9]+$","type":"string"},{"type":"null"}],"default":null,"description":"Stripe seller account for this offer. OpenMerchant validates its platform ownership and snapshots it before payment authorization. Omit it to use the account associated with the catalog item.","title":"External Account Id"},"availability_status":{"$ref":"#/components/schemas/QuoteOfferAvailabilityStatus","description":"Merchant assertion that this exact alternative is available."},"available_quantity":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Units currently available for this offer, when quantity is known.","title":"Available Quantity"},"currency":{"$ref":"#/components/schemas/CurrencyCode","description":"ISO-4217 currency shared by every amount in this offer."},"unit_count":{"description":"Billable units covered by the authoritative total.","minimum":1,"title":"Unit Count","type":"integer"},"unit_amount_cents":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Rate per billable unit, or null for whole-offer pricing.","title":"Unit Amount Cents"},"total_amount_cents":{"description":"Authoritative payable total in currency minor units.","minimum":0,"title":"Total Amount Cents","type":"integer"},"tax_treatment":{"$ref":"#/components/schemas/TaxTreatment","description":"How tax is represented by the ordered subtotal ledger."},"subtotals":{"description":"Ordered reconciled price ledger ending in the authoritative total.","items":{"$ref":"#/components/schemas/PriceSubtotal"},"maxItems":50,"minItems":2,"title":"Subtotals","type":"array"},"fulfillment":{"$ref":"#/components/schemas/PublicQuoteFulfillmentRead","description":"Exactly one fulfillment choice priced by this offer."},"booking_snapshot":{"anyOf":[{"discriminator":{"mapping":{"appointment":"#/components/schemas/AppointmentBookingSnapshot","quantity":"#/components/schemas/QuantityBookingSnapshot","scheduled_class":"#/components/schemas/ScheduledClassBookingSnapshot","stay":"#/components/schemas/StayBookingSnapshot"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/QuantityBookingSnapshot"},{"$ref":"#/components/schemas/AppointmentBookingSnapshot"},{"$ref":"#/components/schemas/ScheduledClassBookingSnapshot"},{"$ref":"#/components/schemas/StayBookingSnapshot"}]},{"type":"null"}],"default":null,"description":"Exact booking selection, or null for ordinary quantity inventory.","title":"Booking Snapshot"},"expires_at":{"description":"Deadline after which this offer cannot be purchased.","examples":["2026-09-01T15:15:00Z"],"format":"date-time","title":"Expires At","type":"string"}},"required":["catalog_item_id","merchant_offer_reference","availability_status","currency","unit_count","total_amount_cents","tax_treatment","subtotals","fulfillment","expires_at"],"title":"QuoteResponderOffer","type":"object"},"QuoteResponderOutcome":{"description":"Terminal business outcome returned by a merchant quote responder.","enum":["priced","unavailable","requires_input","declined","failed"],"title":"QuoteResponderOutcome","type":"string"},"MerchantQuoteRespondRequest":{"additionalProperties":false,"description":"Authenticated seller response for the quote selected by the URL.\n\nThe quote id and signed request event id are deliberately absent. The API\nresolves both from the seller-owned quote and its locked open generation,\npreventing redundant or contradictory identity in the request body.\nAggregate availability is likewise derived from offers and outcome.","example":{"messages":[],"offers":[{"availability_status":"available","available_quantity":8,"booking_snapshot":{"type":"quantity"},"catalog_item_id":"om_agci_4c1a","catalog_variant_id":"om_agcv_9d10","currency":"USD","expires_at":"2030-01-01T00:00:00Z","fulfillment":{"option_id":"om_agcfo_f83c","type":"digital"},"merchant_offer_reference":"merchant-offer-123","subtotals":[{"amount":5000,"description":"Item subtotal","type":"subtotal"},{"amount":5000,"description":"Total","type":"total"}],"tax_treatment":"not_applicable","total_amount_cents":5000,"unit_amount_cents":2500,"unit_count":2}],"outcome":"priced"},"properties":{"outcome":{"$ref":"#/components/schemas/QuoteResponderOutcome","description":"Terminal business result for this resolution generation."},"offers":{"description":"Merchant-authored alternatives. Priced outcomes require at least one available offer; unavailable outcomes may describe rejected catalog alternatives.","items":{"$ref":"#/components/schemas/QuoteResponderOffer"},"maxItems":100,"title":"Offers","type":"array"},"messages":{"description":"Buyer-visible typed notes about the outcome or offers.","items":{"$ref":"#/components/schemas/QuoteResponderMessage"},"maxItems":50,"title":"Messages","type":"array"},"retryable":{"default":false,"description":"Only valid for failed outcomes. When true, the buyer may refresh the immutable request in a successor generation.","title":"Retryable","type":"boolean"}},"required":["outcome"],"title":"MerchantQuoteRespondRequest","type":"object"},"AgenticMerchantWebhookEventType":{"description":"Marketplace events available to account notification destinations.\n\n**Declaration order is the published documentation order.** Members are\nlisted in lifecycle sequence — quote, then the order lifecycle, then the\nmoney events (payment, refunds, disputes), with the dashboard test event\nlast. The generated OpenAPI ``webhooks`` section and the Scalar sidebar\nboth render in this order; ``test_openapi_sync.py`` asserts it, so\nreordering here is how you reorder the API reference.\n\nThe order lifecycle is exactly three events: ``order.requested`` (the\norder awaits merchant action), ``order.confirmed`` (the payment is\ncaptured and the merchant-confirmation obligation is satisfied), and\n``order.rejected`` (terminal negative from any path: merchant rejection,\nbooking failure, cancellation, or the confirmation-timeout sweep).\nBooking state travels inside the order payload's discriminated\n``lines[]`` — there are no separate ``booking.*`` events.\n\nEach of the three carries an optional ``data.decision`` block, and its\npresence is the single structural answer to \"does OpenMerchant need\nsomething back from me?\". A destination may therefore receive the same\ntype twice for one order: the decision-bearing delivery (sent once,\ninline, no retry, a signed reply owed before ``data.decision.deadline_at``)\nand later the informational one (fanned out through the outbox with\nretries, carrying the final snapshot). ``data.decision.action`` names the\nphase — ``reserve`` / ``commit`` / ``release`` — which is what the four\nretired ``*_requested`` connector events used to encode as separate\nsubscribable names. See :class:`AgenticMerchantLegacyWebhookEventType`.\n\nThe ``STRIPE_*`` members reuse Stripe's own event names on purpose:\nthey are Stripe events forwarded verbatim (the Stripe API object is the\n``data.object`` payload) to OpenMerchant-MoR sellers only, because those\nsellers have no Stripe account of their own to receive them.\nSeller-direct / Connect sellers get these from Stripe directly. Each\nmember is 1:1 with the inbound Stripe event that produces it — we\nforward a curated subset of what we subscribe to, never a rename and\nnever a fan-in of several Stripe events onto one outbound name.","enum":["quote.requested","order.requested","order.confirmed","order.rejected","payment_intent.succeeded","payment_intent.payment_failed","refund.created","refund.updated","refund.failed","charge.dispute.created","charge.dispute.closed","charge.dispute.funds_withdrawn","charge.dispute.funds_reinstated","webhook.test"],"title":"AgenticMerchantWebhookEventType","type":"string"},"MerchantConnectorDecision":{"description":"Immutable merchant decision for a reservation request.","enum":["accepted","declined"],"title":"MerchantConnectorDecision","type":"string"},"MerchantWebhookQuoteResponse":{"additionalProperties":false,"description":"Low-code response to one signed ``quote.requested`` delivery.\n\nOpenMerchant derives the hosted offer ledger and fulfillment identity from\nthe immutable quote snapshot.  A merchant responder therefore supplies\nonly the external facts it owns: availability, total, currency, expiry,\nand (for a booking) the exact resolved booking selection.","properties":{"event_id":{"description":"Identifier of the signed quote webhook delivery being answered.","maxLength":64,"minLength":1,"title":"Event Id","type":"string"},"event_type":{"$ref":"#/components/schemas/AgenticMerchantWebhookEventType","default":"quote.requested","description":"Webhook event type; quote responses must use `quote.requested`."},"quote_id":{"description":"Quote identifier supplied by the signed webhook event.","maxLength":64,"minLength":1,"title":"Quote Id","type":"string"},"decision":{"$ref":"#/components/schemas/MerchantConnectorDecision","description":"Whether the merchant can fulfill and price the requested quote."},"external_account_id":{"anyOf":[{"maxLength":255,"pattern":"^acct_[A-Za-z0-9]+$","type":"string"},{"type":"null"}],"default":null,"description":"Stripe seller account for an accepted quote. OpenMerchant validates and snapshots it before authorization; omit it to use the catalog item association.","title":"External Account Id"},"quoted_amount_cents":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Authoritative quoted total in minor currency units.","title":"Quoted Amount Cents"},"currency":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}],"default":null,"description":"Currency of the authoritative quoted total."},"expires_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"UTC timestamp after which the accepted quote may not be purchased.","title":"Expires At"},"available_quantity":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Quantity available when the merchant evaluated the quote request.","title":"Available Quantity"},"booking_snapshot":{"anyOf":[{"discriminator":{"mapping":{"appointment":"#/components/schemas/AppointmentBookingSnapshot","quantity":"#/components/schemas/QuantityBookingSnapshot","scheduled_class":"#/components/schemas/ScheduledClassBookingSnapshot","stay":"#/components/schemas/StayBookingSnapshot"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/QuantityBookingSnapshot"},{"$ref":"#/components/schemas/AppointmentBookingSnapshot"},{"$ref":"#/components/schemas/ScheduledClassBookingSnapshot"},{"$ref":"#/components/schemas/StayBookingSnapshot"}]},{"type":"null"}],"default":null,"description":"Exact merchant-resolved booking selection included in an accepted quote.","title":"Booking Snapshot"},"note":{"anyOf":[{"maxLength":5000,"type":"string"},{"type":"null"}],"default":null,"description":"Optional note attached to an accepted quote.","title":"Note"},"message":{"anyOf":[{"maxLength":5000,"type":"string"},{"type":"null"}],"default":null,"description":"Optional merchant-facing explanation for a declined quote.","title":"Message"}},"required":["event_id","quote_id","decision"],"title":"MerchantWebhookQuoteResponse","type":"object"},"MerchantConnectorAction":{"description":"The phase a decision-bearing ``order.*`` delivery asks a merchant to run.\n\nCarried as ``data.decision.action`` outbound and echoed on the reply. The\nwire vocabulary is three values, not the four internal\n:class:`MerchantConnectorEventType` slots: a reconcile re-issues the\naction it is reconciling and sets ``reconciliation`` instead of naming a\nfourth action.","enum":["reserve","commit","release"],"title":"MerchantConnectorAction","type":"string"},"MerchantOrderDecisionReply":{"additionalProperties":false,"description":"Answer to the ``data.decision`` block an order event carried.\n\nSupplied only when the delivery being answered had a ``data.decision`` —\ni.e. when OpenMerchant is holding a buyer request open waiting for this\nmerchant. Everything else the decision needs is already on\n:class:`MerchantOrderRespondRequest`: ``outcome`` is the accept/decline,\n``reservation_reference`` the held-stock id, ``confirmation_reference``\nthe final order id, ``subtotal_amount_cents`` + ``currency`` the\nauthoritative reserved base, and ``note`` the decline explanation.","properties":{"action":{"$ref":"#/components/schemas/MerchantConnectorAction","description":"The action being answered. Must equal the `data.decision.action` of the delivery named by `OpenMerchant-Webhook-Id`."},"reconciliation":{"default":false,"description":"Set true only when answering a delivery that itself carried `reconciliation: true`. Relaxes the per-action field requirements to whichever durable state you actually hold.","title":"Reconciliation","type":"boolean"},"expires_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"UTC instant the hold lapses. Required when accepting a `reserve`, unused otherwise.","title":"Expires At"}},"required":["action"],"title":"MerchantOrderDecisionReply","type":"object"},"MerchantOrderRespondLine":{"additionalProperties":false,"description":"Availability a merchant confirms for one line of the requested order.\n\nIdentify the line with whichever id the ``order.requested`` payload\ncarried for it — ``quote_offer_id`` when the order came from a quote,\notherwise ``variant_id`` or ``catalog_item_id``. At least one is\nrequired; all supplied ids must agree on the same line.","properties":{"catalog_item_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Hosted catalog item id from the order line.","examples":["om_agci_4c1a"],"title":"Catalog Item Id"},"variant_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Hosted catalog variant id from the order line.","examples":["om_agcv_9d10"],"title":"Variant Id"},"quote_offer_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Quote offer id from the order line, when it had one.","examples":["om_agqo_7b3e"],"title":"Quote Offer Id"},"availability_status":{"$ref":"#/components/schemas/QuoteOfferAvailabilityStatus","description":"Whether this line is actually sellable now that the merchant has checked its own inventory."},"available_quantity":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Units the merchant can supply, when it tracks a count. Report this even on a rejection so the buyer can retry a smaller order.","title":"Available Quantity"}},"required":["availability_status"],"title":"MerchantOrderRespondLine","type":"object"},"MerchantOrderRespondOutcome":{"description":"Terminal decision a merchant returns for a requested order.\n\nThe order sibling of :class:`QuoteResponderOutcome`. Deliberately binary:\nan ``order.requested`` already carries a buyer authorization, so the only\nanswers are \"I hold this stock, charge them\" and \"I cannot fulfill this,\nrelease them\". Partial fulfillment is expressed as a CONFIRMED response\nthat reprices the order down, never as a third outcome.","enum":["confirmed","rejected"],"title":"MerchantOrderRespondOutcome","type":"string"},"MerchantOrderRespondRequest":{"additionalProperties":false,"description":"Authenticated seller decision for the order selected by the URL.\n\nThe order id is deliberately absent from the body — the API resolves it\nfrom the seller-owned order named in the path, the same way the quote\nresponse API resolves its quote and open generation.\n\nRepricing is optional and one-directional. Supply\n``subtotal_amount_cents`` to report the authoritative merchandise base\nthe merchant actually reserved; OpenMerchant recomputes tax, reallocates\nthe line ledger, and captures the new total. A total above the buyer's\nexisting authorization (or a currency change) is refused with 402 —\nreject the order instead and let the buyer re-authorize.","properties":{"outcome":{"$ref":"#/components/schemas/MerchantOrderRespondOutcome","description":"Whether the merchant is fulfilling this order."},"reservation_reference":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"default":null,"description":"The merchant's own reservation identifier for the held stock or booking. Recorded on the order and echoed on later events.","examples":["RES-88213"],"title":"Reservation Reference"},"confirmation_reference":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"default":null,"description":"The merchant's own order reference, recorded on confirmation and surfaced to the buyer.","examples":["SO-10045"],"title":"Confirmation Reference"},"lines":{"description":"Per-line availability as checked against merchant inventory. A confirmation may not report an unavailable line — reprice the order down or reject it.","items":{"$ref":"#/components/schemas/MerchantOrderRespondLine"},"maxItems":100,"title":"Lines","type":"array"},"subtotal_amount_cents":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Authoritative merchandise base actually reserved, in minor units and before OpenMerchant recomputes tax. Omit to accept the amount the buyer already authorized.","title":"Subtotal Amount Cents"},"currency":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}],"default":null,"description":"Currency of `subtotal_amount_cents`. Must match the order currency; a change requires a new buyer authorization."},"note":{"anyOf":[{"maxLength":5000,"type":"string"},{"type":"null"}],"default":null,"description":"Free-form explanation recorded on the order — the confirmation note on a confirmation, the cancellation note on a rejection.","title":"Note"},"retryable":{"default":false,"description":"Only valid for a rejection. When true, the buyer is told the same order may succeed if placed again later.","title":"Retryable","type":"boolean"},"decision":{"anyOf":[{"$ref":"#/components/schemas/MerchantOrderDecisionReply"},{"type":"null"}],"default":null,"description":"Required when answering a delivery that carried `data.decision`, and only then. Identifies which action is being answered, so a reserve reply is never mistaken for a commit."}},"required":["outcome"],"title":"MerchantOrderRespondRequest","type":"object"},"ConnectorExternalResource":{"additionalProperties":false,"description":"Authoritative snapshotted external mapping for one connector line.","properties":{"binding_id":{"description":"Immutable OpenMerchant binding snapshot identifier.","title":"Binding Id","type":"string"},"external_item_id":{"description":"Opaque merchant-owned external item identifier.","title":"External Item Id","type":"string"},"external_resource_id":{"description":"Opaque merchant-owned inventory or booking resource identifier.","title":"External Resource Id","type":"string"},"booking_type":{"$ref":"#/components/schemas/BookingType","description":"Snapshotted commercial booking semantics for the resource."}},"required":["binding_id","external_item_id","external_resource_id","booking_type"],"title":"ConnectorExternalResource","type":"object"},"FulfillmentAddress":{"additionalProperties":false,"description":"Internal normalized address for persisted fulfillment and provider adapters.","properties":{"name":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"default":null,"description":"Recipient name for the shipment.","examples":["Riley Chen"],"title":"Name"},"line1":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"default":null,"description":"Street number and name.","examples":["811 NW Couch St"],"title":"Line1"},"line2":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"default":null,"description":"Apartment, suite, floor, or other secondary line.","examples":["Suite 400"],"title":"Line2"},"city":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"City or town.","examples":["Portland"],"title":"City"},"state":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"State, province, or region.","examples":["OR"],"title":"State"},"postal_code":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Postal or ZIP code.","examples":["97209"],"title":"Postal Code"},"country":{"anyOf":[{"$ref":"#/components/schemas/CountryCode"},{"type":"null"}],"default":null,"description":"ISO-3166-1 alpha-2 destination country."}},"title":"FulfillmentAddress","type":"object"},"MarketplaceQuoteContextPayload":{"description":"Persisted non-secret pricing context sent to the responder.\n\nMirrors the ``context`` object on ``POST /quotes``\n(:class:`QuoteContextHint`) with two deliberate differences: the resolved\n``currency`` is promoted to the top of the quote payload rather than\nrepeated here, and ``intent`` is absent because free-form buyer intent is\nnever forwarded to merchant pricing.","properties":{"language":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Buyer language hint, when supplied.","title":"Language"},"address_country":{"anyOf":[{"$ref":"#/components/schemas/CountryCode"},{"type":"null"}],"default":null,"description":"Coarse ISO-3166-1 country pricing hint."},"address_region":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Coarse state, province, or region pricing hint.","title":"Address Region"},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Postal-code pricing hint.","title":"Postal Code"},"eligibility":{"description":"Typed entitlements the merchant must validate before pricing.","items":{"$ref":"#/components/schemas/QuoteEligibilityReference"},"title":"Eligibility","type":"array"}},"title":"MarketplaceQuoteContextPayload","type":"object"},"MarketplaceQuoteEventData":{"description":"Data block for a quote event.","properties":{"quote":{"$ref":"#/components/schemas/MarketplaceQuotePayload","description":"Full quote state at the moment the event was emitted."}},"required":["quote"],"title":"MarketplaceQuoteEventData","type":"object"},"MarketplaceQuoteFulfillmentPayload":{"additionalProperties":false,"description":"Normalized fulfillment sent to merchant responders, independent of public wire formats.","properties":{"type":{"$ref":"#/components/schemas/AgenticFulfillmentType","description":"Fulfillment mode every accepted offer must use."},"option_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Stable catalog fulfillment-option id. Null accepts any advertised option of the requested type.","title":"Option Id"},"location_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Canonical public business location selected by the buyer.","title":"Location Id"},"rate_card_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Exact published fulfillment service to price (\"quote me FedEx 2Day\"). Null lets the merchant pick the cheapest service that serves the item.","examples":["om_agrc_9f21"],"title":"Rate Card Id"},"address":{"anyOf":[{"$ref":"#/components/schemas/FulfillmentAddress"},{"type":"null"}],"default":null,"description":"Normalized postal destination to price."}},"required":["type"],"title":"MarketplaceQuoteFulfillmentPayload","type":"object"},"MarketplaceQuoteItemPayload":{"description":"Catalog item snapshot delivered with a quote request.","properties":{"sku":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"SKU of the listing the quote was requested for.","examples":["ESP-1"],"title":"Sku"},"name":{"description":"Buyer-facing listing name, snapshotted when the quote was raised.","examples":["Espresso"],"title":"Name","type":"string"},"item_type":{"$ref":"#/components/schemas/PublicCatalogItemType","description":"Listing family the quote covers."},"catalog_item_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Stable hosted catalog item identifier.","examples":["om_agci_4c1a"],"title":"Catalog Item Id"},"catalog_variant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Exact hosted variant the merchant must price.","examples":["om_agcv_9d10"],"title":"Catalog Variant Id"},"catalog_item_revision":{"description":"Catalog item revision included in the responder cache identity.","minimum":0,"title":"Catalog Item Revision","type":"integer"},"catalog_variant_revision":{"description":"Catalog variant revision included in the responder cache identity.","minimum":0,"title":"Catalog Variant Revision","type":"integer"},"catalog_item_updated_at":{"description":"When the item revision was last updated, ISO-8601.","format":"date-time","title":"Catalog Item Updated At","type":"string"},"catalog_variant_updated_at":{"description":"When the variant revision was last updated, ISO-8601.","format":"date-time","title":"Catalog Variant Updated At","type":"string"},"variant_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Buyer-facing variant name snapshotted for the request.","title":"Variant Name"},"external_resources":{"description":"Authoritative external resource mappings snapshotted from the active custom connection; OpenMerchant IDs and SKU remain trace fields.","items":{"$ref":"#/components/schemas/ConnectorExternalResource"},"title":"External Resources","type":"array"}},"required":["name","item_type","catalog_item_revision","catalog_variant_revision","catalog_item_updated_at","catalog_variant_updated_at"],"title":"MarketplaceQuoteItemPayload","type":"object"},"MarketplaceQuotePayload":{"description":"Typed quote request snapshot delivered to a destination.\n\nField names mirror the ``POST /quotes`` request body so a merchant prices\nfrom the same shape their buyer submitted: ``buyer``, ``context``,\n``fulfillment``, ``customizations``, ``booking``, ``quantity``,\n``currency``, ``message``. ``id``, ``status``,\n``resolution_generation``, and the ``item`` snapshot have no request\ncounterpart — they are the state the responder needs and the request\ncannot carry.","properties":{"id":{"description":"Quote identifier, stable across pricing and purchase.","examples":["om_agq_9d10"],"title":"Id","type":"string"},"status":{"$ref":"#/components/schemas/AgenticQuoteStatus","description":"Quote status at the moment the request event was emitted."},"resolution_generation":{"description":"Generation this response must echo and resolve.","minimum":1,"title":"Resolution Generation","type":"integer"},"item":{"$ref":"#/components/schemas/MarketplaceQuoteItemPayload","description":"Snapshot of the listing the quote was requested for."},"external_account_id":{"anyOf":[{"maxLength":255,"pattern":"^acct_[A-Za-z0-9]+$","type":"string"},{"type":"null"}],"default":null,"description":"Stripe seller account associated with the requested catalog item, when one is known. A responder may return an owned account on each offer.","title":"External Account Id"},"quantity":{"description":"How many units the quote covers.","title":"Quantity","type":"integer"},"currency":{"$ref":"#/components/schemas/CurrencyCode","description":"ISO-4217 currency in which the merchant must return offers."},"customizations":{"description":"Resolved customization selections the merchant must price.","items":{"$ref":"#/components/schemas/QuoteCustomizationSelection"},"title":"Customizations","type":"array"},"booking":{"anyOf":[{"discriminator":{"mapping":{"appointment":"#/components/schemas/AppointmentBookingRequest","quantity":"#/components/schemas/QuantityBookingRequest","scheduled_class":"#/components/schemas/ScheduledClassBookingRequest","stay":"#/components/schemas/StayBookingRequest"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/QuantityBookingRequest"},{"$ref":"#/components/schemas/AppointmentBookingRequest"},{"$ref":"#/components/schemas/ScheduledClassBookingRequest"},{"$ref":"#/components/schemas/StayBookingRequest"}]},{"type":"null"}],"default":null,"description":"Typed booking search or exact selection requested by the buyer; null for non-bookable listings.","title":"Booking"},"context":{"$ref":"#/components/schemas/MarketplaceQuoteContextPayload","description":"Persisted non-secret inputs that may affect price."},"fulfillment":{"anyOf":[{"$ref":"#/components/schemas/MarketplaceQuoteFulfillmentPayload"},{"type":"null"}],"default":null,"description":"Resolved fulfillment constraint the returned offers must match, including the postal destination under `address` — the same normalized `{type, option_id, address}` responder contract."},"buyer":{"$ref":"#/components/schemas/PublicMppBuyerRequest","description":"Buyer contact visible to the responder, in the same shape `POST /quotes` accepts as `buyer`. Contact only — never a tax or pricing input."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Free-form note retained for the merchant but excluded from the authoritative pricing-input digest.","title":"Message"},"price_proposal":{"anyOf":[{"$ref":"#/components/schemas/QuotePriceProposal"},{"type":"null"}],"default":null,"description":"Unit price the buyer last proposed for this quote, in the market's currency; null when they proposed none. Yours to accept, counter, or ignore: answer with the offers you return, which stay authoritative. It is repeated on every refresh of the quote, so the same proposal can be answered the same way."}},"required":["id","status","resolution_generation","item","quantity","currency","context","buyer"],"title":"MarketplaceQuotePayload","type":"object"},"QuoteCustomizationSelection":{"additionalProperties":false,"description":"Resolved customization identity sent to merchant inventory pricing.","properties":{"group_id":{"description":"Identifier of the published customization group.","examples":["om_agcg_milk"],"maxLength":64,"minLength":1,"title":"Group Id","type":"string"},"group_name":{"description":"Buyer-facing name of the group, snapshotted at selection.","examples":["Milk"],"maxLength":120,"minLength":1,"title":"Group Name","type":"string"},"choice_id":{"description":"Identifier of the selected choice within the group.","examples":["om_agcc_oat"],"maxLength":64,"minLength":1,"title":"Choice Id","type":"string"},"choice_label":{"description":"Buyer-facing label of the choice, snapshotted at selection.","examples":["Oat milk"],"maxLength":120,"minLength":1,"title":"Choice Label","type":"string"},"quantity":{"description":"How many of this choice were selected. Zero records an explicit decline for a group the listing requires an answer to.","maximum":1000,"minimum":0,"title":"Quantity","type":"integer"}},"required":["group_id","group_name","choice_id","choice_label","quantity"],"title":"QuoteCustomizationSelection","type":"object"},"MarketplaceQuoteEventEnvelope":{"description":"Stable Stripe-style envelope for a quote event.","properties":{"id":{"description":"Event identifier, unique per emitted event and stable across retries.","examples":["evt_9f2c41d0a7"],"title":"Id","type":"string"},"type":{"const":"quote.requested","default":"quote.requested","description":"Always `quote.requested`.","title":"Type","type":"string"},"created":{"description":"Unix epoch seconds at which the event was emitted.","examples":[1788282000],"title":"Created","type":"integer"},"merchant_id":{"description":"Merchant scope that owns the quote and destination.","examples":["om_agm_4c1a"],"title":"Merchant Id","type":"string"},"mode":{"description":"Stripe mode the event was produced in.","examples":["test","live"],"title":"Mode","type":"string"},"data":{"$ref":"#/components/schemas/MarketplaceQuoteEventData","description":"Event body carrying the full quote state."}},"required":["id","created","merchant_id","mode","data"],"title":"MarketplaceQuoteEventEnvelope","type":"object"},"AgenticChargeCaptureStatus":{"description":"Capture lifecycle of the charge behind a hosted-merchant order.\n\nDeferred-capture orders (merchant-managed inventory or bookable lines,\nper ``order_requires_manual_capture``) authorize on the paid retry and\nread AUTHORIZED until merchant confirmation — and every booking — lands\nthe capture; declining or timing out releases the authorization without\nsettling. Immediate-capture orders jump straight to CAPTURED before\n``Payment-Receipt`` is emitted. ``NONE`` covers historical\nimmediate-capture rows.","enum":["none","authorized","captured","released"],"title":"AgenticChargeCaptureStatus","type":"string"},"AgenticChargeRefundStatus":{"description":"Refund lifecycle for a captured hosted-merchant charge.\n\nStripe can accept a refund asynchronously, so the payment ledger keeps a\nstate distinct from the order lifecycle. ``NONE`` means no refund was\nrequested; terminal failures remain retryable through the cancel action.","enum":["none","pending","requires_action","succeeded","failed","canceled"],"title":"AgenticChargeRefundStatus","type":"string"},"AgenticOrderCancellationReason":{"description":"Why a hosted merchant order was canceled (merchant decline / ops).","enum":["merchant_canceled","confirmation_timeout"],"title":"AgenticOrderCancellationReason","type":"string"},"BookingHoldStatus":{"description":"Lifecycle of one expiring booking hold.\n\n``HELD`` is the only state that occupies supply. ``CONSUMED`` means the\norder or checkout completed and the seat/night became a booking;\n``RELEASED`` is an explicit give-back; ``EXPIRED`` is the sweep's\ngive-back after the TTL lapsed.","enum":["held","consumed","released","expired"],"title":"BookingHoldStatus","type":"string"},"ConnectorEventBooking":{"additionalProperties":false,"description":"Order-level scheduling context sent independently from buyer identity.","properties":{"scheduled_for":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"Exact requested booking instant, when applicable.","title":"Scheduled For"},"booking_start":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"Inclusive start of the requested booking window.","title":"Booking Start"},"booking_end":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"Exclusive end of the requested booking window.","title":"Booking End"},"party_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"People or seats consuming booking capacity.","title":"Party Size"}},"title":"ConnectorEventBooking","type":"object"},"ConnectorEventBuyer":{"description":"Minimum fulfillment identity sent to a custom connector.","properties":{"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Buyer first name, if supplied.","title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Buyer last name, if supplied.","title":"Last Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Buyer contact email, if supplied.","title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Buyer contact phone, if supplied.","title":"Phone"},"dob":{"anyOf":[{"$ref":"#/components/schemas/DobRead"},{"type":"null"}],"default":null,"description":"Buyer date of birth, when collected for fulfillment."},"shipping_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Shipping recipient name, if fulfillment requires one.","title":"Shipping Name"},"shipping_line1":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Primary shipping address line.","title":"Shipping Line1"},"shipping_line2":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Secondary shipping address line.","title":"Shipping Line2"},"shipping_city":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Shipping city or locality.","title":"Shipping City"},"shipping_state":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Shipping state or region.","title":"Shipping State"},"shipping_postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Shipping postal code.","title":"Shipping Postal Code"},"shipping_country":{"anyOf":[{"$ref":"#/components/schemas/CountryCode"},{"type":"null"}],"default":null,"description":"ISO-3166-1 shipping country code."}},"title":"ConnectorEventBuyer","type":"object"},"ConnectorEventLine":{"description":"Snapshotted order line sent to a custom connector.","properties":{"catalog_variant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"OpenMerchant catalog variant trace identifier.","title":"Catalog Variant Id"},"sku":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Non-authoritative SKU retained only for troubleshooting.","title":"Sku"},"name":{"description":"Buyer-facing snapshotted line name.","title":"Name","type":"string"},"quantity":{"description":"Number of units or booking lines requested.","minimum":1,"title":"Quantity","type":"integer"},"external_resources":{"description":"Ordered authoritative external resource mappings.","items":{"$ref":"#/components/schemas/ConnectorExternalResource"},"maxItems":1,"minItems":1,"title":"External Resources","type":"array"}},"required":["name","quantity","external_resources"],"title":"ConnectorEventLine","type":"object"},"DobRead":{"description":"Date of birth in ``{day, month, year}`` shape for **read** responses.\n\nOnly validates basic component ranges -- does NOT enforce the 18+ rule.\nUse this for any response/snapshot shape so a row with stored DOB that\nviolates current write rules is still returnable.","properties":{"day":{"description":"Day of the month (1-31).","example":15,"maximum":31,"minimum":1,"title":"Day","type":"integer"},"month":{"description":"Month of the year (1-12).","example":6,"maximum":12,"minimum":1,"title":"Month","type":"integer"},"year":{"description":"Four-digit birth year.","example":1990,"minimum":1900,"title":"Year","type":"integer"}},"required":["day","month","year"],"title":"DobRead","type":"object"},"MarketplaceBookingOrderLinePayload":{"description":"A bookable line: the booking's live state travels with the order.\n\n``order.requested`` carries this at whatever state the booking is in —\n``pending`` for merchant-managed supply still confirming — and\n``order.confirmed`` / ``order.rejected`` close the loop when it moves.","properties":{"sku":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Merchant SKU of the purchased listing, when it has one.","examples":["ESP-1"],"title":"Sku"},"name":{"description":"Buyer-facing listing name, snapshotted at purchase.","examples":["Espresso"],"title":"Name","type":"string"},"catalog_item_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Hosted catalog item this line was ordered from — the same id `POST /orders` accepts as `items[].catalog_item_id`.","examples":["om_agci_4c1a"],"title":"Catalog Item Id"},"variant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Exact hosted variant ordered — the same id `POST /orders` accepts as `items[].variant_id`.","examples":["om_agcv_9d10"],"title":"Variant Id"},"variant_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Buyer-facing variant name, snapshotted at purchase.","title":"Variant Name"},"quote_offer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The quote offer this line was purchased from, when the order came from a quote; null for direct catalog purchases.","examples":["om_agqo_7b3e"],"title":"Quote Offer Id"},"fulfillment_type":{"anyOf":[{"$ref":"#/components/schemas/AgenticFulfillmentType"},{"type":"null"}],"default":null,"description":"How this specific line reaches the buyer, snapshotted at purchase. Lines on one order may differ, which is why the order-level `fulfillment.type` can be null."},"quantity":{"description":"How many of the listing were ordered on this line.","title":"Quantity","type":"integer"},"pricing_model":{"$ref":"#/components/schemas/AgenticPricingModel","description":"How the line total derives from the rate — per unit, night, day, or person."},"unit_count":{"description":"Billable units the line covers under `pricing_model` — nights for a stay, people for a per-person listing.","title":"Unit Count","type":"integer"},"unit_amount_cents":{"description":"Rate per billable unit, in minor units of the order currency.","title":"Unit Amount Cents","type":"integer"},"line_amount_cents":{"description":"Final line amount, equal to the total entry in subtotals.","title":"Line Amount Cents","type":"integer"},"item_discount_amount_cents":{"default":0,"description":"Discount applied to this line, in minor units.","title":"Item Discount Amount Cents","type":"integer"},"customization_amount_cents":{"default":0,"description":"Portion of the line amount contributed by customization selections, in minor units.","title":"Customization Amount Cents","type":"integer"},"tax_treatment":{"$ref":"#/components/schemas/TaxTreatment","default":"unspecified","description":"How tax is represented in this immutable line ledger."},"subtotals":{"description":"Ordered line-level monetary ledger preserved from the order.","items":{"$ref":"#/components/schemas/PriceSubtotal"},"title":"Subtotals","type":"array"},"variant_options":{"description":"Resolved variant option selections, in the same shape the order read returns.","items":{"$ref":"#/components/schemas/PublicMppVariantOptionRead"},"title":"Variant Options","type":"array"},"customizations":{"description":"Resolved customization selections priced onto this line, in the same shape the order read returns.","items":{"$ref":"#/components/schemas/PublicMppCustomizationSelectionRead"},"title":"Customizations","type":"array"},"license_term_interval":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Term unit for a licence line; null for everything else.","examples":["month"],"title":"License Term Interval"},"license_term_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"How many `license_term_interval` units the licence runs for.","title":"License Term Count"},"attributes":{"additionalProperties":{"type":"string"},"description":"Merchant display attributes snapshotted onto the line.","examples":[{"roast":"dark"}],"title":"Attributes","type":"object"},"kind":{"const":"booking","default":"booking","description":"Discriminator marking a line that carries live booking state.","title":"Kind","type":"string"},"booking_type":{"$ref":"#/components/schemas/BookingType","description":"Booking modality: stay, appointment, or scheduled_class."},"status":{"anyOf":[{"$ref":"#/components/schemas/BookingStatus"},{"type":"null"}],"default":null,"description":"Live booking status. Null only when the booking row was never created, which is distinct from a booking that failed."},"booking_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"OpenMerchant booking id, once the booking row exists.","title":"Booking Id"},"confirmation_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Merchant-facing confirmation reference from the provider.","title":"Confirmation Reference"},"provider_booking_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The provider's own booking reference, when it exposes one.","title":"Provider Booking Reference"},"starts_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"Booking start for instant-based modalities.","examples":["2026-09-01T15:00:00Z"],"title":"Starts At"},"ends_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"Booking end for instant-based modalities.","examples":["2026-09-01T16:00:00Z"],"title":"Ends At"},"check_in":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null,"description":"First night, for night-based stays.","examples":["2026-09-01"],"title":"Check In"},"check_out":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null,"description":"Departure day, for night-based stays.","examples":["2026-09-04"],"title":"Check Out"},"party_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"People the booking covers.","title":"Party Size"},"confirmed_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"When the provider confirmed the booking.","title":"Confirmed At"},"cancelled_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"When the booking was cancelled.","title":"Cancelled At"},"failure_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Why the booking could not be held or confirmed.","title":"Failure Reason"},"hold_status":{"anyOf":[{"$ref":"#/components/schemas/BookingHoldStatus"},{"type":"null"}],"default":null,"description":"State of the inventory hold protecting this line, if any."},"booking_snapshot":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"description":"The immutable resolved booking purchased on this line — a dumped BookingSnapshot, discriminated on its own `type`.","title":"Booking Snapshot"}},"required":["name","quantity","pricing_model","unit_count","unit_amount_cents","line_amount_cents","booking_type"],"title":"MarketplaceBookingOrderLinePayload","type":"object"},"MarketplaceOrderDecision":{"additionalProperties":false,"description":"The ``data.decision`` block: OpenMerchant is waiting on this merchant.\n\nPresent on an ``order.requested`` / ``order.confirmed`` / ``order.rejected``\ndelivery exactly when a signed reply is owed, and absent when the delivery\nis purely informational. That presence test is the whole contract — a\nmerchant never has to know whether it is wired as an authoritative\nconnector, only whether this particular delivery needs an answer.\n\nIdentity fields the envelope already carries (``id``, ``type``,\n``created``, ``mode``) are deliberately not repeated here.","properties":{"protocol_version":{"default":1,"description":"Decision protocol version; currently always 1.","maximum":1,"minimum":1,"title":"Protocol Version","type":"integer"},"operation_id":{"description":"Durable connector operation this decision belongs to.","title":"Operation Id","type":"string"},"deadline_at":{"description":"UTC instant after which a reply is refused. A buyer request is held open until then, so answer well inside it.","format":"date-time","title":"Deadline At","type":"string"},"action":{"$ref":"#/components/schemas/MerchantConnectorAction","description":"The phase being requested: reserve, commit, or release."},"reconciliation":{"default":false,"description":"True when an earlier reply for this action never reached us. Report the durable state you already have — do NOT run the mutation a second time. If you never ran it, run it now.","title":"Reconciliation","type":"boolean"},"purpose":{"$ref":"#/components/schemas/MerchantDecisionPurpose","default":"order","description":"Whether this decision belongs to a real order or to the reserve/release dry run that verifies a new connection. `setup_verification` is the only case where `data.order` is null."},"quoted_amount_cents":{"description":"Buyer-authorized quote total in currency minor units.","minimum":0,"title":"Quoted Amount Cents","type":"integer"},"currency":{"$ref":"#/components/schemas/CurrencyCode","description":"ISO-4217 currency for all event amounts."},"lines":{"description":"Immutable order lines and authoritative external mappings.","items":{"$ref":"#/components/schemas/ConnectorEventLine"},"maxItems":40,"minItems":1,"title":"Lines","type":"array"},"buyer":{"$ref":"#/components/schemas/ConnectorEventBuyer","description":"Minimum fulfillment identity for this order."},"booking":{"anyOf":[{"$ref":"#/components/schemas/ConnectorEventBooking"},{"type":"null"}],"default":null,"description":"Order-level booking context, or null for ordinary goods."},"reservation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"External reservation being committed, released, or reconciled.","title":"Reservation Id"},"payment_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"External-payment trace reference supplied after capture.","title":"Payment Reference"}},"required":["operation_id","deadline_at","action","quoted_amount_cents","currency","lines","buyer"],"title":"MarketplaceOrderDecision","type":"object"},"MarketplaceOrderEventData":{"description":"Data block for an order event.","properties":{"order":{"anyOf":[{"$ref":"#/components/schemas/MarketplaceOrderPayload"},{"type":"null"}],"description":"Full order state at the moment the event was emitted. Null only when `decision.purpose` is `setup_verification`."},"decision":{"anyOf":[{"$ref":"#/components/schemas/MarketplaceOrderDecision"},{"type":"null"}],"default":null,"description":"Present when a signed reply is required, absent when this delivery is informational. Answer at `POST /v1/merchant/orders/{order_id}/respond` before `decision.deadline_at`."}},"required":["order"],"title":"MarketplaceOrderEventData","type":"object"},"MarketplaceOrderFulfillmentPayload":{"description":"Where and how the order must be fulfilled.\n\nThis is the stable normalized webhook contract. Public MPP purchases and\nquotes use UCP-shaped destinations; their adapter resolves those fields to\nthis postal capture before a merchant receives the event.","properties":{"type":{"anyOf":[{"$ref":"#/components/schemas/AgenticFulfillmentType"},{"type":"null"}],"default":null,"description":"How the order reaches the buyer, when every line agrees. Null when lines mix methods — read each line's `fulfillment_type`."},"option_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Merchant fulfillment option selected on the source quote, when the order came from one.","examples":["ship_standard"],"title":"Option Id"},"address":{"anyOf":[{"$ref":"#/components/schemas/FulfillmentAddress"},{"type":"null"}],"default":null,"description":"Postal destination captured for the order. Null for listings that need no address (digital delivery, pickup at a store)."}},"title":"MarketplaceOrderFulfillmentPayload","type":"object"},"MarketplaceOrderPayload":{"description":"Typed order snapshot delivered on every order lifecycle event.\n\nField names and types mirror ``GET /mpp/{slug}/orders/{id}`` and the\n``POST /orders`` request body, so a merchant reconciles a delivery with\nthe types they already generated from the API spec.","properties":{"id":{"description":"Order identifier, stable across every lifecycle event.","examples":["om_agmo_2f7c"],"title":"Id","type":"string"},"status":{"$ref":"#/components/schemas/AgenticMerchantOrderStatus","description":"Order status at the moment this event was emitted."},"merchant_slug":{"description":"Storefront the order was placed against.","examples":["coffee-cart"],"title":"Merchant Slug","type":"string"},"currency":{"$ref":"#/components/schemas/CurrencyCode","description":"ISO-4217 currency every amount on the order is in."},"subtotal_amount_cents":{"description":"Sum of line amounts before discounts, fulfillment, tax, and fees.","title":"Subtotal Amount Cents","type":"integer"},"items_discount_amount_cents":{"default":0,"description":"Discounts applied at line level, in minor units.","title":"Items Discount Amount Cents","type":"integer"},"discount_amount_cents":{"default":0,"description":"Order-level discounts, in minor units.","title":"Discount Amount Cents","type":"integer"},"fulfillment_amount_cents":{"default":0,"description":"Shipping or delivery charge, in minor units.","title":"Fulfillment Amount Cents","type":"integer"},"tax_amount_cents":{"default":0,"description":"Tax charged on the order, in minor units.","title":"Tax Amount Cents","type":"integer"},"fee_amount_cents":{"default":0,"description":"Service or platform fees, in minor units.","title":"Fee Amount Cents","type":"integer"},"tip_amount_cents":{"default":0,"description":"Gratuity, in minor units.","title":"Tip Amount Cents","type":"integer"},"tax_treatment":{"$ref":"#/components/schemas/TaxTreatment","default":"unspecified","description":"Aggregate representation of tax across the order lines."},"subtotals":{"description":"Canonical ordered final-price ledger, identical across order reads and lifecycle webhooks.","items":{"$ref":"#/components/schemas/PriceSubtotal"},"title":"Subtotals","type":"array"},"tax_calculation_provider":{"$ref":"#/components/schemas/AgenticTaxCalculationProvider","default":"none","description":"Which engine computed the tax figures, if any."},"total_amount_cents":{"description":"Final authorized amount, equal to the total entry in subtotals.","title":"Total Amount Cents","type":"integer"},"buyer":{"$ref":"#/components/schemas/PublicMppBuyerRequest","description":"Buyer contact captured for fulfillment, in the same shape `POST /purchases` accepts as `buyer`. Contact only — never a tax or pricing input."},"fulfillment":{"$ref":"#/components/schemas/MarketplaceOrderFulfillmentPayload","description":"Resolved destination and method for the order. This is where the ship-to address lives."},"scheduled_for":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"Order-level scheduled instant.","examples":["2026-09-01T15:00:00Z"],"title":"Scheduled For"},"booking_start":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"Order-level booking window start.","examples":["2026-09-01T15:00:00Z"],"title":"Booking Start"},"booking_end":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"Order-level booking window end.","examples":["2026-09-01T16:00:00Z"],"title":"Booking End"},"party_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"People the order-level booking covers.","title":"Party Size"},"quote_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The priced quote this order was created from, if any.","examples":["om_agq_9d10"],"title":"Quote Id"},"external_account_id":{"anyOf":[{"maxLength":255,"pattern":"^acct_[A-Za-z0-9]+$","type":"string"},{"type":"null"}],"default":null,"description":"Read-only Stripe seller account snapshotted before authorization. Merchant order responses cannot replace this routing identity.","title":"External Account Id"},"paid_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"When the buyer's payment was accepted. Attests the committed payment — for deferred-capture orders this is the authorization time, not settlement; read payment_status for whether funds actually captured.","title":"Paid At"},"payment_status":{"$ref":"#/components/schemas/AgenticChargeCaptureStatus","default":"none","description":"Where the payment stands at emission time. A deferred-capture order (merchant-managed inventory or bookable lines) reads authorized on order.requested and only captures once the merchant — and every booking — confirms; released means the authorization was cancelled without settling."},"reserved_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"When the merchant acknowledged stock/booking held via an inbound order.reserved. Extends the confirmation-timeout clock; null until the merchant reserves.","title":"Reserved At"},"reservation_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Merchant-side reservation reference recorded by order.reserved.","title":"Reservation Reference"},"merchant_confirmation_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The merchant's own reference for the confirmed order.","title":"Merchant Confirmation Reference"},"merchant_confirmation_note":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Free-form note the merchant attached when confirming.","title":"Merchant Confirmation Note"},"cancellation_reason":{"anyOf":[{"$ref":"#/components/schemas/AgenticOrderCancellationReason"},{"type":"null"}],"default":null,"description":"Machine-readable reason the order was cancelled."},"cancellation_note":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Human-readable detail accompanying the cancellation.","title":"Cancellation Note"},"refund_status":{"$ref":"#/components/schemas/AgenticChargeRefundStatus","default":"none","description":"Whether the order has been refunded in part or in full."},"refunded_amount_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Amount refunded so far, in minor units.","title":"Refunded Amount Cents"},"refunded_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"When the most recent refund settled, ISO-8601.","title":"Refunded At"},"lines":{"description":"Immutable order lines, each discriminated on `kind` — `product` for goods, `booking` for lines carrying live booking state.","items":{"discriminator":{"mapping":{"booking":"#/components/schemas/MarketplaceBookingOrderLinePayload","product":"#/components/schemas/MarketplaceProductOrderLinePayload"},"propertyName":"kind"},"oneOf":[{"$ref":"#/components/schemas/MarketplaceProductOrderLinePayload"},{"$ref":"#/components/schemas/MarketplaceBookingOrderLinePayload"}]},"title":"Lines","type":"array"},"applied_promotions":{"description":"Seller promotions this order was priced with. Their discounts are already in the item discount amounts; ``promotion_id`` names the campaign so a merchant can reconcile a lower-than-list total to its cause. Buyers never see that id.","items":{"$ref":"#/components/schemas/MerchantAppliedPromotionRead"},"title":"Applied Promotions","type":"array"}},"required":["id","status","merchant_slug","currency","subtotal_amount_cents","total_amount_cents","buyer","fulfillment","lines"],"title":"MarketplaceOrderPayload","type":"object"},"MarketplaceProductOrderLinePayload":{"description":"An ordinary quantity-of-units line; carries no booking state.","properties":{"sku":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Merchant SKU of the purchased listing, when it has one.","examples":["ESP-1"],"title":"Sku"},"name":{"description":"Buyer-facing listing name, snapshotted at purchase.","examples":["Espresso"],"title":"Name","type":"string"},"catalog_item_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Hosted catalog item this line was ordered from — the same id `POST /orders` accepts as `items[].catalog_item_id`.","examples":["om_agci_4c1a"],"title":"Catalog Item Id"},"variant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Exact hosted variant ordered — the same id `POST /orders` accepts as `items[].variant_id`.","examples":["om_agcv_9d10"],"title":"Variant Id"},"variant_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Buyer-facing variant name, snapshotted at purchase.","title":"Variant Name"},"quote_offer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The quote offer this line was purchased from, when the order came from a quote; null for direct catalog purchases.","examples":["om_agqo_7b3e"],"title":"Quote Offer Id"},"fulfillment_type":{"anyOf":[{"$ref":"#/components/schemas/AgenticFulfillmentType"},{"type":"null"}],"default":null,"description":"How this specific line reaches the buyer, snapshotted at purchase. Lines on one order may differ, which is why the order-level `fulfillment.type` can be null."},"quantity":{"description":"How many of the listing were ordered on this line.","title":"Quantity","type":"integer"},"pricing_model":{"$ref":"#/components/schemas/AgenticPricingModel","description":"How the line total derives from the rate — per unit, night, day, or person."},"unit_count":{"description":"Billable units the line covers under `pricing_model` — nights for a stay, people for a per-person listing.","title":"Unit Count","type":"integer"},"unit_amount_cents":{"description":"Rate per billable unit, in minor units of the order currency.","title":"Unit Amount Cents","type":"integer"},"line_amount_cents":{"description":"Final line amount, equal to the total entry in subtotals.","title":"Line Amount Cents","type":"integer"},"item_discount_amount_cents":{"default":0,"description":"Discount applied to this line, in minor units.","title":"Item Discount Amount Cents","type":"integer"},"customization_amount_cents":{"default":0,"description":"Portion of the line amount contributed by customization selections, in minor units.","title":"Customization Amount Cents","type":"integer"},"tax_treatment":{"$ref":"#/components/schemas/TaxTreatment","default":"unspecified","description":"How tax is represented in this immutable line ledger."},"subtotals":{"description":"Ordered line-level monetary ledger preserved from the order.","items":{"$ref":"#/components/schemas/PriceSubtotal"},"title":"Subtotals","type":"array"},"variant_options":{"description":"Resolved variant option selections, in the same shape the order read returns.","items":{"$ref":"#/components/schemas/PublicMppVariantOptionRead"},"title":"Variant Options","type":"array"},"customizations":{"description":"Resolved customization selections priced onto this line, in the same shape the order read returns.","items":{"$ref":"#/components/schemas/PublicMppCustomizationSelectionRead"},"title":"Customizations","type":"array"},"license_term_interval":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Term unit for a licence line; null for everything else.","examples":["month"],"title":"License Term Interval"},"license_term_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"How many `license_term_interval` units the licence runs for.","title":"License Term Count"},"attributes":{"additionalProperties":{"type":"string"},"description":"Merchant display attributes snapshotted onto the line.","examples":[{"roast":"dark"}],"title":"Attributes","type":"object"},"kind":{"const":"product","default":"product","description":"Discriminator marking an ordinary quantity-of-units line.","title":"Kind","type":"string"}},"required":["name","quantity","pricing_model","unit_count","unit_amount_cents","line_amount_cents"],"title":"MarketplaceProductOrderLinePayload","type":"object"},"MerchantAppliedPromotionRead":{"description":"Applied promotion as shown to the merchant.\n\nThe buyer object plus ``promotion_id``, so a merchant can reconcile a\nlower-than-list total to the campaign they authored.","properties":{"claim_id":{"description":"This buyer's claim for the offer (`om_agpc_…`). Unique to this basket, written with `expires_at`, and never reused. A quote, checkout, and order for the same issuance share this id.","title":"Claim Id","type":"string"},"title":{"description":"Name the seller gave the promotion.","title":"Title","type":"string"},"currency":{"$ref":"#/components/schemas/CurrencyCode","description":"Currency discount_amount is in."},"discount_amount":{"description":"Total discount from this promotion, in minor units.","title":"Discount Amount","type":"integer"},"expires_at":{"description":"Instant the promotional price stops being valid. It was fixed when the offer was made and is never extended, by a refresh or otherwise.","format":"date-time","title":"Expires At","type":"string"},"reserved":{"description":"Whether the promotion is reserved for this buyer. False for an anonymous quote: the price is honored only while the campaign still has capacity when the order is created.","title":"Reserved","type":"boolean"},"redeemed":{"description":"Whether a payment has redeemed this promotion.","title":"Redeemed","type":"boolean"},"terms":{"description":"One plain sentence an agent can relay to the person it is buying for: what is offered and until when.","title":"Terms","type":"string"},"lines":{"description":"The discount per line it applied to.","items":{"$ref":"#/components/schemas/AppliedPromotionLineRead"},"title":"Lines","type":"array"},"promotion_id":{"description":"Campaign this claim was drawn from (`om_agpm_…`). Merchant-only; never published on a buyer quote, checkout, or public order read.","title":"Promotion Id","type":"string"}},"required":["claim_id","title","currency","discount_amount","expires_at","reserved","redeemed","terms","lines","promotion_id"],"title":"MerchantAppliedPromotionRead","type":"object"},"MerchantDecisionPurpose":{"description":"Why a decision-bearing delivery was sent.\n\n``SETUP_VERIFICATION`` is the reserve/release dry run that proves a new\ndecision connection works before it goes ACTIVE. It is the only case in\nwhich an ``order.*`` event carries ``data.order = null``, because no order\nexists yet.","enum":["order","setup_verification"],"title":"MerchantDecisionPurpose","type":"string"},"MarketplaceOrderRequestedEventEnvelope":{"description":"Exact envelope delivered for ``order.requested``.","properties":{"id":{"description":"Event identifier, unique per emitted event and stable across retries.","examples":["evt_9f2c41d0a7"],"title":"Id","type":"string"},"type":{"const":"order.requested","description":"Which order lifecycle transition this delivery reports.","title":"Type","type":"string"},"created":{"description":"Unix epoch seconds at which the event was emitted.","examples":[1788282000],"title":"Created","type":"integer"},"mode":{"description":"Stripe mode the event was produced in.","examples":["test","live"],"title":"Mode","type":"string"},"data":{"$ref":"#/components/schemas/MarketplaceOrderEventData","description":"Event body carrying the full order state."}},"required":["id","type","created","mode","data"],"title":"MarketplaceOrderRequestedEventEnvelope","type":"object"},"MarketplaceOrderConfirmedEventEnvelope":{"description":"Exact envelope delivered for ``order.confirmed``.","properties":{"id":{"description":"Event identifier, unique per emitted event and stable across retries.","examples":["evt_9f2c41d0a7"],"title":"Id","type":"string"},"type":{"const":"order.confirmed","description":"Which order lifecycle transition this delivery reports.","title":"Type","type":"string"},"created":{"description":"Unix epoch seconds at which the event was emitted.","examples":[1788282000],"title":"Created","type":"integer"},"mode":{"description":"Stripe mode the event was produced in.","examples":["test","live"],"title":"Mode","type":"string"},"data":{"$ref":"#/components/schemas/MarketplaceOrderEventData","description":"Event body carrying the full order state."}},"required":["id","type","created","mode","data"],"title":"MarketplaceOrderConfirmedEventEnvelope","type":"object"},"MarketplaceOrderRejectedEventData":{"description":"Data block for the terminal-negative ``order.rejected`` event.\n\n``reason`` is the closed classification of why the order (or one of its\nbooking lines) terminated without success; per-line detail — which line\nfailed or was cancelled, and its provider references — travels in the\norder snapshot's discriminated ``lines[]``. It is required on the\ninformational delivery *and* on a ``release`` decision, so a merchant\nasked to drop a hold always learns why.","properties":{"order":{"anyOf":[{"$ref":"#/components/schemas/MarketplaceOrderPayload"},{"type":"null"}],"description":"Full order state at the moment the event was emitted. Null only when `decision.purpose` is `setup_verification`."},"decision":{"anyOf":[{"$ref":"#/components/schemas/MarketplaceOrderDecision"},{"type":"null"}],"default":null,"description":"Present when a signed reply is required, absent when this delivery is informational. Answer at `POST /v1/merchant/orders/{order_id}/respond` before `decision.deadline_at`."},"reason":{"$ref":"#/components/schemas/MarketplaceOrderRejectionReason","description":"Machine-readable reason the merchant or provider rejected it."},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Human-readable detail — a merchant note or failure reason.","title":"Note"}},"required":["order","reason"],"title":"MarketplaceOrderRejectedEventData","type":"object"},"MarketplaceOrderRejectionReason":{"description":"Closed reason set carried by the outbound ``order.rejected`` event.\n\n``MERCHANT_REJECTED`` — the merchant answered ``order.requested`` with an\ninbound rejection (or an operator declined). ``FAILED`` — a booking line\nterminally failed after payment and the order was compensated.\n``CANCELLED`` — the order (or one booking line) was cancelled by the\norder lifecycle, an operator, or the merchant's inventory system.\n``CONFIRMATION_TIMEOUT`` — the confirmation-timeout sweep released the\nauthorization because the merchant never confirmed in time.","enum":["merchant_rejected","failed","cancelled","confirmation_timeout"],"title":"MarketplaceOrderRejectionReason","type":"string"},"MarketplaceOrderRejectedEventEnvelope":{"description":"Stable Stripe-style envelope for the ``order.rejected`` event.","properties":{"id":{"description":"Event identifier, unique per emitted event and stable across retries.","examples":["evt_9f2c41d0a7"],"title":"Id","type":"string"},"type":{"const":"order.rejected","default":"order.rejected","description":"Always `order.rejected`.","title":"Type","type":"string"},"created":{"description":"Unix epoch seconds at which the event was emitted.","examples":[1788282000],"title":"Created","type":"integer"},"mode":{"description":"Stripe mode the event was produced in.","examples":["test","live"],"title":"Mode","type":"string"},"data":{"$ref":"#/components/schemas/MarketplaceOrderRejectedEventData","description":"Event body carrying the order plus the rejection reason."}},"required":["id","created","mode","data"],"title":"MarketplaceOrderRejectedEventEnvelope","type":"object"},"MarketplaceStripeEventData":{"description":"Data block for a forwarded Stripe event: Stripe's own ``data.object``.\n\nThe object is Stripe's API shape serialized verbatim from the SDK object\nat the emission boundary — deliberately untyped here because its schema\nis owned by Stripe, not by this platform.","properties":{"object":{"additionalProperties":true,"description":"The Stripe object exactly as Stripe delivered it, forwarded unmodified so the merchant can use its own Stripe SDK on it.","title":"Object","type":"object"}},"required":["object"],"title":"MarketplaceStripeEventData","type":"object"},"MarketplaceStripePaymentIntentSucceededEventEnvelope":{"description":"Exact envelope delivered for ``payment_intent.succeeded``.","properties":{"id":{"description":"Event identifier, unique per emitted event and stable across retries.","examples":["evt_9f2c41d0a7"],"title":"Id","type":"string"},"type":{"const":"payment_intent.succeeded","description":"Which forwarded Stripe event this delivery reports.","title":"Type","type":"string"},"created":{"description":"Unix epoch seconds at which the event was emitted.","examples":[1788282000],"title":"Created","type":"integer"},"mode":{"description":"Stripe mode the event was produced in.","examples":["test","live"],"title":"Mode","type":"string"},"data":{"$ref":"#/components/schemas/MarketplaceStripeEventData","description":"Event body wrapping the untouched Stripe object."}},"required":["id","type","created","mode","data"],"title":"MarketplaceStripePaymentIntentSucceededEventEnvelope","type":"object"},"MarketplaceStripePaymentIntentPaymentFailedEventEnvelope":{"description":"Exact envelope delivered for ``payment_intent.payment_failed``.","properties":{"id":{"description":"Event identifier, unique per emitted event and stable across retries.","examples":["evt_9f2c41d0a7"],"title":"Id","type":"string"},"type":{"const":"payment_intent.payment_failed","description":"Which forwarded Stripe event this delivery reports.","title":"Type","type":"string"},"created":{"description":"Unix epoch seconds at which the event was emitted.","examples":[1788282000],"title":"Created","type":"integer"},"mode":{"description":"Stripe mode the event was produced in.","examples":["test","live"],"title":"Mode","type":"string"},"data":{"$ref":"#/components/schemas/MarketplaceStripeEventData","description":"Event body wrapping the untouched Stripe object."}},"required":["id","type","created","mode","data"],"title":"MarketplaceStripePaymentIntentPaymentFailedEventEnvelope","type":"object"},"MarketplaceStripeRefundCreatedEventEnvelope":{"description":"Exact envelope delivered for ``refund.created``.","properties":{"id":{"description":"Event identifier, unique per emitted event and stable across retries.","examples":["evt_9f2c41d0a7"],"title":"Id","type":"string"},"type":{"const":"refund.created","description":"Which forwarded Stripe event this delivery reports.","title":"Type","type":"string"},"created":{"description":"Unix epoch seconds at which the event was emitted.","examples":[1788282000],"title":"Created","type":"integer"},"mode":{"description":"Stripe mode the event was produced in.","examples":["test","live"],"title":"Mode","type":"string"},"data":{"$ref":"#/components/schemas/MarketplaceStripeEventData","description":"Event body wrapping the untouched Stripe object."}},"required":["id","type","created","mode","data"],"title":"MarketplaceStripeRefundCreatedEventEnvelope","type":"object"},"MarketplaceStripeRefundUpdatedEventEnvelope":{"description":"Exact envelope delivered for ``refund.updated``.","properties":{"id":{"description":"Event identifier, unique per emitted event and stable across retries.","examples":["evt_9f2c41d0a7"],"title":"Id","type":"string"},"type":{"const":"refund.updated","description":"Which forwarded Stripe event this delivery reports.","title":"Type","type":"string"},"created":{"description":"Unix epoch seconds at which the event was emitted.","examples":[1788282000],"title":"Created","type":"integer"},"mode":{"description":"Stripe mode the event was produced in.","examples":["test","live"],"title":"Mode","type":"string"},"data":{"$ref":"#/components/schemas/MarketplaceStripeEventData","description":"Event body wrapping the untouched Stripe object."}},"required":["id","type","created","mode","data"],"title":"MarketplaceStripeRefundUpdatedEventEnvelope","type":"object"},"MarketplaceStripeRefundFailedEventEnvelope":{"description":"Exact envelope delivered for ``refund.failed``.","properties":{"id":{"description":"Event identifier, unique per emitted event and stable across retries.","examples":["evt_9f2c41d0a7"],"title":"Id","type":"string"},"type":{"const":"refund.failed","description":"Which forwarded Stripe event this delivery reports.","title":"Type","type":"string"},"created":{"description":"Unix epoch seconds at which the event was emitted.","examples":[1788282000],"title":"Created","type":"integer"},"mode":{"description":"Stripe mode the event was produced in.","examples":["test","live"],"title":"Mode","type":"string"},"data":{"$ref":"#/components/schemas/MarketplaceStripeEventData","description":"Event body wrapping the untouched Stripe object."}},"required":["id","type","created","mode","data"],"title":"MarketplaceStripeRefundFailedEventEnvelope","type":"object"},"MarketplaceStripeChargeDisputeCreatedEventEnvelope":{"description":"Exact envelope delivered for ``charge.dispute.created``.","properties":{"id":{"description":"Event identifier, unique per emitted event and stable across retries.","examples":["evt_9f2c41d0a7"],"title":"Id","type":"string"},"type":{"const":"charge.dispute.created","description":"Which forwarded Stripe event this delivery reports.","title":"Type","type":"string"},"created":{"description":"Unix epoch seconds at which the event was emitted.","examples":[1788282000],"title":"Created","type":"integer"},"mode":{"description":"Stripe mode the event was produced in.","examples":["test","live"],"title":"Mode","type":"string"},"data":{"$ref":"#/components/schemas/MarketplaceStripeEventData","description":"Event body wrapping the untouched Stripe object."}},"required":["id","type","created","mode","data"],"title":"MarketplaceStripeChargeDisputeCreatedEventEnvelope","type":"object"},"MarketplaceStripeChargeDisputeClosedEventEnvelope":{"description":"Exact envelope delivered for ``charge.dispute.closed``.","properties":{"id":{"description":"Event identifier, unique per emitted event and stable across retries.","examples":["evt_9f2c41d0a7"],"title":"Id","type":"string"},"type":{"const":"charge.dispute.closed","description":"Which forwarded Stripe event this delivery reports.","title":"Type","type":"string"},"created":{"description":"Unix epoch seconds at which the event was emitted.","examples":[1788282000],"title":"Created","type":"integer"},"mode":{"description":"Stripe mode the event was produced in.","examples":["test","live"],"title":"Mode","type":"string"},"data":{"$ref":"#/components/schemas/MarketplaceStripeEventData","description":"Event body wrapping the untouched Stripe object."}},"required":["id","type","created","mode","data"],"title":"MarketplaceStripeChargeDisputeClosedEventEnvelope","type":"object"},"MarketplaceStripeChargeDisputeFundsWithdrawnEventEnvelope":{"description":"Exact envelope delivered for ``charge.dispute.funds_withdrawn``.","properties":{"id":{"description":"Event identifier, unique per emitted event and stable across retries.","examples":["evt_9f2c41d0a7"],"title":"Id","type":"string"},"type":{"const":"charge.dispute.funds_withdrawn","description":"Which forwarded Stripe event this delivery reports.","title":"Type","type":"string"},"created":{"description":"Unix epoch seconds at which the event was emitted.","examples":[1788282000],"title":"Created","type":"integer"},"mode":{"description":"Stripe mode the event was produced in.","examples":["test","live"],"title":"Mode","type":"string"},"data":{"$ref":"#/components/schemas/MarketplaceStripeEventData","description":"Event body wrapping the untouched Stripe object."}},"required":["id","type","created","mode","data"],"title":"MarketplaceStripeChargeDisputeFundsWithdrawnEventEnvelope","type":"object"},"MarketplaceStripeChargeDisputeFundsReinstatedEventEnvelope":{"description":"Exact envelope delivered for ``charge.dispute.funds_reinstated``.","properties":{"id":{"description":"Event identifier, unique per emitted event and stable across retries.","examples":["evt_9f2c41d0a7"],"title":"Id","type":"string"},"type":{"const":"charge.dispute.funds_reinstated","description":"Which forwarded Stripe event this delivery reports.","title":"Type","type":"string"},"created":{"description":"Unix epoch seconds at which the event was emitted.","examples":[1788282000],"title":"Created","type":"integer"},"mode":{"description":"Stripe mode the event was produced in.","examples":["test","live"],"title":"Mode","type":"string"},"data":{"$ref":"#/components/schemas/MarketplaceStripeEventData","description":"Event body wrapping the untouched Stripe object."}},"required":["id","type","created","mode","data"],"title":"MarketplaceStripeChargeDisputeFundsReinstatedEventEnvelope","type":"object"},"MarketplaceWebhookTestData":{"description":"Data block for a webhook test event.","properties":{"object":{"$ref":"#/components/schemas/MarketplaceWebhookTestPayload","description":"Test marker body; carries no order or quote state."}},"title":"MarketplaceWebhookTestData","type":"object"},"MarketplaceWebhookTestPayload":{"description":"Object delivered by an explicit destination test.","properties":{"message":{"default":"OpenMerchant webhook test event","description":"Fixed marker identifying this as a delivery test, not real traffic.","title":"Message","type":"string"}},"title":"MarketplaceWebhookTestPayload","type":"object"},"MarketplaceWebhookTestEnvelope":{"description":"Stable Stripe-style envelope for a webhook test.","properties":{"id":{"description":"Event identifier, unique per emitted event and stable across retries.","examples":["evt_9f2c41d0a7"],"title":"Id","type":"string"},"type":{"const":"webhook.test","default":"webhook.test","description":"Always `webhook.test`.","title":"Type","type":"string"},"created":{"description":"Unix epoch seconds at which the event was emitted.","examples":[1788282000],"title":"Created","type":"integer"},"mode":{"description":"Stripe mode the event was produced in.","examples":["test","live"],"title":"Mode","type":"string"},"data":{"$ref":"#/components/schemas/MarketplaceWebhookTestData","description":"Event body carrying only the test marker."}},"required":["id","created","mode","data"],"title":"MarketplaceWebhookTestEnvelope","type":"object"},"RateLimitDimension":{"description":"Stable caller identity used to partition a rate-limit bucket.","enum":["user","ip","account","platform","customer"],"title":"RateLimitDimension","type":"string"},"RateLimitExceededResponse":{"description":"Response returned when a caller exhausts a rate-limit bucket.","properties":{"detail":{"description":"Stable human-readable error summary.","title":"Detail","type":"string"},"dimension":{"$ref":"#/components/schemas/RateLimitDimension","description":"Caller identity dimension used by the exhausted bucket."},"limit":{"description":"Maximum requests in the window.","exclusiveMinimum":0,"title":"Limit","type":"integer"},"window_seconds":{"description":"Bucket window length in seconds.","exclusiveMinimum":0,"title":"Window Seconds","type":"integer"},"retry_after":{"description":"Seconds until the caller should retry.","exclusiveMinimum":0,"title":"Retry After","type":"integer"}},"required":["detail","dimension","limit","window_seconds","retry_after"],"title":"RateLimitExceededResponse","type":"object"}},"securitySchemes":{"MppPaymentCredential":{"type":"http","scheme":"Payment","description":"The exact MPP Payment credential that successfully settled the requested order."},"QuoteAccessToken":{"type":"apiKey","in":"header","name":"Quote-Access-Token","description":"Opaque bearer token scoped to one buyer quote."},"MerchantWebhookSignature":{"type":"apiKey","in":"header","name":"OpenMerchant-Signature","description":"Merchant HMAC signature over the inbound event."}}},"x-openmerchant-merchants":[]}