{"openapi":"3.1.0","info":{"title":"OpenMerchant Public v1 API","version":"0.1.0","description":"OpenMerchant public v1 API for creating purchase intents, monitoring profile-mediated checkout, managing merchant catalogs and quotes, and managing reusable spending policies. Authenticated commerce endpoints require an OpenMerchant secret API key in the Authorization Bearer header. Buyer catalog and registry discovery are configured for anonymous live-mode access by default, with an operational switch that can require a mode-locked secret API key. Standards-based discovery endpoints explicitly marked with no security are intentionally public."},"paths":{"/v1/catalog":{"post":{"tags":["catalog"],"summary":"Search the agentic catalog","description":"Search normalized products and services from published OpenMerchant listings, verified public UCP catalogs, and Shopify Global Catalog. Provider failures are reported through source statuses while healthy results remain available. Unscoped public-UCP search is a bounded live federation, so pagination may report exhaustive=false when lower-ranked merchants were omitted, a merchant failed, or an upstream cursor could not safely continue. Authentication is deployment-configurable and optional by default. When anonymous access is enabled, anonymous requests always use live mode and see only globally published sources. A valid secret API key or scoped chat actor retains its immutable account and test/live mode. X-Mode and mode query hints cannot override either scope.","operationId":"v1_search_catalog","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1CatalogSearchRequest-Input"}}},"required":true},"responses":{"200":{"description":"Successful Response","headers":{"OpenMerchant-Attribution-Id":{"description":"Opaque merchant-scoped discovery token that may be echoed into a later MPP order or UCP checkout.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__sourcing__public_catalog_v1__V1CatalogSearchResponse"}}}},"429":{"description":"A shared request rate limit was exceeded.","headers":{"Retry-After":{"description":"Seconds until this caller may retry.","schema":{"type":"integer","minimum":1.0}},"X-RateLimit-Limit":{"description":"Request limit for the exhausted window.","schema":{"type":"integer","minimum":1.0}},"X-RateLimit-Window":{"description":"Length of the exhausted window in seconds.","schema":{"type":"integer","minimum":1.0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitExceededResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"optional","x-operation-id":"v1_search_catalog","x-mcp-exposed":true,"x-public-path":"/v1/catalog","security":[{"ApiKeyBearer":[]},{}],"x-docs-kind":"create","x-docs-order":10,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/catalog \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_search_catalog\",\n    \"arguments\": {}\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_search_catalog\",\n  arguments: {},\n});"}]}},"/v1/chats":{"post":{"tags":["chats"],"summary":"Create a Shopping Agent chat","description":"Create one persisted Shopping Agent conversation for an owned Profile.","operationId":"v1_create_chat","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalChatCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalChatThreadRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_create_chat","x-mcp-exposed":false,"x-public-path":"/v1/chats","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"create","x-docs-order":10,"x-docs-depth":0,"x-docs-action-order":1000},"get":{"tags":["chats"],"summary":"List Shopping Agent chats","description":"List persisted Shopping Agent conversations newest activity first.","operationId":"v1_list_chats","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalChatListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_list_chats","x-mcp-exposed":false,"x-public-path":"/v1/chats","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"list","x-docs-order":40,"x-docs-depth":0,"x-docs-action-order":1000}},"/v1/markets":{"post":{"tags":["markets"],"summary":"Create a merchant market","description":"Create one currency market with supported locales and routing rules.","operationId":"v1_create_market","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicV1MarketRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_create_market","x-mcp-exposed":true,"x-public-path":"/v1/markets","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"create","x-docs-order":10,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/markets \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"code\": \"...\",\n  \"currency\": \"AED\",\n  \"default_locale\": \"ar-AE\",\n  \"locales\": [\n    \"ar-AE\"\n  ]\n}'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_create_market\",\n    \"arguments\": {\n      \"code\": \"...\",\n      \"currency\": \"AED\",\n      \"default_locale\": \"ar-AE\",\n      \"locales\": [\n        \"ar-AE\"\n      ]\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_create_market\",\n  arguments: {\n  \"code\": \"...\",\n  \"currency\": \"AED\",\n  \"default_locale\": \"ar-AE\",\n  \"locales\": [\n    \"ar-AE\"\n  ]\n},\n});"}]},"get":{"tags":["markets"],"summary":"List merchant markets","description":"List binding prices, locales, status, and routing scopes by market.","operationId":"v1_list_markets","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicV1MarketListResponse"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_list_markets","x-mcp-exposed":true,"x-public-path":"/v1/markets","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"list","x-docs-order":40,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/markets \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_list_markets\",\n    \"arguments\": {}\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_list_markets\",\n  arguments: {},\n});"}]}},"/v1/onboarding_links":{"post":{"tags":["onboarding-links"],"summary":"Create an onboarding link","description":"Issue a short-lived hosted onboarding link. The returned `url` is the only copy of the secret token — store or forward it immediately. Pass `profile.id` only for `account_update` links; omit it for `account_onboarding` and a profile id is reserved for you.","operationId":"v1_create_onboarding_link","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingLinkCreateRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingLinkRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_create_onboarding_link","x-mcp-exposed":true,"x-public-path":"/v1/onboarding_links","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"create","x-docs-order":10,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/onboarding_links \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"use_case\": {\n    \"type\": \"account_onboarding\"\n  }\n}'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_create_onboarding_link\",\n    \"arguments\": {\n      \"use_case\": {\n        \"type\": \"account_onboarding\"\n      }\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_create_onboarding_link\",\n  arguments: {\n  \"use_case\": {\n    \"type\": \"account_onboarding\"\n  }\n},\n});"}]}},"/v1/policies":{"post":{"tags":["policies"],"summary":"Create a policy","description":"Create a reusable spending policy for future purchase-intent evaluation.","operationId":"v1_create_policy","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPolicyLibraryRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_create_policy","x-mcp-exposed":true,"x-public-path":"/v1/policies","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"create","x-docs-order":10,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/policies \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"name\": \"...\"\n}'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_create_policy\",\n    \"arguments\": {\n      \"name\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_create_policy\",\n  arguments: {\n  \"name\": \"...\"\n},\n});"}]},"get":{"tags":["policies"],"summary":"List policies","description":"Return reusable spending policies visible to the authenticated API key.","operationId":"v1_list_policies","parameters":[{"name":"include_archived","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Archived"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPolicyLibraryListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_list_policies","x-mcp-exposed":true,"x-public-path":"/v1/policies","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"list","x-docs-order":40,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/policies \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_list_policies\",\n    \"arguments\": {}\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_list_policies\",\n  arguments: {},\n});"}]}},"/v1/profiles":{"post":{"tags":["profiles"],"summary":"Create a Profile","description":"A Profile represents your end user and the customer who is buying the item. Configure billing address, shipping address, payment methods, and additional preferences. When enabling issuing, additional KYC is required.","operationId":"v1_create_profile","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicProfileCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicProfileRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_create_profile","x-mcp-exposed":true,"x-public-path":"/v1/profiles","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"create","x-docs-order":10,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/profiles \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"profile_type\": \"consumer\",\n  \"first_name\": \"...\",\n  \"last_name\": \"...\",\n  \"email\": \"user@example.com\",\n  \"phone\": \"+14155551234\",\n  \"dob\": {\n    \"day\": 15,\n    \"month\": 6,\n    \"year\": 1990\n  },\n  \"country\": \"AD\"\n}'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_create_profile\",\n    \"arguments\": {\n      \"profile_type\": \"consumer\",\n      \"first_name\": \"...\",\n      \"last_name\": \"...\",\n      \"email\": \"user@example.com\",\n      \"phone\": \"+14155551234\",\n      \"dob\": {\n        \"day\": 15,\n        \"month\": 6,\n        \"year\": 1990\n      },\n      \"country\": \"AD\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_create_profile\",\n  arguments: {\n  \"profile_type\": \"consumer\",\n  \"first_name\": \"...\",\n  \"last_name\": \"...\",\n  \"email\": \"user@example.com\",\n  \"phone\": \"+14155551234\",\n  \"dob\": {\n    \"day\": 15,\n    \"month\": 6,\n    \"year\": 1990\n  },\n  \"country\": \"AD\"\n},\n});"}]},"get":{"tags":["profiles"],"summary":"List profiles","description":"Return end-customer profiles visible to the authenticated API key.","operationId":"v1_list_profiles","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ProfileStatus"},{"type":"null"}],"title":"Status"}},{"name":"issuing","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ProfileIssuingState"},{"type":"null"}],"title":"Issuing"}},{"name":"profile_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ProfileType"},{"type":"null"}],"title":"Profile Type"}},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/CountryCode"},{"type":"null"}],"title":"Country"}},{"name":"created_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created After"}},{"name":"created_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created Before"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":255},{"type":"null"}],"title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicProfileListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_list_profiles","x-mcp-exposed":true,"x-public-path":"/v1/profiles","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"list","x-docs-order":40,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/profiles \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_list_profiles\",\n    \"arguments\": {}\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_list_profiles\",\n  arguments: {},\n});"}]}},"/v1/promotions":{"post":{"tags":["promotions"],"summary":"Create a promotion","description":"Create one limited-time promotion with its window, caps, identity rules, discount arms, and targets. New promotions start as drafts.","operationId":"v1_create_promotion","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromotionCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicV1PromotionRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_create_promotion","x-mcp-exposed":true,"x-public-path":"/v1/promotions","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"create","x-docs-order":10,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/promotions \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"name\": \"...\",\n  \"market_id\": \"...\",\n  \"currency\": \"AED\",\n  \"starts_at\": \"2026-06-30T12:00:00Z\",\n  \"ends_at\": \"2026-06-30T12:00:00Z\",\n  \"arms\": [\n    {\n      \"kind\": \"percent\",\n      \"ttl_minutes\": 1\n    }\n  ]\n}'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_create_promotion\",\n    \"arguments\": {\n      \"name\": \"...\",\n      \"market_id\": \"...\",\n      \"currency\": \"AED\",\n      \"starts_at\": \"2026-06-30T12:00:00Z\",\n      \"ends_at\": \"2026-06-30T12:00:00Z\",\n      \"arms\": [\n        {\n          \"kind\": \"percent\",\n          \"ttl_minutes\": 1\n        }\n      ]\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_create_promotion\",\n  arguments: {\n  \"name\": \"...\",\n  \"market_id\": \"...\",\n  \"currency\": \"AED\",\n  \"starts_at\": \"2026-06-30T12:00:00Z\",\n  \"ends_at\": \"2026-06-30T12:00:00Z\",\n  \"arms\": [\n    {\n      \"kind\": \"percent\",\n      \"ttl_minutes\": 1\n    }\n  ]\n},\n});"}]},"get":{"tags":["promotions"],"summary":"List promotions","description":"List limited-time promotions by status, market, or search.","operationId":"v1_list_promotions","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PromotionStatus"},{"type":"null"}],"title":"Status"}},{"name":"market_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Market Id"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":255},{"type":"null"}],"title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicV1PromotionListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_list_promotions","x-mcp-exposed":true,"x-public-path":"/v1/promotions","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"list","x-docs-order":40,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/promotions \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_list_promotions\",\n    \"arguments\": {}\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_list_promotions\",\n  arguments: {},\n});"}]}},"/v1/purchase_intents":{"post":{"tags":["purchase-intents"],"summary":"Create a purchase intent","description":"Create a Purchase Intent, which represents the intent to buy one or more items. Items from the same merchant are batched together into the same cart to save on fulfillment fees. Configure other preferences, like the maximum amount allowed to be spent on shipping, delivery, or pickup fees.","operationId":"v1_create_purchase_intent","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPurchaseIntentCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPurchaseIntentPollRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_create_purchase_intent","x-mcp-exposed":true,"x-public-path":"/v1/purchase_intents","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"create","x-docs-order":10,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/purchase_intents \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"items\": [\n    {}\n  ],\n  \"profile_id\": \"...\"\n}'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_create_purchase_intent\",\n    \"arguments\": {\n      \"items\": [\n        {}\n      ],\n      \"profile_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_create_purchase_intent\",\n  arguments: {\n  \"items\": [\n    {}\n  ],\n  \"profile_id\": \"...\"\n},\n});"}]},"get":{"tags":["purchase-intents"],"summary":"List purchase intents","description":"Return purchase-intent audit rows for the authenticated API key.","operationId":"v1_list_purchase_intents","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PublicPurchaseIntentStatus"},{"type":"null"}],"title":"Status"}},{"name":"profile_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Id"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":255},{"type":"null"}],"title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicAuditTrailListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_list_purchase_intents","x-mcp-exposed":true,"x-public-path":"/v1/purchase_intents","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"list","x-docs-order":40,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/purchase_intents \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_list_purchase_intents\",\n    \"arguments\": {}\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_list_purchase_intents\",\n  arguments: {},\n});"}]}},"/v1/quotes":{"post":{"tags":["quotes"],"summary":"Create quote","description":"Resolve exactly one merchant from catalog_item_id, catalog_variant_id, or merchant_slug; persist the buyer-owned quote; send one signed quote.requested event to that merchant's designated responder; and wait up to ten seconds for offers. A 202 response remains pollable at Location.","operationId":"v1_create_quote","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicV1QuoteCreateRequest"}}}},"responses":{"201":{"description":"The authoritative quote resolution completed inline.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicV1QuoteRead"}}},"headers":{"Cache-Control":{"description":"Buyer quote responses are never shared-cacheable.","schema":{"type":"string","example":"private, no-store"}},"Location":{"description":"Canonical URL for retrieving the persisted quote.","schema":{"type":"string"}}}},"202":{"description":"The quote is persisted, but the responder deadline elapsed; poll the Location resource.","headers":{"Cache-Control":{"description":"Buyer quote responses are never shared-cacheable.","schema":{"type":"string","example":"private, no-store"}},"Location":{"description":"Canonical URL for retrieving the persisted quote.","schema":{"type":"string"}},"Retry-After":{"description":"Suggested polling delay in seconds after an indeterminate timeout.","schema":{"type":"integer","example":2}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicV1QuoteRead"}}}},"409":{"description":"Merchant/responder setup is incomplete, the idempotency key conflicts, or the quote state cannot be refreshed."},"422":{"description":"The merchant requires typed buyer input before repricing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicV1QuoteRead"}}}},"502":{"description":"The designated responder returned an invalid or terminal failure."},"404":{"description":"The selected merchant or catalog reference is not public in this mode."}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_create_quote","x-mcp-exposed":true,"x-public-path":"/v1/quotes","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"create","x-docs-order":10,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/quotes \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '\"...\"'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_create_quote\",\n    \"arguments\": {\n      \"body\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_create_quote\",\n  arguments: {\n  \"body\": \"...\"\n},\n});"}]},"get":{"tags":["quotes"],"summary":"List buyer quotes","description":"List only quotes requested by this immutable account and mode.","operationId":"v1_list_quotes","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicV1QuoteListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_list_quotes","x-mcp-exposed":true,"x-public-path":"/v1/quotes","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"list","x-docs-order":40,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/quotes \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_list_quotes\",\n    \"arguments\": {}\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_list_quotes\",\n  arguments: {},\n});"}]}},"/v1/rate_cards":{"post":{"tags":["rate-cards"],"summary":"Create a fulfillment rate card","description":"Create one priced fulfillment service with its markets, zones, labels, locations, timing promise, and fee rule.","operationId":"v1_create_rate_card","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateCardCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicV1RateCardRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_create_rate_card","x-mcp-exposed":true,"x-public-path":"/v1/rate_cards","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"create","x-docs-order":10,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/rate_cards \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"name\": \"...\",\n  \"fulfillment_type\": \"delivery\",\n  \"provider\": \"fedex\",\n  \"currency\": \"AED\",\n  \"market_ids\": [\n    \"...\"\n  ],\n  \"timing\": {},\n  \"rate\": {\n    \"kind\": \"free\"\n  }\n}'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_create_rate_card\",\n    \"arguments\": {\n      \"name\": \"...\",\n      \"fulfillment_type\": \"delivery\",\n      \"provider\": \"fedex\",\n      \"currency\": \"AED\",\n      \"market_ids\": [\n        \"...\"\n      ],\n      \"timing\": {},\n      \"rate\": {\n        \"kind\": \"free\"\n      }\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_create_rate_card\",\n  arguments: {\n  \"name\": \"...\",\n  \"fulfillment_type\": \"delivery\",\n  \"provider\": \"fedex\",\n  \"currency\": \"AED\",\n  \"market_ids\": [\n    \"...\"\n  ],\n  \"timing\": {},\n  \"rate\": {\n    \"kind\": \"free\"\n  }\n},\n});"}]},"get":{"tags":["rate-cards"],"summary":"List fulfillment rate cards","description":"List priced fulfillment services by mode, market, status, or search.","operationId":"v1_list_rate_cards","parameters":[{"name":"fulfillment_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AgenticFulfillmentType"},{"type":"null"}],"title":"Fulfillment Type"}},{"name":"market_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Market Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/FulfillmentRateCardStatus"},{"type":"null"}],"title":"Status"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":255},{"type":"null"}],"title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicV1RateCardListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_list_rate_cards","x-mcp-exposed":true,"x-public-path":"/v1/rate_cards","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"list","x-docs-order":40,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/rate_cards \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_list_rate_cards\",\n    \"arguments\": {}\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_list_rate_cards\",\n  arguments: {},\n});"}]}},"/v1/markets/{code}":{"post":{"tags":["markets"],"summary":"Update a merchant market","description":"Update market currency, status, locales, or routing rules.","operationId":"v1_update_market","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicV1MarketRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_update_market","x-mcp-exposed":true,"x-public-path":"/v1/markets/{code}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"update","x-docs-order":20,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/markets/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_update_market\",\n    \"arguments\": {\n      \"code\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_update_market\",\n  arguments: {\n  \"code\": \"...\"\n},\n});"}]},"get":{"tags":["markets"],"summary":"Retrieve a merchant market","description":"Retrieve one merchant market by immutable merchant-scoped code.","operationId":"v1_get_market","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicV1MarketRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_get_market","x-mcp-exposed":true,"x-public-path":"/v1/markets/{code}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"retrieve","x-docs-order":30,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/markets/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_get_market\",\n    \"arguments\": {\n      \"code\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_get_market\",\n  arguments: {\n  \"code\": \"...\"\n},\n});"}]},"delete":{"tags":["markets"],"summary":"Delete a merchant market","description":"Delete an unpriced market that is not the merchant default.","operationId":"v1_delete_market","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_delete_market","x-mcp-exposed":true,"x-public-path":"/v1/markets/{code}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X DELETE https://api.openmerchant.dev/v1/markets/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_delete_market\",\n    \"arguments\": {\n      \"code\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_delete_market\",\n  arguments: {\n  \"code\": \"...\"\n},\n});"}]}},"/v1/policies/{policy_id}":{"post":{"tags":["policies"],"summary":"Update a policy","description":"Apply a partial update to a spending policy and create a new policy version.","operationId":"v1_update_policy","parameters":[{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPolicyLibraryRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_update_policy","x-mcp-exposed":true,"x-public-path":"/v1/policies/{policy_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"update","x-docs-order":20,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/policies/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_update_policy\",\n    \"arguments\": {\n      \"policy_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_update_policy\",\n  arguments: {\n  \"policy_id\": \"...\"\n},\n});"}]},"get":{"tags":["policies"],"summary":"Retrieve a policy","description":"Return one spending policy by ID when it belongs to the authenticated account.","operationId":"v1_get_policy","parameters":[{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPolicyLibraryRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_get_policy","x-mcp-exposed":true,"x-public-path":"/v1/policies/{policy_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"retrieve","x-docs-order":30,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/policies/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_get_policy\",\n    \"arguments\": {\n      \"policy_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_get_policy\",\n  arguments: {\n  \"policy_id\": \"...\"\n},\n});"}]}},"/v1/profiles/{profile_id}":{"post":{"tags":["profiles"],"summary":"Update a profile","description":"Update Profile information. Country and profile type cannot be changed after creation.","operationId":"v1_update_profile","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicProfilePatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicProfileRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_update_profile","x-mcp-exposed":true,"x-public-path":"/v1/profiles/{profile_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"update","x-docs-order":20,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/profiles/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_update_profile\",\n    \"arguments\": {\n      \"profile_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_update_profile\",\n  arguments: {\n  \"profile_id\": \"...\"\n},\n});"}]},"get":{"tags":["profiles"],"summary":"Retrieve a Profile","description":"Return one end-customer profile by ID.","operationId":"v1_get_profile","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicProfileRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_get_profile","x-mcp-exposed":true,"x-public-path":"/v1/profiles/{profile_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"retrieve","x-docs-order":30,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/profiles/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_get_profile\",\n    \"arguments\": {\n      \"profile_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_get_profile\",\n  arguments: {\n  \"profile_id\": \"...\"\n},\n});"}]}},"/v1/purchase_intents/{purchase_intent_id}":{"post":{"tags":["purchase-intents"],"summary":"Update a purchase intent","description":"Apply a partial update to a purchase intent, including approval after verification.","operationId":"v1_update_purchase_intent","parameters":[{"name":"purchase_intent_id","in":"path","required":true,"schema":{"type":"string","title":"Purchase Intent Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPurchaseIntentUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPurchaseIntentPollRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_update_purchase_intent","x-mcp-exposed":true,"x-public-path":"/v1/purchase_intents/{purchase_intent_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"update","x-docs-order":20,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/purchase_intents/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_update_purchase_intent\",\n    \"arguments\": {\n      \"purchase_intent_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_update_purchase_intent\",\n  arguments: {\n  \"purchase_intent_id\": \"...\"\n},\n});"}]},"get":{"tags":["purchase-intents"],"summary":"Retrieve a purchase intent","description":"Return the public lifecycle state for one purchase intent.","operationId":"v1_get_purchase_intent","parameters":[{"name":"purchase_intent_id","in":"path","required":true,"schema":{"type":"string","title":"Purchase Intent Id"}},{"name":"expand","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/PublicPurchaseIntentExpand"},"title":"Expand"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPurchaseIntentPollRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_get_purchase_intent","x-mcp-exposed":true,"x-public-path":"/v1/purchase_intents/{purchase_intent_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"retrieve","x-docs-order":30,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/purchase_intents/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_get_purchase_intent\",\n    \"arguments\": {\n      \"purchase_intent_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_get_purchase_intent\",\n  arguments: {\n  \"purchase_intent_id\": \"...\"\n},\n});"}]}},"/v1/quotes/{quote_id}":{"post":{"tags":["quotes"],"summary":"Update quote","description":"Re-run the immutable saved request in a new resolution generation. Requires a new Idempotency-Key. The body is optional: its only field is `price_proposal`, a new unit price to propose, which counts as one of the quote's limited proposals.","operationId":"v1_refresh_quote","parameters":[{"name":"quote_id","in":"path","required":true,"schema":{"type":"string","title":"Quote Id"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","title":"Idempotency-Key"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteRefreshRequest"}}}},"responses":{"200":{"description":"The authoritative quote resolution completed inline.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicV1QuoteRead"}}},"headers":{"Cache-Control":{"description":"Buyer quote responses are never shared-cacheable.","schema":{"type":"string","example":"private, no-store"}},"Location":{"description":"Canonical URL for retrieving the persisted quote.","schema":{"type":"string"}}}},"202":{"description":"The quote is persisted, but the responder deadline elapsed; poll the Location resource.","headers":{"Cache-Control":{"description":"Buyer quote responses are never shared-cacheable.","schema":{"type":"string","example":"private, no-store"}},"Location":{"description":"Canonical URL for retrieving the persisted quote.","schema":{"type":"string"}},"Retry-After":{"description":"Suggested polling delay in seconds after an indeterminate timeout.","schema":{"type":"integer","example":2}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicV1QuoteRead"}}}},"409":{"description":"Merchant/responder setup is incomplete, the idempotency key conflicts, or the quote state cannot be refreshed."},"422":{"description":"The merchant requires typed buyer input before repricing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicV1QuoteRead"}}}},"502":{"description":"The designated responder returned an invalid or terminal failure."},"404":{"description":"The quote is absent or outside the caller ownership scope."}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_refresh_quote","x-mcp-exposed":true,"x-public-path":"/v1/quotes/{quote_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"update","x-docs-order":20,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/quotes/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_refresh_quote\",\n    \"arguments\": {\n      \"quote_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_refresh_quote\",\n  arguments: {\n  \"quote_id\": \"...\"\n},\n});"}]},"get":{"tags":["quotes"],"summary":"Get quote","description":"Retrieve a quote only when its persisted requester account and mode match the authenticated secret key.","operationId":"v1_get_quote","parameters":[{"name":"quote_id","in":"path","required":true,"schema":{"type":"string","title":"Quote Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicV1QuoteRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_get_quote","x-mcp-exposed":true,"x-public-path":"/v1/quotes/{quote_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"retrieve","x-docs-order":30,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/quotes/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_get_quote\",\n    \"arguments\": {\n      \"quote_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_get_quote\",\n  arguments: {\n  \"quote_id\": \"...\"\n},\n});"}]}},"/v1/registry":{"get":{"tags":["registry"],"summary":"Search combined agentic registry","description":"Search for merchants that have agentic commerce protocols enabled and filter by category, payment method, or protocol. This endpoint combines our internal registry, MPP registry, and merchants with known UCP profiles. Authentication is deployment-configurable and optional by default. When anonymous access is enabled, anonymous requests always use live mode and see only globally published merchants. A valid secret API key or scoped chat actor retains its immutable account and test/live mode, including owner previews. X-Mode and mode query hints cannot override either scope.","operationId":"v1_list_registry","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":255},{"type":"null"}],"title":"Q"}},{"name":"protocol","in":"query","required":false,"schema":{"$ref":"#/components/schemas/RegistryProtocolFilter","default":"all"}},{"name":"commerce_category","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AgenticCatalogItemType"},{"type":"null"}],"title":"Commerce Category"}},{"name":"mpp_category","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}],"title":"Mpp Category"}},{"name":"payment_method","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/RegistryPaymentMethodFilter"}},{"type":"null"}],"description":"Normalized buyer-facing payment methods. Generic card handlers use card; provider-specific choices retain their own values. Repeated values use OR semantics.","title":"Payment Method"},"description":"Normalized buyer-facing payment methods. Generic card handlers use card; provider-specific choices retain their own values. Repeated values use OR semantics."},{"name":"payment_instrument","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/RegistryPaymentInstrument"}},{"type":"null"}],"description":"Granular instruments advertised beneath the selected payment handler, matched with OR semantics.","title":"Payment Instrument"},"description":"Granular instruments advertised beneath the selected payment handler, matched with OR semantics."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":8,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistryListResponse"}}}},"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"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"optional","x-operation-id":"v1_list_registry","x-mcp-exposed":true,"x-public-path":"/v1/registry","security":[{"ApiKeyBearer":[]},{}],"x-docs-kind":"list","x-docs-order":25,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/registry \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_list_registry\",\n    \"arguments\": {}\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_list_registry\",\n  arguments: {},\n});"}]}},"/v1/chats/{chat_id}":{"get":{"tags":["chats"],"summary":"Retrieve a Shopping Agent chat","description":"Retrieve one owned Shopping Agent conversation.","operationId":"v1_get_chat","parameters":[{"name":"chat_id","in":"path","required":true,"schema":{"type":"string","title":"Chat Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalChatThreadRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_get_chat","x-mcp-exposed":false,"x-public-path":"/v1/chats/{chat_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"retrieve","x-docs-order":30,"x-docs-depth":0,"x-docs-action-order":1000}},"/v1/onboarding_links/{onboarding_link_id}":{"get":{"tags":["onboarding-links"],"summary":"Retrieve an onboarding link","description":"Return a previously issued onboarding link by id. The user-facing URL is not included on read.","operationId":"v1_get_onboarding_link","parameters":[{"name":"onboarding_link_id","in":"path","required":true,"schema":{"type":"string","title":"Onboarding Link Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingLinkRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_get_onboarding_link","x-mcp-exposed":true,"x-public-path":"/v1/onboarding_links/{onboarding_link_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"retrieve","x-docs-order":30,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/onboarding_links/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_get_onboarding_link\",\n    \"arguments\": {\n      \"onboarding_link_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_get_onboarding_link\",\n  arguments: {\n  \"onboarding_link_id\": \"...\"\n},\n});"}]}},"/v1/promotions/{promotion_id}":{"get":{"tags":["promotions"],"summary":"Retrieve a promotion","description":"Retrieve one promotion owned by the credential’s merchant.","operationId":"v1_get_promotion","parameters":[{"name":"promotion_id","in":"path","required":true,"schema":{"type":"string","title":"Promotion Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicV1PromotionRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_get_promotion","x-mcp-exposed":true,"x-public-path":"/v1/promotions/{promotion_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"retrieve","x-docs-order":30,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/promotions/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_get_promotion\",\n    \"arguments\": {\n      \"promotion_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_get_promotion\",\n  arguments: {\n  \"promotion_id\": \"...\"\n},\n});"}]},"patch":{"tags":["promotions"],"summary":"Update a promotion","description":"Update a promotion; a supplied arms or targets list fully replaces the persisted one. The four caps cannot be cleared: an explicit null leaves one unchanged.","operationId":"v1_update_promotion","parameters":[{"name":"promotion_id","in":"path","required":true,"schema":{"type":"string","title":"Promotion Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromotionPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicV1PromotionRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_update_promotion","x-mcp-exposed":true,"x-public-path":"/v1/promotions/{promotion_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X PATCH https://api.openmerchant.dev/v1/promotions/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_update_promotion\",\n    \"arguments\": {\n      \"promotion_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_update_promotion\",\n  arguments: {\n  \"promotion_id\": \"...\"\n},\n});"}]},"delete":{"tags":["promotions"],"summary":"Delete a promotion","description":"Delete one promotion with its arms and targets.","operationId":"v1_delete_promotion","parameters":[{"name":"promotion_id","in":"path","required":true,"schema":{"type":"string","title":"Promotion Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_delete_promotion","x-mcp-exposed":true,"x-public-path":"/v1/promotions/{promotion_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X DELETE https://api.openmerchant.dev/v1/promotions/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_delete_promotion\",\n    \"arguments\": {\n      \"promotion_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_delete_promotion\",\n  arguments: {\n  \"promotion_id\": \"...\"\n},\n});"}]}},"/v1/rate_cards/{rate_card_id}":{"get":{"tags":["rate-cards"],"summary":"Retrieve a fulfillment rate card","description":"Retrieve one rate card owned by the credential’s merchant.","operationId":"v1_get_rate_card","parameters":[{"name":"rate_card_id","in":"path","required":true,"schema":{"type":"string","title":"Rate Card Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicV1RateCardRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_get_rate_card","x-mcp-exposed":true,"x-public-path":"/v1/rate_cards/{rate_card_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"retrieve","x-docs-order":30,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/rate_cards/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_get_rate_card\",\n    \"arguments\": {\n      \"rate_card_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_get_rate_card\",\n  arguments: {\n  \"rate_card_id\": \"...\"\n},\n});"}]},"patch":{"tags":["rate-cards"],"summary":"Update a fulfillment rate card","description":"Update a rate card; every supplied child list fully replaces the persisted one.","operationId":"v1_update_rate_card","parameters":[{"name":"rate_card_id","in":"path","required":true,"schema":{"type":"string","title":"Rate Card Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateCardPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicV1RateCardRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_update_rate_card","x-mcp-exposed":true,"x-public-path":"/v1/rate_cards/{rate_card_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X PATCH https://api.openmerchant.dev/v1/rate_cards/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_update_rate_card\",\n    \"arguments\": {\n      \"rate_card_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_update_rate_card\",\n  arguments: {\n  \"rate_card_id\": \"...\"\n},\n});"}]},"delete":{"tags":["rate-cards"],"summary":"Delete a fulfillment rate card","description":"Delete one rate card. Orders already placed keep the fulfillment charge they captured.","operationId":"v1_delete_rate_card","parameters":[{"name":"rate_card_id","in":"path","required":true,"schema":{"type":"string","title":"Rate Card Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_delete_rate_card","x-mcp-exposed":true,"x-public-path":"/v1/rate_cards/{rate_card_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X DELETE https://api.openmerchant.dev/v1/rate_cards/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_delete_rate_card\",\n    \"arguments\": {\n      \"rate_card_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_delete_rate_card\",\n  arguments: {\n  \"rate_card_id\": \"...\"\n},\n});"}]}},"/v1/registry/{entry_id}":{"get":{"tags":["registry"],"summary":"Get registry entry","description":"Retrieve protocol endpoints, payment provenance, and representative catalog items for one visible merchant. Authentication is deployment-configurable and optional by default. When anonymous access is enabled, anonymous requests always use live mode and see only globally published merchants. A valid secret API key or scoped chat actor retains its immutable account and test/live mode, including owner previews. X-Mode and mode query hints cannot override either scope.","operationId":"v1_get_registry_entry","parameters":[{"name":"entry_id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":255,"title":"Entry Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistryDetailResponse"}}}},"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"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"optional","x-operation-id":"v1_get_registry_entry","x-mcp-exposed":true,"x-public-path":"/v1/registry/{entry_id}","security":[{"ApiKeyBearer":[]},{}],"x-docs-kind":"retrieve","x-docs-order":30,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/registry/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_get_registry_entry\",\n    \"arguments\": {\n      \"entry_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_get_registry_entry\",\n  arguments: {\n  \"entry_id\": \"...\"\n},\n});"}]}},"/v1/merchant":{"get":{"tags":["merchant"],"summary":"Retrieve merchant setup requirements and status","description":"Read merchant identity, mode, setup requirements, blockers, and stored verification results. This read never runs checks, creates payments, or publishes the merchant.","operationId":"v1_get_merchant","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicMerchantRead"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_get_merchant","x-mcp-exposed":true,"x-public-path":"/v1/merchant","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"list","x-docs-order":40,"x-docs-depth":0,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/merchant \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_get_merchant\",\n    \"arguments\": {}\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_get_merchant\",\n  arguments: {},\n});"}]}},"/v1/profiles/{profile_id}/payment_methods":{"post":{"tags":["profiles"],"summary":"Create a profile PaymentMethod","description":"Add an existing card or issue a new card for a Profile. Existing Visa and Mastercard cards are eligible to be enrolled for agentic credentials.","operationId":"v1_create_profile_payment_method","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicProfilePaymentMethodCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicProfilePaymentMethodRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_create_profile_payment_method","x-mcp-exposed":true,"x-public-path":"/v1/profiles/{profile_id}/payment_methods","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"create","x-docs-order":10,"x-docs-depth":1,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/profiles/.../payment_methods \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"type\": \"card\",\n  \"card\": {\n    \"kind\": \"existing\"\n  }\n}'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_create_profile_payment_method\",\n    \"arguments\": {\n      \"profile_id\": \"...\",\n      \"type\": \"card\",\n      \"card\": {\n        \"kind\": \"existing\"\n      }\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_create_profile_payment_method\",\n  arguments: {\n  \"profile_id\": \"...\",\n  \"type\": \"card\",\n  \"card\": {\n    \"kind\": \"existing\"\n  }\n},\n});"}]},"get":{"tags":["profiles"],"summary":"List profile PaymentMethods","description":"Return active payment methods attached to a profile.","operationId":"v1_list_profile_payment_methods","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicProfilePaymentMethodListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_list_profile_payment_methods","x-mcp-exposed":true,"x-public-path":"/v1/profiles/{profile_id}/payment_methods","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"list","x-docs-order":40,"x-docs-depth":1,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/profiles/.../payment_methods \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_list_profile_payment_methods\",\n    \"arguments\": {\n      \"profile_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_list_profile_payment_methods\",\n  arguments: {\n  \"profile_id\": \"...\"\n},\n});"}]}},"/v1/profiles/{profile_id}/payment_methods/{payment_method_id}":{"post":{"tags":["profiles"],"summary":"Update a profile PaymentMethod","description":"You may update label, cardholder name, and billing address. To change other card details, add a new card.","operationId":"v1_update_profile_payment_method","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}},{"name":"payment_method_id","in":"path","required":true,"schema":{"type":"string","title":"Payment Method Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicProfilePaymentMethodPatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicProfilePaymentMethodRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_update_profile_payment_method","x-mcp-exposed":true,"x-public-path":"/v1/profiles/{profile_id}/payment_methods/{payment_method_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"update","x-docs-order":20,"x-docs-depth":1,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/profiles/.../payment_methods/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_update_profile_payment_method\",\n    \"arguments\": {\n      \"profile_id\": \"...\",\n      \"payment_method_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_update_profile_payment_method\",\n  arguments: {\n  \"profile_id\": \"...\",\n  \"payment_method_id\": \"...\"\n},\n});"}]},"get":{"tags":["profiles"],"summary":"Retrieve a profile PaymentMethod","description":"Return one active PaymentMethod attached to a profile.","operationId":"v1_get_profile_payment_method","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}},{"name":"payment_method_id","in":"path","required":true,"schema":{"type":"string","title":"Payment Method Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicProfilePaymentMethodRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_get_profile_payment_method","x-mcp-exposed":true,"x-public-path":"/v1/profiles/{profile_id}/payment_methods/{payment_method_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"retrieve","x-docs-order":30,"x-docs-depth":1,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/profiles/.../payment_methods/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_get_profile_payment_method\",\n    \"arguments\": {\n      \"profile_id\": \"...\",\n      \"payment_method_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_get_profile_payment_method\",\n  arguments: {\n  \"profile_id\": \"...\",\n  \"payment_method_id\": \"...\"\n},\n});"}]},"delete":{"tags":["profiles"],"summary":"Remove a profile PaymentMethod","description":"Detach a saved PaymentMethod from a profile and return the profile's remaining methods. Provider resources are reconciled first: an issued virtual card is cancelled and any agentic credential enrollment is withdrawn. The row is soft-deleted, so historical purchases keep resolving their payment method.","operationId":"v1_remove_profile_payment_method","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}},{"name":"payment_method_id","in":"path","required":true,"schema":{"type":"string","title":"Payment Method Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicProfilePaymentMethodListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_remove_profile_payment_method","x-mcp-exposed":true,"x-public-path":"/v1/profiles/{profile_id}/payment_methods/{payment_method_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":1,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X DELETE https://api.openmerchant.dev/v1/profiles/.../payment_methods/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_remove_profile_payment_method\",\n    \"arguments\": {\n      \"profile_id\": \"...\",\n      \"payment_method_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_remove_profile_payment_method\",\n  arguments: {\n  \"profile_id\": \"...\",\n  \"payment_method_id\": \"...\"\n},\n});"}]}},"/v1/profiles/{profile_id}/payment_methods/{payment_method_id}/budget":{"post":{"tags":["budgets"],"summary":"Create or update standing budget","description":"Create, amend, cancel, or verify the current standing credentials budget. The instruction id is derived from the PaymentMethod.","operationId":"v1_apply_payment_method_budget_command","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}},{"name":"payment_method_id","in":"path","required":true,"schema":{"type":"string","title":"Payment Method Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicStandingBudgetCommandRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicStandingBudgetRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_apply_payment_method_budget_command","x-mcp-exposed":true,"x-public-path":"/v1/profiles/{profile_id}/payment_methods/{payment_method_id}/budget","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":1,"x-docs-action-order":10,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/profiles/.../payment_methods/.../budget \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"action\": \"create\"\n}'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_apply_payment_method_budget_command\",\n    \"arguments\": {\n      \"profile_id\": \"...\",\n      \"payment_method_id\": \"...\",\n      \"action\": \"create\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_apply_payment_method_budget_command\",\n  arguments: {\n  \"profile_id\": \"...\",\n  \"payment_method_id\": \"...\",\n  \"action\": \"create\"\n},\n});"}]},"get":{"tags":["budgets"],"summary":"Retrieve a standing budget","description":"Return the current standing credentials budget for a profile PaymentMethod.","operationId":"v1_get_payment_method_budget","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}},{"name":"payment_method_id","in":"path","required":true,"schema":{"type":"string","title":"Payment Method Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicStandingBudgetRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_get_payment_method_budget","x-mcp-exposed":true,"x-public-path":"/v1/profiles/{profile_id}/payment_methods/{payment_method_id}/budget","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":1,"x-docs-action-order":20,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/profiles/.../payment_methods/.../budget \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_get_payment_method_budget\",\n    \"arguments\": {\n      \"profile_id\": \"...\",\n      \"payment_method_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_get_payment_method_budget\",\n  arguments: {\n  \"profile_id\": \"...\",\n  \"payment_method_id\": \"...\"\n},\n});"}]}},"/v1/profiles/{profile_id}/payment_methods/{payment_method_id}/credentials":{"post":{"tags":["budgets"],"summary":"Issue one-time card credentials","description":"Issue one-time scoped virtual card credentials against the PaymentMethod standing budget. A positive amount and matching currency are required. Optional merchant details lock the card to the merchant.","operationId":"v1_issue_payment_method_credentials","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}},{"name":"payment_method_id","in":"path","required":true,"schema":{"type":"string","title":"Payment Method Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialIssueRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialIssueResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_issue_payment_method_credentials","x-mcp-exposed":true,"x-public-path":"/v1/profiles/{profile_id}/payment_methods/{payment_method_id}/credentials","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":1,"x-docs-action-order":30,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/profiles/.../payment_methods/.../credentials \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"amount_cents\": 1,\n  \"currency_code\": \"AED\"\n}'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_issue_payment_method_credentials\",\n    \"arguments\": {\n      \"profile_id\": \"...\",\n      \"payment_method_id\": \"...\",\n      \"amount_cents\": 1,\n      \"currency_code\": \"AED\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_issue_payment_method_credentials\",\n  arguments: {\n  \"profile_id\": \"...\",\n  \"payment_method_id\": \"...\",\n  \"amount_cents\": 1,\n  \"currency_code\": \"AED\"\n},\n});"}]}},"/v1/profiles/{profile_id}/payment_methods/{payment_method_id}/budget/payment_verification_challenge":{"post":{"tags":["budgets"],"summary":"Create a standing budget verification challenge","description":"Start the cardholder passkey or redirect verification ceremony for the PaymentMethod standing budget. The instruction id is derived server-side.","operationId":"v1_create_standing_budget_verification_challenge","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}},{"name":"payment_method_id","in":"path","required":true,"schema":{"type":"string","title":"Payment Method Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandingBudgetVerificationChallengeRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_create_standing_budget_verification_challenge","x-mcp-exposed":true,"x-public-path":"/v1/profiles/{profile_id}/payment_methods/{payment_method_id}/budget/payment_verification_challenge","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":1,"x-docs-action-order":40,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/profiles/.../payment_methods/.../budget/payment_verification_challenge \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_create_standing_budget_verification_challenge\",\n    \"arguments\": {\n      \"profile_id\": \"...\",\n      \"payment_method_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_create_standing_budget_verification_challenge\",\n  arguments: {\n  \"profile_id\": \"...\",\n  \"payment_method_id\": \"...\"\n},\n});"}]}},"/v1/profiles/{profile_id}/payment_methods/{payment_method_id}/charge":{"post":{"tags":["budgets"],"summary":"Simulate a charge against a standing budget (test mode)","description":"Test mode only. Record a simulated draw against the PaymentMethod standing budget and decrement the remaining allowance by the charge amount. Optional merchant and item details are recorded on the draw. Returns 400 when the charge exceeds the remaining standing budget.","operationId":"v1_simulate_payment_method_charge","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}},{"name":"payment_method_id","in":"path","required":true,"schema":{"type":"string","title":"Payment Method Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialChargeRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialChargeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_simulate_payment_method_charge","x-mcp-exposed":true,"x-public-path":"/v1/profiles/{profile_id}/payment_methods/{payment_method_id}/charge","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":1,"x-docs-action-order":50,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/profiles/.../payment_methods/.../charge \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"amount_cents\": 1,\n  \"currency_code\": \"AED\"\n}'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_simulate_payment_method_charge\",\n    \"arguments\": {\n      \"profile_id\": \"...\",\n      \"payment_method_id\": \"...\",\n      \"amount_cents\": 1,\n      \"currency_code\": \"AED\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_simulate_payment_method_charge\",\n  arguments: {\n  \"profile_id\": \"...\",\n  \"payment_method_id\": \"...\",\n  \"amount_cents\": 1,\n  \"currency_code\": \"AED\"\n},\n});"}]}},"/v1/profiles/{profile_id}/payment_methods/{payment_method_id}/shared_payment_tokens":{"post":{"tags":["shared-payment-tokens"],"summary":"Create a Shared Payment Token","description":"Reserve card budget and issue a Stripe Shared Payment Token scoped to one validated seller, amount, currency, and expiry. Requires Idempotency-Key.","operationId":"v1_create_shared_payment_token","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}},{"name":"payment_method_id","in":"path","required":true,"schema":{"type":"string","title":"Payment Method Id"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharedPaymentTokenCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharedPaymentTokenCreateResponse"}}}},"202":{"description":"Stripe create outcome is ambiguous; reconciliation is pending.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharedPaymentTokenCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_create_shared_payment_token","x-mcp-exposed":true,"x-public-path":"/v1/profiles/{profile_id}/payment_methods/{payment_method_id}/shared_payment_tokens","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":1,"x-docs-action-order":60,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/profiles/.../payment_methods/.../shared_payment_tokens \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"seller\": {\n    \"type\": \"network_business_profile\"\n  },\n  \"usage_limits\": {\n    \"max_amount\": 1,\n    \"currency\": \"AED\"\n  }\n}'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_create_shared_payment_token\",\n    \"arguments\": {\n      \"profile_id\": \"...\",\n      \"payment_method_id\": \"...\",\n      \"seller\": {\n        \"type\": \"network_business_profile\"\n      },\n      \"usage_limits\": {\n        \"max_amount\": 1,\n        \"currency\": \"AED\"\n      }\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_create_shared_payment_token\",\n  arguments: {\n  \"profile_id\": \"...\",\n  \"payment_method_id\": \"...\",\n  \"seller\": {\n    \"type\": \"network_business_profile\"\n  },\n  \"usage_limits\": {\n    \"max_amount\": 1,\n    \"currency\": \"AED\"\n  }\n},\n});"}]}},"/v1/profiles/{profile_id}/payment_methods/{payment_method_id}/shared_payment_tokens/{issuance_id}/refresh":{"post":{"tags":["shared-payment-tokens"],"summary":"Refresh a Shared Payment Token","description":"Reconcile Stripe status, captured usage, and any Stripe.js next action. The bearer token is never returned by refresh.","operationId":"v1_refresh_shared_payment_token","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}},{"name":"payment_method_id","in":"path","required":true,"schema":{"type":"string","title":"Payment Method Id"}},{"name":"issuance_id","in":"path","required":true,"schema":{"type":"string","title":"Issuance Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharedPaymentTokenRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_refresh_shared_payment_token","x-mcp-exposed":true,"x-public-path":"/v1/profiles/{profile_id}/payment_methods/{payment_method_id}/shared_payment_tokens/{issuance_id}/refresh","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":1,"x-docs-action-order":70,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/profiles/.../payment_methods/.../shared_payment_tokens/.../refresh \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_refresh_shared_payment_token\",\n    \"arguments\": {\n      \"profile_id\": \"...\",\n      \"payment_method_id\": \"...\",\n      \"issuance_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_refresh_shared_payment_token\",\n  arguments: {\n  \"profile_id\": \"...\",\n  \"payment_method_id\": \"...\",\n  \"issuance_id\": \"...\"\n},\n});"}]}},"/v1/profiles/{profile_id}/payment_methods/{payment_method_id}/shared_payment_tokens/{issuance_id}/revoke":{"post":{"tags":["shared-payment-tokens"],"summary":"Revoke a Shared Payment Token","description":"Permanently revoke the Stripe token and release its unused local budget reservation. Previously captured usage remains in the spend ledger.","operationId":"v1_revoke_shared_payment_token","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}},{"name":"payment_method_id","in":"path","required":true,"schema":{"type":"string","title":"Payment Method Id"}},{"name":"issuance_id","in":"path","required":true,"schema":{"type":"string","title":"Issuance Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharedPaymentTokenRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_revoke_shared_payment_token","x-mcp-exposed":true,"x-public-path":"/v1/profiles/{profile_id}/payment_methods/{payment_method_id}/shared_payment_tokens/{issuance_id}/revoke","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":1,"x-docs-action-order":80,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/profiles/.../payment_methods/.../shared_payment_tokens/.../revoke \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_revoke_shared_payment_token\",\n    \"arguments\": {\n      \"profile_id\": \"...\",\n      \"payment_method_id\": \"...\",\n      \"issuance_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_revoke_shared_payment_token\",\n  arguments: {\n  \"profile_id\": \"...\",\n  \"payment_method_id\": \"...\",\n  \"issuance_id\": \"...\"\n},\n});"}]}},"/.well-known/ucp":{"get":{"tags":["agent-identity"],"summary":"Retrieve OpenMerchant’s UCP platform profile","description":"Return OpenMerchant’s public UCP platform identity at the newest UCP release it speaks. Merchants use its capability declarations and ES256 public keys to negotiate catalog or checkout support and verify signed UCP requests. This endpoint is intentionally unauthenticated.","operationId":"get_ucp_platform_profile","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UcpPlatformProfileDocument"}}}}},"x-api-audience":"public_unauthenticated","x-api-authentication":"none","x-operation-id":"get_ucp_platform_profile","x-mcp-exposed":true,"x-public-path":"/.well-known/ucp","security":[],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000}},"/.well-known/ucp/{version}":{"get":{"tags":["agent-identity"],"summary":"Retrieve OpenMerchant’s UCP platform profile at one release","description":"Return OpenMerchant’s public UCP platform identity at one older UCP release it still speaks. The buyer names this profile in UCP-Agent when a merchant supports only that release. This endpoint is intentionally unauthenticated.","operationId":"get_ucp_platform_release_profile","parameters":[{"name":"version","in":"path","required":true,"schema":{"type":"string","title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UcpPlatformProfileDocument"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_unauthenticated","x-api-authentication":"none","x-operation-id":"get_ucp_platform_release_profile","x-mcp-exposed":true,"x-public-path":"/.well-known/ucp/{version}","security":[],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000}},"/api/webhooks/ucp/orders":{"post":{"tags":["orders"],"summary":"Receive a signed UCP Order snapshot","description":"Verify a business-signed UCP Order snapshot, durably audit its exact body, and queue non-financial purchase reconciliation.","operationId":"receive_ucp_order_webhook","requestBody":{"content":{"application/json":{"schema":{"$defs":{"CountryCode":{"type":"string","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","description":"ISO 3166-1 alpha-2 country code used by profile identity/address records."},"CurrencyCode":{"type":"string","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","description":"ISO 4217 currency codes accepted by persisted monetary surfaces."},"UcpAvailableInstrument":{"properties":{"additional_fields":{"additionalProperties":true,"type":"object","title":"Additional Fields"},"type":{"type":"string","title":"Type"},"constraints":{"additionalProperties":true,"type":"object","title":"Constraints"}},"additionalProperties":true,"type":"object","required":["type"],"title":"UcpAvailableInstrument","description":"Instrument family a UCP payment handler can accept."},"UcpCapabilityDeclaration":{"properties":{"additional_fields":{"additionalProperties":true,"type":"object","title":"Additional Fields"},"version":{"type":"string","title":"Version"},"spec":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Spec"},"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"config":{"additionalProperties":true,"type":"object","title":"Config"},"extends":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Extends"},"requires":{"anyOf":[{"$ref":"#/$defs/UcpCapabilityRequirements"},{"type":"null"}]}},"additionalProperties":true,"type":"object","required":["version"],"title":"UcpCapabilityDeclaration","description":"One versioned UCP capability or vendor extension declaration."},"UcpCapabilityRequirements":{"properties":{"additional_fields":{"additionalProperties":true,"type":"object","title":"Additional Fields"},"protocol":{"anyOf":[{"$ref":"#/$defs/UcpVersionRequirement"},{"type":"null"}]},"capabilities":{"additionalProperties":{"$ref":"#/$defs/UcpVersionRequirement"},"type":"object","title":"Capabilities"}},"additionalProperties":true,"type":"object","title":"UcpCapabilityRequirements","description":"Protocol and parent-capability requirements for one declaration."},"UcpFulfillmentDestination":{"properties":{"additional_fields":{"additionalProperties":true,"type":"object","title":"Additional Fields"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Number"},"street_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Street Address"},"extended_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Extended Address"},"address_locality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Locality"},"address_region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Region"},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal Code"},"address_country":{"anyOf":[{"$ref":"#/$defs/CountryCode"},{"type":"string"},{"type":"null"}],"title":"Address Country"}},"additionalProperties":true,"type":"object","title":"UcpFulfillmentDestination","description":"Postal address accepted from or sent to the fulfillment extension.\n\nThe base UCP postal-address schema makes every address component optional.\nOpenMerchant still validates all required ship-to fields before constructing an\noutbound destination; keeping the response model permissive allows partial\nbilling addresses and merchant-managed pickup destinations to round-trip."},"UcpFulfillmentMethodType":{"type":"string","enum":["shipping","pickup","digital"],"title":"UcpFulfillmentMethodType","description":"Fulfillment method vocabulary supported by UCP checkout."},"UcpItemReference":{"properties":{"additional_fields":{"additionalProperties":true,"type":"object","title":"Additional Fields"},"id":{"type":"string","title":"Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"price":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Price"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"}},"additionalProperties":true,"type":"object","required":["id"],"title":"UcpItemReference","description":"Merchant-recognized product-variant identifier."},"UcpMessage":{"properties":{"additional_fields":{"additionalProperties":true,"type":"object","title":"Additional Fields"},"type":{"$ref":"#/$defs/UcpMessageType"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"content":{"type":"string","title":"Content"},"severity":{"anyOf":[{"$ref":"#/$defs/UcpMessageSeverity"},{"type":"null"}]}},"additionalProperties":true,"type":"object","required":["type","content"],"title":"UcpMessage","description":"Typed checkout or protocol message prescribing a recovery action."},"UcpMessageSeverity":{"type":"string","enum":["recoverable","requires_buyer_input","requires_buyer_review","unrecoverable"],"title":"UcpMessageSeverity","description":"Recovery action prescribed by a UCP checkout message."},"UcpMessageType":{"type":"string","enum":["error","warning","info"],"title":"UcpMessageType","description":"Message types returned on UCP resources and protocol errors."},"UcpOrderAdjustment":{"properties":{"additional_fields":{"additionalProperties":true,"type":"object","title":"Additional Fields"},"id":{"type":"string","title":"Id"},"type":{"type":"string","title":"Type"},"occurred_at":{"type":"string","format":"date-time","title":"Occurred At"},"status":{"$ref":"#/$defs/UcpOrderAdjustmentStatus"},"line_items":{"items":{"$ref":"#/$defs/UcpOrderAdjustmentLine"},"type":"array","title":"Line Items"},"totals":{"items":{"$ref":"#/$defs/UcpTotal"},"type":"array","title":"Totals"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"additionalProperties":true,"type":"object","required":["id","type","occurred_at","status"],"title":"UcpOrderAdjustment","description":"Post-order refund, return, cancellation, dispute, or other adjustment."},"UcpOrderAdjustmentLine":{"properties":{"additional_fields":{"additionalProperties":true,"type":"object","title":"Additional Fields"},"id":{"type":"string","title":"Id"},"quantity":{"type":"integer","title":"Quantity"}},"additionalProperties":true,"type":"object","required":["id","quantity"],"title":"UcpOrderAdjustmentLine","description":"Signed line quantity added or removed by a post-order adjustment."},"UcpOrderAdjustmentStatus":{"type":"string","enum":["pending","completed","failed"],"title":"UcpOrderAdjustmentStatus","description":"Protocol-defined lifecycle of one post-order adjustment."},"UcpOrderAttribution":{"properties":{"additional_fields":{"additionalProperties":true,"type":"object","title":"Additional Fields"}},"additionalProperties":true,"type":"object","title":"UcpOrderAttribution","description":"Extensible attribution snapshot copied from the originating checkout."},"UcpOrderExpectation":{"properties":{"additional_fields":{"additionalProperties":true,"type":"object","title":"Additional Fields"},"id":{"type":"string","title":"Id"},"line_items":{"items":{"$ref":"#/$defs/UcpOrderFulfillmentLine"},"type":"array","title":"Line Items"},"method_type":{"$ref":"#/$defs/UcpFulfillmentMethodType"},"destination":{"$ref":"#/$defs/UcpFulfillmentDestination"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"fulfillable_on":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fulfillable On"}},"additionalProperties":true,"type":"object","required":["id","line_items","method_type","destination"],"title":"UcpOrderExpectation","description":"Buyer-facing expectation for how an order subset will arrive."},"UcpOrderFulfillment":{"properties":{"additional_fields":{"additionalProperties":true,"type":"object","title":"Additional Fields"},"expectations":{"items":{"$ref":"#/$defs/UcpOrderExpectation"},"type":"array","title":"Expectations"},"events":{"items":{"$ref":"#/$defs/UcpOrderFulfillmentEvent"},"type":"array","title":"Events"}},"additionalProperties":true,"type":"object","title":"UcpOrderFulfillment","description":"Current expectations plus append-only fulfillment events."},"UcpOrderFulfillmentEvent":{"properties":{"additional_fields":{"additionalProperties":true,"type":"object","title":"Additional Fields"},"id":{"type":"string","title":"Id"},"occurred_at":{"type":"string","format":"date-time","title":"Occurred At"},"type":{"type":"string","title":"Type"},"line_items":{"items":{"$ref":"#/$defs/UcpOrderFulfillmentLine"},"type":"array","title":"Line Items"},"tracking_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tracking Number"},"tracking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tracking Url"},"carrier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Carrier"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"additionalProperties":true,"type":"object","required":["id","occurred_at","type","line_items"],"title":"UcpOrderFulfillmentEvent","description":"Append-only fulfillment event supplied by the merchant.\n\nThe protocol deliberately leaves ``type`` open for carrier- and\nmerchant-specific lifecycle values, so it remains a validated string\nrather than a closed enum."},"UcpOrderFulfillmentLine":{"properties":{"additional_fields":{"additionalProperties":true,"type":"object","title":"Additional Fields"},"id":{"type":"string","title":"Id"},"quantity":{"type":"integer","minimum":1.0,"title":"Quantity"}},"additionalProperties":true,"type":"object","required":["id","quantity"],"title":"UcpOrderFulfillmentLine","description":"Line quantity referenced by an expectation or fulfillment event."},"UcpOrderLine":{"properties":{"additional_fields":{"additionalProperties":true,"type":"object","title":"Additional Fields"},"id":{"type":"string","title":"Id"},"item":{"$ref":"#/$defs/UcpItemReference"},"quantity":{"$ref":"#/$defs/UcpOrderQuantity"},"totals":{"items":{"$ref":"#/$defs/UcpTotal"},"type":"array","title":"Totals"},"status":{"$ref":"#/$defs/UcpOrderLineStatus"},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Id"}},"additionalProperties":true,"type":"object","required":["id","item","quantity","status"],"title":"UcpOrderLine","description":"Current post-purchase state of one merchant order line."},"UcpOrderLineStatus":{"type":"string","enum":["processing","partial","fulfilled","removed"],"title":"UcpOrderLineStatus","description":"Protocol-defined derived status of one UCP order line."},"UcpOrderQuantity":{"properties":{"additional_fields":{"additionalProperties":true,"type":"object","title":"Additional Fields"},"original":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Original"},"total":{"type":"integer","minimum":0.0,"title":"Total"},"fulfilled":{"type":"integer","minimum":0.0,"title":"Fulfilled"}},"additionalProperties":true,"type":"object","required":["total","fulfilled"],"title":"UcpOrderQuantity","description":"Original, active, and fulfilled quantities for one order line."},"UcpPaymentHandler":{"properties":{"additional_fields":{"additionalProperties":true,"type":"object","title":"Additional Fields"},"id":{"type":"string","title":"Id"},"version":{"type":"string","title":"Version"},"spec":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Spec"},"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema"},"available_instruments":{"items":{"$ref":"#/$defs/UcpAvailableInstrument"},"type":"array","title":"Available Instruments"},"config":{"additionalProperties":true,"type":"object","title":"Config"}},"additionalProperties":true,"type":"object","required":["id","version"],"title":"UcpPaymentHandler","description":"A tokenized payment handler advertised by a UCP participant."},"UcpProtocolProfile":{"properties":{"additional_fields":{"additionalProperties":true,"type":"object","title":"Additional Fields"},"version":{"type":"string","title":"Version"},"supported_versions":{"additionalProperties":{"type":"string"},"type":"object","title":"Supported Versions"},"services":{"additionalProperties":{"items":{"$ref":"#/$defs/UcpServiceDeclaration"},"type":"array"},"type":"object","title":"Services"},"capabilities":{"additionalProperties":{"items":{"$ref":"#/$defs/UcpCapabilityDeclaration"},"type":"array"},"type":"object","title":"Capabilities"},"payment_handlers":{"additionalProperties":{"items":{"$ref":"#/$defs/UcpPaymentHandler"},"type":"array"},"type":"object","title":"Payment Handlers"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"additionalProperties":true,"type":"object","required":["version"],"title":"UcpProtocolProfile","description":"The nested ``ucp`` object in a discovery profile or response."},"UcpServiceDeclaration":{"properties":{"additional_fields":{"additionalProperties":true,"type":"object","title":"Additional Fields"},"version":{"type":"string","title":"Version"},"spec":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Spec"},"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema"},"transport":{"$ref":"#/$defs/UcpTransport"},"endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Endpoint"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"config":{"additionalProperties":true,"type":"object","title":"Config"}},"additionalProperties":true,"type":"object","required":["version","transport"],"title":"UcpServiceDeclaration","description":"One transport binding in a UCP business or platform profile."},"UcpTotal":{"properties":{"additional_fields":{"additionalProperties":true,"type":"object","title":"Additional Fields"},"type":{"type":"string","title":"Type"},"amount":{"type":"integer","title":"Amount"},"display_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Text"}},"additionalProperties":true,"type":"object","required":["type","amount"],"title":"UcpTotal","description":"One authoritative minor-unit total returned by the merchant."},"UcpTransport":{"type":"string","enum":["mcp","rest","a2a","embedded"],"title":"UcpTransport","description":"Transport bindings understood by the UCP discovery client."},"UcpVersionRequirement":{"properties":{"additional_fields":{"additionalProperties":true,"type":"object","title":"Additional Fields"},"min":{"type":"string","title":"Min"},"max":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Max"}},"additionalProperties":true,"type":"object","required":["min"],"title":"UcpVersionRequirement","description":"Inclusive version range declared by a UCP extension schema."}},"properties":{"additional_fields":{"additionalProperties":true,"type":"object","title":"Additional Fields"},"ucp":{"$ref":"#/$defs/UcpProtocolProfile"},"id":{"type":"string","title":"Id"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"checkout_id":{"type":"string","title":"Checkout Id"},"permalink_url":{"type":"string","title":"Permalink Url"},"line_items":{"items":{"$ref":"#/$defs/UcpOrderLine"},"type":"array","title":"Line Items"},"fulfillment":{"$ref":"#/$defs/UcpOrderFulfillment"},"adjustments":{"items":{"$ref":"#/$defs/UcpOrderAdjustment"},"type":"array","title":"Adjustments"},"currency":{"anyOf":[{"$ref":"#/$defs/CurrencyCode"},{"type":"string"}],"title":"Currency"},"totals":{"items":{"$ref":"#/$defs/UcpTotal"},"type":"array","title":"Totals"},"messages":{"items":{"$ref":"#/$defs/UcpMessage"},"type":"array","title":"Messages"},"attribution":{"anyOf":[{"$ref":"#/$defs/UcpOrderAttribution"},{"type":"null"}]}},"additionalProperties":true,"type":"object","required":["ucp","id","checkout_id","permalink_url","line_items","fulfillment","currency","totals"],"title":"UcpOrder","description":"Full UCP Order snapshot returned synchronously or by webhook."}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UcpOrderWebhookReceipt"}}}}},"x-api-audience":"public_unauthenticated","x-api-authentication":"none","x-operation-id":"receive_ucp_order_webhook","x-mcp-exposed":false,"x-public-path":"/api/webhooks/ucp/orders","security":[],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000}},"/mpp/.well-known/mpp.json":{"get":{"tags":["mpp-public","mpp-identity"],"summary":"Retrieve OpenMerchant's MPP platform identity","description":"Return OpenMerchant's public MPP service manifest. Agents use its canonical service URL, payment-method declarations, documentation links, commerce templates, and published custom APIs to discover agentic merchants. This endpoint is intentionally unauthenticated.","operationId":"get_mpp_platform_identity","parameters":[{"name":"download","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Download"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MppAggregateService"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_unauthenticated","x-api-authentication":"none","x-operation-id":"get_mpp_platform_identity","x-mcp-exposed":true,"x-public-path":"/mpp/.well-known/mpp.json","security":[],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000}},"/ucp/payment_handlers/stripe_spt.schema.json":{"get":{"tags":["agent-identity"],"summary":"Retrieve OpenMerchant’s UCP Stripe SPT handler schema","description":"Deprecated. Return the public JSON Schema for the proprietary `com.procurapay.api.stripe_spt` handler, which Stripe's `com.stripe.payments` handler replaces. Retained only while checkouts quoted the old namespace are still completable; it will be removed with that grace window. This endpoint is intentionally unauthenticated.","operationId":"get_ucp_stripe_spt_handler_schema","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UcpStripeSptHandlerSchema"}}}}},"x-api-audience":"public_unauthenticated","x-api-authentication":"none","x-operation-id":"get_ucp_stripe_spt_handler_schema","x-mcp-exposed":true,"x-public-path":"/ucp/payment_handlers/stripe_spt.schema.json","security":[],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000}},"/v1/catalog/impressions":{"post":{"tags":["catalog"],"summary":"Confirm rendered catalog cards","description":"Idempotently confirm one to six catalog cards after a platform has durably committed their presentation. Each line must carry the high-entropy attribution ID returned with the catalog response and the exact response-facing item and optional variant identifiers. Each item and exact variant can increment confirmed analytics only once for its originating catalog response, even across distinct presentation IDs. Attribution IDs expire at the request-context retention deadline (90 days by default).","operationId":"v1_confirm_catalog_impressions","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmedImpressionsCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmedImpressionsRead"}}}},"429":{"description":"A shared request rate limit was exceeded.","headers":{"Retry-After":{"description":"Seconds until this caller may retry.","schema":{"type":"integer","minimum":1.0}},"X-RateLimit-Limit":{"description":"Request limit for the exhausted window.","schema":{"type":"integer","minimum":1.0}},"X-RateLimit-Window":{"description":"Length of the exhausted window in seconds.","schema":{"type":"integer","minimum":1.0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitExceededResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"none","x-operation-id":"v1_confirm_catalog_impressions","x-mcp-exposed":false,"x-public-path":"/v1/catalog/impressions","security":[],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000}},"/v1/catalog/lookup":{"post":{"tags":["catalog"],"summary":"Look up catalog products","description":"Resolve one to ten product, variant, SKU, handle, or URL identifiers under one exact merchant id, slug, or domain. Partial matches return 200 with typed correlations and missing_ids. Authentication is deployment-configurable and optional by default. When anonymous access is enabled, anonymous requests always use live mode and see only globally published sources. A valid secret API key or scoped chat actor retains its immutable account and test/live mode. X-Mode and mode query hints cannot override either scope.","operationId":"v1_lookup_catalog_products","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1CatalogLookupRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1CatalogLookupResponse"}}}},"429":{"description":"A shared request rate limit was exceeded.","headers":{"Retry-After":{"description":"Seconds until this caller may retry.","schema":{"type":"integer","minimum":1.0}},"X-RateLimit-Limit":{"description":"Request limit for the exhausted window.","schema":{"type":"integer","minimum":1.0}},"X-RateLimit-Window":{"description":"Length of the exhausted window in seconds.","schema":{"type":"integer","minimum":1.0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitExceededResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"optional","x-operation-id":"v1_lookup_catalog_products","x-mcp-exposed":true,"x-public-path":"/v1/catalog/lookup","security":[{"ApiKeyBearer":[]},{}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/catalog/lookup \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"ids\": [\n    \"...\"\n  ],\n  \"merchant\": {}\n}'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_lookup_catalog_products\",\n    \"arguments\": {\n      \"ids\": [\n        \"...\"\n      ],\n      \"merchant\": {}\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_lookup_catalog_products\",\n  arguments: {\n  \"ids\": [\n    \"...\"\n  ],\n  \"merchant\": {}\n},\n});"}]}},"/v1/catalog/product":{"post":{"tags":["catalog"],"summary":"Get a catalog product","description":"Retrieve one complete normalized product under an exact merchant id, slug, or domain using a product, variant, SKU, handle, or URL identifier. Authentication is deployment-configurable and optional by default. When anonymous access is enabled, anonymous requests always use live mode and see only globally published sources. A valid secret API key or scoped chat actor retains its immutable account and test/live mode. X-Mode and mode query hints cannot override either scope.","operationId":"v1_get_catalog_product","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1CatalogProductRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1CatalogProductResponse"}}}},"429":{"description":"A shared request rate limit was exceeded.","headers":{"Retry-After":{"description":"Seconds until this caller may retry.","schema":{"type":"integer","minimum":1.0}},"X-RateLimit-Limit":{"description":"Request limit for the exhausted window.","schema":{"type":"integer","minimum":1.0}},"X-RateLimit-Window":{"description":"Length of the exhausted window in seconds.","schema":{"type":"integer","minimum":1.0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitExceededResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"optional","x-operation-id":"v1_get_catalog_product","x-mcp-exposed":true,"x-public-path":"/v1/catalog/product","security":[{"ApiKeyBearer":[]},{}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/catalog/product \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"id\": \"om_agci_4c1a\",\n  \"merchant\": {}\n}'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_get_catalog_product\",\n    \"arguments\": {\n      \"id\": \"om_agci_4c1a\",\n      \"merchant\": {}\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_get_catalog_product\",\n  arguments: {\n  \"id\": \"om_agci_4c1a\",\n  \"merchant\": {}\n},\n});"}]}},"/v1/chats/{chat_id}/mcp_session":{"post":{"tags":["chats"],"summary":"Issue a Shopping Agent MCP session","description":"Issue or reconstruct a short-lived server-only credential bound to this thread and its Profile.","operationId":"v1_create_chat_mcp_session","parameters":[{"name":"chat_id","in":"path","required":true,"schema":{"type":"string","title":"Chat Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalChatActorSessionRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_create_chat_mcp_session","x-mcp-exposed":false,"x-public-path":"/v1/chats/{chat_id}/mcp_session","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000}},"/v1/chats/{chat_id}/messages":{"post":{"tags":["chats"],"summary":"Append a Shopping Agent message","description":"Idempotently append one completed, validated UI message.","operationId":"v1_append_chat_message","parameters":[{"name":"chat_id","in":"path","required":true,"schema":{"type":"string","title":"Chat Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalChatMessageCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalChatMessageRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_append_chat_message","x-mcp-exposed":false,"x-public-path":"/v1/chats/{chat_id}/messages","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000},"get":{"tags":["chats"],"summary":"List Shopping Agent messages","description":"Restore a chronological page of validated UI messages.","operationId":"v1_list_chat_messages","parameters":[{"name":"chat_id","in":"path","required":true,"schema":{"type":"string","title":"Chat Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalChatMessageListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_list_chat_messages","x-mcp-exposed":false,"x-public-path":"/v1/chats/{chat_id}/messages","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000}},"/v1/markets/{code}/make_default":{"post":{"tags":["markets"],"summary":"Make a merchant market default","description":"Make one active market the fallback for buyer catalog requests.","operationId":"v1_make_default_market","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicV1MarketRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_make_default_market","x-mcp-exposed":false,"x-public-path":"/v1/markets/{code}/make_default","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000}},"/v1/merchant/catalog":{"post":{"tags":["merchant"],"summary":"Create a catalog item","description":"Create a product, service, or travel booking under the secret API key's account- and mode-owned merchant. Pricing is explicit: item_type, is_available, pricing_model, prices, and fulfillment_options are required. Each price names its merchant market. Configure finite axes with variant_options and optionally generate their Cartesian-product variants in the same request.","operationId":"v1_create_catalog_item","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicCatalogItemCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicCatalogItemRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_create_catalog_item","x-mcp-exposed":true,"x-public-path":"/v1/merchant/catalog","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/merchant/catalog \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"item_type\": \"product\",\n  \"name\": \"...\",\n  \"prices\": [\n    {\n      \"market\": \"...\"\n    }\n  ],\n  \"pricing_model\": \"per_unit\",\n  \"is_available\": true,\n  \"fulfillment_options\": [\n    {\n      \"fulfillment_type\": \"delivery\"\n    }\n  ]\n}'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_create_catalog_item\",\n    \"arguments\": {\n      \"item_type\": \"product\",\n      \"name\": \"...\",\n      \"prices\": [\n        {\n          \"market\": \"...\"\n        }\n      ],\n      \"pricing_model\": \"per_unit\",\n      \"is_available\": true,\n      \"fulfillment_options\": [\n        {\n          \"fulfillment_type\": \"delivery\"\n        }\n      ]\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_create_catalog_item\",\n  arguments: {\n  \"item_type\": \"product\",\n  \"name\": \"...\",\n  \"prices\": [\n    {\n      \"market\": \"...\"\n    }\n  ],\n  \"pricing_model\": \"per_unit\",\n  \"is_available\": true,\n  \"fulfillment_options\": [\n    {\n      \"fulfillment_type\": \"delivery\"\n    }\n  ]\n},\n});"}]}},"/v1/merchant/catalog/{item_id}":{"post":{"tags":["merchant"],"summary":"Update a catalog item","description":"Partially update a non-SaaS catalog item. Nested requirements and inventory objects patch only members explicitly supplied. Price changes must supply pricing_model and prices together; variant_options and variants are atomic aggregate replacements.","operationId":"v1_update_catalog_item","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicCatalogItemPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicCatalogItemRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_update_catalog_item","x-mcp-exposed":true,"x-public-path":"/v1/merchant/catalog/{item_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/merchant/catalog/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_update_catalog_item\",\n    \"arguments\": {\n      \"item_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_update_catalog_item\",\n  arguments: {\n  \"item_id\": \"...\"\n},\n});"}]},"get":{"tags":["merchant"],"summary":"Retrieve a catalog item","description":"Return a non-SaaS catalog item owned by the secret API key's account and mode, including archived state.","operationId":"v1_get_catalog_item","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}},{"name":"market","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":32},{"type":"null"}],"description":"Explicit merchant market code.","title":"Market"},"description":"Explicit merchant market code."},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/CountryCode"},{"type":"null"}],"description":"ISO 3166-1 buyer country used for market routing.","title":"Country"},"description":"ISO 3166-1 buyer country used for market routing."},{"name":"region","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":8},{"type":"null"}],"description":"Buyer country subdivision code.","title":"Region"},"description":"Buyer country subdivision code."},{"name":"postal_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"description":"Buyer postal code used for prefix routing.","title":"Postal Code"},"description":"Buyer postal code used for prefix routing."},{"name":"currency","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}],"description":"Requested buyer presentment currency.","title":"Currency"},"description":"Requested buyer presentment currency."},{"name":"locale","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/LocaleCode"},{"type":"null"}],"description":"Requested catalog-copy locale.","title":"Locale"},"description":"Requested catalog-copy locale."},{"name":"Accept-Language","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Accept-Language"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicCatalogItemRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_get_catalog_item","x-mcp-exposed":true,"x-public-path":"/v1/merchant/catalog/{item_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/merchant/catalog/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_get_catalog_item\",\n    \"arguments\": {\n      \"item_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_get_catalog_item\",\n  arguments: {\n  \"item_id\": \"...\"\n},\n});"}]}},"/v1/merchant/catalog/{item_id}/archive":{"post":{"tags":["merchant"],"summary":"Archive a catalog item","description":"Idempotently archive an owned non-SaaS catalog item so it is no longer discoverable or purchasable.","operationId":"v1_archive_catalog_item","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicCatalogItemRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_archive_catalog_item","x-mcp-exposed":true,"x-public-path":"/v1/merchant/catalog/{item_id}/archive","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/merchant/catalog/.../archive \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_archive_catalog_item\",\n    \"arguments\": {\n      \"item_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_archive_catalog_item\",\n  arguments: {\n  \"item_id\": \"...\"\n},\n});"}]}},"/v1/merchant/catalog/{item_id}/unarchive":{"post":{"tags":["merchant"],"summary":"Unarchive a catalog item","description":"Losslessly restore an owned non-SaaS catalog item. Conflicting active SKUs return a named catalog conflict.","operationId":"v1_unarchive_catalog_item","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicCatalogItemRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_unarchive_catalog_item","x-mcp-exposed":true,"x-public-path":"/v1/merchant/catalog/{item_id}/unarchive","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/merchant/catalog/.../unarchive \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_unarchive_catalog_item\",\n    \"arguments\": {\n      \"item_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_unarchive_catalog_item\",\n  arguments: {\n  \"item_id\": \"...\"\n},\n});"}]}},"/v1/merchant/catalog/{item_id}/variants":{"post":{"tags":["merchant"],"summary":"Create a catalog variant","description":"Create one finite purchasable variant without replacing its siblings. prices, pricing_model, and is_available are required; fulfillment and buyer requirements are inherited from the item, and inventory authority remains parent-owned. option_selections must select exactly one value for every configured variant option.","operationId":"v1_create_catalog_variant","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicCatalogVariantCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicCatalogVariantRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_create_catalog_variant","x-mcp-exposed":true,"x-public-path":"/v1/merchant/catalog/{item_id}/variants","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/merchant/catalog/.../variants \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"prices\": [\n    {\n      \"market\": \"...\"\n    }\n  ],\n  \"pricing_model\": \"per_unit\",\n  \"is_available\": true\n}'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_create_catalog_variant\",\n    \"arguments\": {\n      \"item_id\": \"...\",\n      \"prices\": [\n        {\n          \"market\": \"...\"\n        }\n      ],\n      \"pricing_model\": \"per_unit\",\n      \"is_available\": true\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_create_catalog_variant\",\n  arguments: {\n  \"item_id\": \"...\",\n  \"prices\": [\n    {\n      \"market\": \"...\"\n    }\n  ],\n  \"pricing_model\": \"per_unit\",\n  \"is_available\": true\n},\n});"}]}},"/v1/merchant/catalog/{item_id}/variants/{variant_id}":{"post":{"tags":["merchant"],"summary":"Update a catalog variant","description":"Partially update one finite variant without replacing its siblings. A pricing change supplies pricing_model and prices together; fulfillment and buyer requirements remain inherited from the parent item, and inventory authority remains parent-owned. option_selections replaces that variant selection.","operationId":"v1_update_catalog_variant","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}},{"name":"variant_id","in":"path","required":true,"schema":{"type":"string","title":"Variant Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicCatalogVariantPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicCatalogVariantRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_update_catalog_variant","x-mcp-exposed":true,"x-public-path":"/v1/merchant/catalog/{item_id}/variants/{variant_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/merchant/catalog/.../variants/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_update_catalog_variant\",\n    \"arguments\": {\n      \"item_id\": \"...\",\n      \"variant_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_update_catalog_variant\",\n  arguments: {\n  \"item_id\": \"...\",\n  \"variant_id\": \"...\"\n},\n});"}]}},"/v1/merchant/destinations":{"post":{"tags":["merchant"],"summary":"Create merchant destination","description":"Create an HTTPS webhook destination and return its signing secret once. No decision connection is created. Store the secret on your backend; normal reads contain only its prefix.","operationId":"v1_create_merchant_destination","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationDestinationCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationDestinationMutationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_create_merchant_destination","x-mcp-exposed":true,"x-public-path":"/v1/merchant/destinations","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/merchant/destinations \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"name\": \"...\",\n  \"event_types\": [\n    \"quote.requested\"\n  ],\n  \"webhook\": {\n    \"endpoint_url\": \"...\"\n  }\n}'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_create_merchant_destination\",\n    \"arguments\": {\n      \"name\": \"...\",\n      \"event_types\": [\n        \"quote.requested\"\n      ],\n      \"webhook\": {\n        \"endpoint_url\": \"...\"\n      }\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_create_merchant_destination\",\n  arguments: {\n  \"name\": \"...\",\n  \"event_types\": [\n    \"quote.requested\"\n  ],\n  \"webhook\": {\n    \"endpoint_url\": \"...\"\n  }\n},\n});"}]},"get":{"tags":["merchant"],"summary":"List merchant destinations","description":"List merchant destinations","operationId":"v1_list_merchant_destinations","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationDestinationListResponse"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_list_merchant_destinations","x-mcp-exposed":true,"x-public-path":"/v1/merchant/destinations","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/merchant/destinations \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_list_merchant_destinations\",\n    \"arguments\": {}\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_list_merchant_destinations\",\n  arguments: {},\n});"}]}},"/v1/merchant/destinations/{destination_id}":{"patch":{"tags":["merchant"],"summary":"Update merchant destination","description":"Update merchant destination","operationId":"v1_update_merchant_destination","parameters":[{"name":"destination_id","in":"path","required":true,"schema":{"type":"string","title":"Destination Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationDestinationUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationDestinationRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_update_merchant_destination","x-mcp-exposed":true,"x-public-path":"/v1/merchant/destinations/{destination_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X PATCH https://api.openmerchant.dev/v1/merchant/destinations/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_update_merchant_destination\",\n    \"arguments\": {\n      \"destination_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_update_merchant_destination\",\n  arguments: {\n  \"destination_id\": \"...\"\n},\n});"}]},"get":{"tags":["merchant"],"summary":"Retrieve merchant destination","description":"Retrieve merchant destination","operationId":"v1_get_merchant_destination","parameters":[{"name":"destination_id","in":"path","required":true,"schema":{"type":"string","title":"Destination Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationDestinationRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_get_merchant_destination","x-mcp-exposed":true,"x-public-path":"/v1/merchant/destinations/{destination_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/merchant/destinations/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_get_merchant_destination\",\n    \"arguments\": {\n      \"destination_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_get_merchant_destination\",\n  arguments: {\n  \"destination_id\": \"...\"\n},\n});"}]},"delete":{"tags":["merchant"],"summary":"Delete an unused merchant destination","description":"Delete an unused merchant destination","operationId":"v1_delete_merchant_destination","parameters":[{"name":"destination_id","in":"path","required":true,"schema":{"type":"string","title":"Destination Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_delete_merchant_destination","x-mcp-exposed":true,"x-public-path":"/v1/merchant/destinations/{destination_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X DELETE https://api.openmerchant.dev/v1/merchant/destinations/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_delete_merchant_destination\",\n    \"arguments\": {\n      \"destination_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_delete_merchant_destination\",\n  arguments: {\n  \"destination_id\": \"...\"\n},\n});"}]}},"/v1/merchant/destinations/{destination_id}/disable":{"post":{"tags":["merchant"],"summary":"Disable merchant destination","description":"Disable merchant destination","operationId":"v1_disable_merchant_destination","parameters":[{"name":"destination_id","in":"path","required":true,"schema":{"type":"string","title":"Destination Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationDestinationRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_disable_merchant_destination","x-mcp-exposed":true,"x-public-path":"/v1/merchant/destinations/{destination_id}/disable","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/merchant/destinations/.../disable \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_disable_merchant_destination\",\n    \"arguments\": {\n      \"destination_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_disable_merchant_destination\",\n  arguments: {\n  \"destination_id\": \"...\"\n},\n});"}]}},"/v1/merchant/destinations/{destination_id}/enable":{"post":{"tags":["merchant"],"summary":"Enable merchant destination","description":"Enable merchant destination","operationId":"v1_enable_merchant_destination","parameters":[{"name":"destination_id","in":"path","required":true,"schema":{"type":"string","title":"Destination Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationDestinationRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_enable_merchant_destination","x-mcp-exposed":true,"x-public-path":"/v1/merchant/destinations/{destination_id}/enable","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/merchant/destinations/.../enable \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_enable_merchant_destination\",\n    \"arguments\": {\n      \"destination_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_enable_merchant_destination\",\n  arguments: {\n  \"destination_id\": \"...\"\n},\n});"}]}},"/v1/merchant/destinations/{destination_id}/events":{"get":{"tags":["merchant"],"summary":"List events for a destination","description":"List events for a destination","operationId":"v1_list_merchant_destination_events","parameters":[{"name":"destination_id","in":"path","required":true,"schema":{"type":"string","title":"Destination Id"}},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AgenticMerchantWebhookEventType"},{"type":"null"}],"title":"Event Type"}},{"name":"delivery_status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AgenticMerchantWebhookDeliveryStatus"},{"type":"null"}],"title":"Delivery Status"}},{"name":"order_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Id"}},{"name":"quote_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quote Id"}},{"name":"created_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created After"}},{"name":"created_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created Before"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationEventListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_list_merchant_destination_events","x-mcp-exposed":true,"x-public-path":"/v1/merchant/destinations/{destination_id}/events","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/merchant/destinations/.../events \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_list_merchant_destination_events\",\n    \"arguments\": {\n      \"destination_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_list_merchant_destination_events\",\n  arguments: {\n  \"destination_id\": \"...\"\n},\n});"}]}},"/v1/merchant/destinations/{destination_id}/events/{event_id}":{"get":{"tags":["merchant"],"summary":"Retrieve a destination event and its delivery attempts","description":"Retrieve a destination event and its delivery attempts","operationId":"v1_get_merchant_destination_event","parameters":[{"name":"destination_id","in":"path","required":true,"schema":{"type":"string","title":"Destination Id"}},{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationEventDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_get_merchant_destination_event","x-mcp-exposed":true,"x-public-path":"/v1/merchant/destinations/{destination_id}/events/{event_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/merchant/destinations/.../events/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_get_merchant_destination_event\",\n    \"arguments\": {\n      \"destination_id\": \"...\",\n      \"event_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_get_merchant_destination_event\",\n  arguments: {\n  \"destination_id\": \"...\",\n  \"event_id\": \"...\"\n},\n});"}]}},"/v1/merchant/destinations/{destination_id}/secret/rotate":{"post":{"tags":["merchant"],"summary":"Rotate destination signing secret","description":"Rotate destination signing secret","operationId":"v1_rotate_merchant_destination_secret","parameters":[{"name":"destination_id","in":"path","required":true,"schema":{"type":"string","title":"Destination Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationSecretReveal"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_rotate_merchant_destination_secret","x-mcp-exposed":true,"x-public-path":"/v1/merchant/destinations/{destination_id}/secret/rotate","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/merchant/destinations/.../secret/rotate \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_rotate_merchant_destination_secret\",\n    \"arguments\": {\n      \"destination_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_rotate_merchant_destination_secret\",\n  arguments: {\n  \"destination_id\": \"...\"\n},\n});"}]}},"/v1/merchant/destinations/{destination_id}/test":{"post":{"tags":["merchant"],"summary":"Send a destination delivery test","description":"Send a signed webhook.test event. A successful delivery proves reachability only; it never verifies a quote or order response or creates a payment. Available in test and live modes.","operationId":"v1_test_merchant_destination","parameters":[{"name":"destination_id","in":"path","required":true,"schema":{"type":"string","title":"Destination Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationTestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_test_merchant_destination","x-mcp-exposed":true,"x-public-path":"/v1/merchant/destinations/{destination_id}/test","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/merchant/destinations/.../test \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_test_merchant_destination\",\n    \"arguments\": {\n      \"destination_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_test_merchant_destination\",\n  arguments: {\n  \"destination_id\": \"...\"\n},\n});"}]}},"/v1/merchant/docs":{"get":{"tags":["merchant"],"summary":"Search merchant integration documentation","description":"Search merchant integration documentation","operationId":"v1_search_merchant_docs","parameters":[{"name":"query","in":"query","required":false,"schema":{"type":"string","maxLength":200,"default":"","title":"Query"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MerchantDocumentationList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_search_merchant_docs","x-mcp-exposed":true,"x-public-path":"/v1/merchant/docs","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/merchant/docs \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_search_merchant_docs\",\n    \"arguments\": {}\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_search_merchant_docs\",\n  arguments: {},\n});"}]}},"/v1/merchant/docs/{document_id}":{"get":{"tags":["merchant"],"summary":"Read merchant integration documentation","description":"Read merchant integration documentation","operationId":"v1_get_merchant_doc","parameters":[{"name":"document_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/MerchantDocumentId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MerchantDocumentationRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_get_merchant_doc","x-mcp-exposed":true,"x-public-path":"/v1/merchant/docs/{document_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/merchant/docs/guide \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_get_merchant_doc\",\n    \"arguments\": {\n      \"document_id\": \"guide\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_get_merchant_doc\",\n  arguments: {\n  \"document_id\": \"guide\"\n},\n});"}]}},"/v1/merchant/integration_checks":{"post":{"tags":["merchant"],"summary":"Start a test-mode responder check","description":"Quote checks send a real signed quote request without purchasing. Order checks observe a supplied test-mode order from an explicitly authorized buyer/payment flow; they never create an order or move money. Poll the returned check ID.","operationId":"v1_create_merchant_integration_check","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MerchantIntegrationCheckCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MerchantIntegrationCheckRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_create_merchant_integration_check","x-mcp-exposed":true,"x-public-path":"/v1/merchant/integration_checks","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/merchant/integration_checks \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"kind\": \"quote\",\n  \"destination_id\": \"...\"\n}'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_create_merchant_integration_check\",\n    \"arguments\": {\n      \"kind\": \"quote\",\n      \"destination_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_create_merchant_integration_check\",\n  arguments: {\n  \"kind\": \"quote\",\n  \"destination_id\": \"...\"\n},\n});"}]}},"/v1/merchant/integration_checks/{check_id}":{"get":{"tags":["merchant"],"summary":"Retrieve a responder check","description":"Retrieve a responder check","operationId":"v1_get_merchant_integration_check","parameters":[{"name":"check_id","in":"path","required":true,"schema":{"type":"string","title":"Check Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MerchantIntegrationCheckRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_get_merchant_integration_check","x-mcp-exposed":true,"x-public-path":"/v1/merchant/integration_checks/{check_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/merchant/integration_checks/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_get_merchant_integration_check\",\n    \"arguments\": {\n      \"check_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_get_merchant_integration_check\",\n  arguments: {\n  \"check_id\": \"...\"\n},\n});"}]}},"/v1/merchant/quotes":{"get":{"tags":["merchant"],"summary":"List seller-owned quote requests","description":"List all quote traffic for the hosted merchant belonging to the secret key account and immutable mode.","operationId":"v1_list_merchant_quotes","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AgenticQuoteStatus"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicQuoteListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_list_merchant_quotes","x-mcp-exposed":true,"x-public-path":"/v1/merchant/quotes","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/merchant/quotes \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_list_merchant_quotes\",\n    \"arguments\": {}\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_list_merchant_quotes\",\n  arguments: {},\n});"}]}},"/v1/merchant/quotes/{quote_id}":{"get":{"tags":["merchant"],"summary":"Retrieve a seller-owned quote","description":"Retrieve one quote belonging to the key account and mode.","operationId":"v1_get_merchant_quote","parameters":[{"name":"quote_id","in":"path","required":true,"schema":{"type":"string","title":"Quote Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicQuoteRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_get_merchant_quote","x-mcp-exposed":true,"x-public-path":"/v1/merchant/quotes/{quote_id}","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/merchant/quotes/... \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_get_merchant_quote\",\n    \"arguments\": {\n      \"quote_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_get_merchant_quote\",\n  arguments: {\n  \"quote_id\": \"...\"\n},\n});"}]}},"/v1/merchant/quotes/{quote_id}/respond":{"post":{"tags":["merchant"],"summary":"Resolve a pending merchant quote","description":"Answer a quote.requested event with the offers the merchant can honour.\n\nTwo credentials are accepted. A webhook receiver signs the exact raw body with its destination's HMAC secret and names the delivery in `OpenMerchant-Webhook-Id`; that form needs no API key and may send either the full offer ledger or the low-code availability-and-price shape. A secret API key instead resolves the quote's currently open generation, which is what makes it the path for timeout recovery or operator intervention.","operationId":"v1_respond_to_merchant_quote","parameters":[{"name":"quote_id","in":"path","required":true,"schema":{"type":"string","title":"Quote Id"}}],"responses":{"200":{"description":"The updated quote for an API-key response, or the decision acknowledgement for a signed response.","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/PublicQuoteRead"},{"$ref":"#/components/schemas/MerchantWebhookResponseRead"}]}}}},"400":{"description":"The resolution is well formed but contradicts the saved quote (expiry, booking, or fulfillment mismatch)."},"404":{"description":"No quote of this seller matches the identifier."},"409":{"description":"The quote has no open resolution generation left to answer."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_respond_to_merchant_quote","x-mcp-exposed":true,"x-public-path":"/v1/merchant/quotes/{quote_id}/respond","requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/MerchantQuoteRespondRequest"},{"$ref":"#/components/schemas/MerchantWebhookQuoteResponse"}]}}}},"security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/merchant/quotes/.../respond \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"messages\": [],\n  \"offers\": [\n    {\n      \"availability_status\": \"available\",\n      \"available_quantity\": 8,\n      \"booking_snapshot\": {\n        \"type\": \"quantity\"\n      },\n      \"catalog_item_id\": \"om_agci_4c1a\",\n      \"catalog_variant_id\": \"om_agcv_9d10\",\n      \"currency\": \"USD\",\n      \"expires_at\": \"2030-01-01T00:00:00Z\",\n      \"fulfillment\": {\n        \"option_id\": \"om_agcfo_f83c\",\n        \"type\": \"digital\"\n      },\n      \"merchant_offer_reference\": \"merchant-offer-123\",\n      \"subtotals\": [\n        {\n          \"amount\": 5000,\n          \"description\": \"Item subtotal\",\n          \"type\": \"subtotal\"\n        },\n        {\n          \"amount\": 5000,\n          \"description\": \"Total\",\n          \"type\": \"total\"\n        }\n      ],\n      \"tax_treatment\": \"not_applicable\",\n      \"total_amount_cents\": 5000,\n      \"unit_amount_cents\": 2500,\n      \"unit_count\": 2\n    }\n  ],\n  \"outcome\": \"priced\"\n}'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_respond_to_merchant_quote\",\n    \"arguments\": {\n      \"quote_id\": \"...\",\n      \"messages\": [],\n      \"offers\": [\n        {\n          \"availability_status\": \"available\",\n          \"available_quantity\": 8,\n          \"booking_snapshot\": {\n            \"type\": \"quantity\"\n          },\n          \"catalog_item_id\": \"om_agci_4c1a\",\n          \"catalog_variant_id\": \"om_agcv_9d10\",\n          \"currency\": \"USD\",\n          \"expires_at\": \"2030-01-01T00:00:00Z\",\n          \"fulfillment\": {\n            \"option_id\": \"om_agcfo_f83c\",\n            \"type\": \"digital\"\n          },\n          \"merchant_offer_reference\": \"merchant-offer-123\",\n          \"subtotals\": [\n            {\n              \"amount\": 5000,\n              \"description\": \"Item subtotal\",\n              \"type\": \"subtotal\"\n            },\n            {\n              \"amount\": 5000,\n              \"description\": \"Total\",\n              \"type\": \"total\"\n            }\n          ],\n          \"tax_treatment\": \"not_applicable\",\n          \"total_amount_cents\": 5000,\n          \"unit_amount_cents\": 2500,\n          \"unit_count\": 2\n        }\n      ],\n      \"outcome\": \"priced\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_respond_to_merchant_quote\",\n  arguments: {\n  \"quote_id\": \"...\",\n  \"messages\": [],\n  \"offers\": [\n    {\n      \"availability_status\": \"available\",\n      \"available_quantity\": 8,\n      \"booking_snapshot\": {\n        \"type\": \"quantity\"\n      },\n      \"catalog_item_id\": \"om_agci_4c1a\",\n      \"catalog_variant_id\": \"om_agcv_9d10\",\n      \"currency\": \"USD\",\n      \"expires_at\": \"2030-01-01T00:00:00Z\",\n      \"fulfillment\": {\n        \"option_id\": \"om_agcfo_f83c\",\n        \"type\": \"digital\"\n      },\n      \"merchant_offer_reference\": \"merchant-offer-123\",\n      \"subtotals\": [\n        {\n          \"amount\": 5000,\n          \"description\": \"Item subtotal\",\n          \"type\": \"subtotal\"\n        },\n        {\n          \"amount\": 5000,\n          \"description\": \"Total\",\n          \"type\": \"total\"\n        }\n      ],\n      \"tax_treatment\": \"not_applicable\",\n      \"total_amount_cents\": 5000,\n      \"unit_amount_cents\": 2500,\n      \"unit_count\": 2\n    }\n  ],\n  \"outcome\": \"priced\"\n},\n});"}]}},"/v1/onboarding_links/{onboarding_link_id}/expire":{"post":{"tags":["onboarding-links"],"summary":"Expire an onboarding link","description":"Mark the link as revoked so subsequent opens redirect to the configured `refresh_url`.","operationId":"v1_expire_onboarding_link","parameters":[{"name":"onboarding_link_id","in":"path","required":true,"schema":{"type":"string","title":"Onboarding Link Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingLinkRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_expire_onboarding_link","x-mcp-exposed":true,"x-public-path":"/v1/onboarding_links/{onboarding_link_id}/expire","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/onboarding_links/.../expire \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_expire_onboarding_link\",\n    \"arguments\": {\n      \"onboarding_link_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_expire_onboarding_link\",\n  arguments: {\n  \"onboarding_link_id\": \"...\"\n},\n});"}]}},"/v1/policies/{policy_id}/archive":{"post":{"tags":["policies"],"summary":"Archive a policy","description":"Archive a spending policy without deleting its version history.","operationId":"v1_archive_policy","parameters":[{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPolicyLibraryRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_archive_policy","x-mcp-exposed":true,"x-public-path":"/v1/policies/{policy_id}/archive","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/policies/.../archive \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_archive_policy\",\n    \"arguments\": {\n      \"policy_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_archive_policy\",\n  arguments: {\n  \"policy_id\": \"...\"\n},\n});"}]}},"/v1/policies/{policy_id}/rollback":{"post":{"tags":["policies"],"summary":"Roll back a policy","description":"Restore a spending policy to a previous version and record a new current version.","operationId":"v1_rollback_policy","parameters":[{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyRollbackBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPolicyLibraryRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_rollback_policy","x-mcp-exposed":true,"x-public-path":"/v1/policies/{policy_id}/rollback","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/policies/.../rollback \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"target_version_number\": 1\n}'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_rollback_policy\",\n    \"arguments\": {\n      \"policy_id\": \"...\",\n      \"target_version_number\": 1\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_rollback_policy\",\n  arguments: {\n  \"policy_id\": \"...\",\n  \"target_version_number\": 1\n},\n});"}]}},"/v1/policies/{policy_id}/unarchive":{"post":{"tags":["policies"],"summary":"Unarchive a policy","description":"Restore an archived spending policy so it can be selected again.","operationId":"v1_unarchive_policy","parameters":[{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPolicyLibraryRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_unarchive_policy","x-mcp-exposed":true,"x-public-path":"/v1/policies/{policy_id}/unarchive","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/policies/.../unarchive \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_unarchive_policy\",\n    \"arguments\": {\n      \"policy_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_unarchive_policy\",\n  arguments: {\n  \"policy_id\": \"...\"\n},\n});"}]}},"/v1/policies/{policy_id}/versions":{"get":{"tags":["policies"],"summary":"List policy versions","description":"Return immutable historical versions for a spending policy.","operationId":"v1_list_policy_versions","parameters":[{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyVersionListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_list_policy_versions","x-mcp-exposed":true,"x-public-path":"/v1/policies/{policy_id}/versions","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/policies/.../versions \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_list_policy_versions\",\n    \"arguments\": {\n      \"policy_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_list_policy_versions\",\n  arguments: {\n  \"policy_id\": \"...\"\n},\n});"}]}},"/v1/profile_auth/challenges":{"post":{"tags":["profile-auth"],"summary":"Start Challenge","description":"Start a claim/signup or password-recovery email challenge.","operationId":"start_challenge_v1_profile_auth_challenges_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileAuthChallengeStartRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileAuthChallengeStartRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000}},"/v1/profile_auth/challenges/{challenge_id}/verify":{"post":{"tags":["profile-auth"],"summary":"Verify Challenge","description":"Prove the six-digit code before disclosing safe candidate metadata.","operationId":"verify_challenge_v1_profile_auth_challenges__challenge_id__verify_post","parameters":[{"name":"challenge_id","in":"path","required":true,"schema":{"type":"string","title":"Challenge Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileAuthChallengeVerifyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileAuthChallengeVerifiedRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000}},"/v1/profile_auth/elements_key":{"post":{"tags":["profile-auth"],"summary":"Issue Elements Key","description":"Mint five-minute authority for this profile and merchant embed origin.","operationId":"issue_elements_key_v1_profile_auth_elements_key_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileElementKeyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileElementKeyRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000}},"/v1/profile_auth/guest":{"post":{"tags":["profile-auth"],"summary":"Start Guest Session","description":"Create one isolated, revocable guest profile session for this browser.","operationId":"start_guest_session_v1_profile_auth_guest_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileAuthAuthenticatedRead"}}}}},"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000}},"/v1/profile_auth/login":{"post":{"tags":["profile-auth"],"summary":"Login","description":"Authenticate a profile password, with duplicate selection if needed.","operationId":"login_v1_profile_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileAuthLoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileAuthLoginRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000}},"/v1/profile_auth/logout":{"post":{"tags":["profile-auth"],"summary":"Logout","description":"Revoke the current profile session.","operationId":"logout_v1_profile_auth_logout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileAuthLogoutRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000}},"/v1/profile_auth/me":{"patch":{"tags":["profile-auth"],"summary":"Update Me","description":"Update allowlisted self-service fields; email is intentionally absent.","operationId":"update_me_v1_profile_auth_me_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileAuthProfilePatch"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileAuthProfileRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000},"get":{"tags":["profile-auth"],"summary":"Me","description":"Return the current profile only, never its owning account user.","operationId":"me_v1_profile_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileAuthMeRead"}}}}},"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000}},"/v1/profile_auth/me/email/challenges":{"post":{"tags":["profile-auth"],"summary":"Start Email Change","description":"Send a verification code to the requested replacement email.","operationId":"start_email_change_v1_profile_auth_me_email_challenges_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileAuthEmailChangeStartRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileAuthChallengeStartRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000}},"/v1/profile_auth/me/email/verify":{"post":{"tags":["profile-auth"],"summary":"Complete Email Change","description":"Apply a replacement email only after proving control of it.","operationId":"complete_email_change_v1_profile_auth_me_email_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileAuthEmailChangeCompleteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileAuthAuthenticatedRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000}},"/v1/profile_auth/me/password":{"post":{"tags":["profile-auth"],"summary":"Change Password","description":"Change password, revoke all sessions, and issue one replacement.","operationId":"change_password_v1_profile_auth_me_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileAuthPasswordChangeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileAuthAuthenticatedRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000}},"/v1/profile_auth/merchant":{"get":{"tags":["profile-auth"],"summary":"Merchant Context","description":"Return merchant branding without exposing account ids or credentials.","operationId":"merchant_context_v1_profile_auth_merchant_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileAuthMerchantRead"}}}}},"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000}},"/v1/profile_auth/password_reset":{"post":{"tags":["profile-auth"],"summary":"Reset Password","description":"Reset one selected profile password and revoke all earlier sessions.","operationId":"reset_password_v1_profile_auth_password_reset_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileAuthPasswordResetRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileAuthAuthenticatedRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000}},"/v1/profile_auth/refresh":{"post":{"tags":["profile-auth"],"summary":"Refresh","description":"Rotate a host-held refresh token into an entirely new session.","operationId":"refresh_v1_profile_auth_refresh_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileAuthRefreshRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileAuthSessionTokens"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000}},"/v1/profile_auth/signup":{"post":{"tags":["profile-auth"],"summary":"Complete Signup","description":"Claim a same-email profile or create a fully validated new profile.","operationId":"complete_signup_v1_profile_auth_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileAuthSignupRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileAuthAuthenticatedRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000}},"/v1/profiles/{profile_id}/spending":{"get":{"tags":["profiles"],"summary":"Retrieve a profile's spending and limits","description":"Return the profile's configured policy allowances and remaining spending headroom.","operationId":"v1_get_profile_spending","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileBudgetRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_get_profile_spending","x-mcp-exposed":true,"x-public-path":"/v1/profiles/{profile_id}/spending","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/profiles/.../spending \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_get_profile_spending\",\n    \"arguments\": {\n      \"profile_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_get_profile_spending\",\n  arguments: {\n  \"profile_id\": \"...\"\n},\n});"}]}},"/v1/purchase_intents/{purchase_intent_id}/links":{"post":{"tags":["purchase-intent-links"],"summary":"Create a PurchaseIntent link","description":"Issue a hosted, co-branded link the end customer can open to view this purchase intent and act on it (approve, decline, cancel, retry, or sign in to the merchant). The raw token is embedded in `url` on this response ONLY — store the URL, not the token. Scope `allowed_actions` and keep `expires_in_hours` short: an approve-capable link is spending authority.","operationId":"v1_create_purchase_intent_link","parameters":[{"name":"purchase_intent_id","in":"path","required":true,"schema":{"type":"string","title":"Purchase Intent Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PurchaseIntentLinkCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPurchaseIntentLinkRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_create_purchase_intent_link","x-mcp-exposed":true,"x-public-path":"/v1/purchase_intents/{purchase_intent_id}/links","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":10,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/purchase_intents/.../links \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_create_purchase_intent_link\",\n    \"arguments\": {\n      \"purchase_intent_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_create_purchase_intent_link\",\n  arguments: {\n  \"purchase_intent_id\": \"...\"\n},\n});"}]},"get":{"tags":["purchase-intent-links"],"summary":"List PurchaseIntent links","operationId":"v1_list_purchase_intent_links","parameters":[{"name":"purchase_intent_id","in":"path","required":true,"schema":{"type":"string","title":"Purchase Intent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPurchaseIntentLinkListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_list_purchase_intent_links","x-mcp-exposed":true,"x-public-path":"/v1/purchase_intents/{purchase_intent_id}/links","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":20,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/purchase_intents/.../links \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_list_purchase_intent_links\",\n    \"arguments\": {\n      \"purchase_intent_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_list_purchase_intent_links\",\n  arguments: {\n  \"purchase_intent_id\": \"...\"\n},\n});"}]}},"/v1/purchase_intents/{purchase_intent_id}/links/{link_id}/revoke":{"post":{"tags":["purchase-intent-links"],"summary":"Revoke a PurchaseIntent link","operationId":"v1_revoke_purchase_intent_link","parameters":[{"name":"purchase_intent_id","in":"path","required":true,"schema":{"type":"string","title":"Purchase Intent Id"}},{"name":"link_id","in":"path","required":true,"schema":{"type":"string","title":"Link Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPurchaseIntentLinkRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_revoke_purchase_intent_link","x-mcp-exposed":true,"x-public-path":"/v1/purchase_intents/{purchase_intent_id}/links/{link_id}/revoke","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":30,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/purchase_intents/.../links/.../revoke \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_revoke_purchase_intent_link\",\n    \"arguments\": {\n      \"purchase_intent_id\": \"...\",\n      \"link_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_revoke_purchase_intent_link\",\n  arguments: {\n  \"purchase_intent_id\": \"...\",\n  \"link_id\": \"...\"\n},\n});"}]}},"/v1/purchase_intents/{purchase_intent_id}/approve":{"post":{"tags":["purchase-intents"],"summary":"Approve a purchase intent","description":"When policy requires human approval, call the approve API to represent approval by the profile user.\n\nFor issued cards, just pass the approve parameter.\nFor cards with agentic commerce enrollement that require a passkey, the PI will be created with a challenge; you will need to pass payment_action.verification_challenge params to complete the approval.\nFor payment_action.kind=cvc_reentry, collect a CVC token and pass temporary_cvc_token_id.","operationId":"v1_approve_purchase_intent","parameters":[{"name":"purchase_intent_id","in":"path","required":true,"schema":{"type":"string","title":"Purchase Intent Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PublicApprovalAction"},{"type":"null"}],"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPurchaseIntentPollRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_approve_purchase_intent","x-mcp-exposed":true,"x-public-path":"/v1/purchase_intents/{purchase_intent_id}/approve","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":50,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/purchase_intents/.../approve \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_approve_purchase_intent\",\n    \"arguments\": {\n      \"purchase_intent_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_approve_purchase_intent\",\n  arguments: {\n  \"purchase_intent_id\": \"...\"\n},\n});"}]}},"/v1/purchase_intents/{purchase_intent_id}/payment_verification_challenge":{"post":{"tags":["purchase-intents"],"summary":"Create a payment verification challenge","description":"When creating a PurchaseIntent that requires a passkey, the challenge is automatically created. Use this endpoint when `payment_action.verification_challenge` is missing or expired to recreate it. For `payment_action.kind=cvc_reentry`, collect and submit `temporary_cvc_token_id` instead.","operationId":"v1_create_payment_verification_challenge","parameters":[{"name":"purchase_intent_id","in":"path","required":true,"schema":{"type":"string","title":"Purchase Intent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentVerificationChallengeRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_create_payment_verification_challenge","x-mcp-exposed":true,"x-public-path":"/v1/purchase_intents/{purchase_intent_id}/payment_verification_challenge","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":55,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/purchase_intents/.../payment_verification_challenge \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_create_payment_verification_challenge\",\n    \"arguments\": {\n      \"purchase_intent_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_create_payment_verification_challenge\",\n  arguments: {\n  \"purchase_intent_id\": \"...\"\n},\n});"}]}},"/v1/purchase_intents/{purchase_intent_id}/retry":{"post":{"tags":["purchase-intents"],"summary":"Retry a purchase intent","description":"Retry a purchase intent that failed or paused in a retryable state. To retry a checkout blocked on merchant sign-in, collect the credentials with the MerchantAuthHandoff element and pass the `credential_ticket_id` returned by a `defer_retry` submit — raw merchant credentials are never accepted on this endpoint. Tickets are one-time and short-lived: redemption destroys the ticket, and an expired or replayed ticket returns 410.","operationId":"v1_retry_purchase_intent","parameters":[{"name":"purchase_intent_id","in":"path","required":true,"schema":{"type":"string","title":"Purchase Intent Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PublicPurchaseIntentRetryRequest"},{"type":"null"}],"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPurchaseIntentPollRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_retry_purchase_intent","x-mcp-exposed":true,"x-public-path":"/v1/purchase_intents/{purchase_intent_id}/retry","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":60,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/purchase_intents/.../retry \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_retry_purchase_intent\",\n    \"arguments\": {\n      \"purchase_intent_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_retry_purchase_intent\",\n  arguments: {\n  \"purchase_intent_id\": \"...\"\n},\n});"}]}},"/v1/purchase_intents/{purchase_intent_id}/cancel":{"post":{"tags":["purchase-intents"],"summary":"Cancel a purchase intent","description":"Cancel any queued or in-progress purchase attempts and close the purchase intent.","operationId":"v1_cancel_purchase_intent","parameters":[{"name":"purchase_intent_id","in":"path","required":true,"schema":{"type":"string","title":"Purchase Intent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPurchaseIntentPollRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_cancel_purchase_intent","x-mcp-exposed":true,"x-public-path":"/v1/purchase_intents/{purchase_intent_id}/cancel","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":70,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/purchase_intents/.../cancel \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_cancel_purchase_intent\",\n    \"arguments\": {\n      \"purchase_intent_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_cancel_purchase_intent\",\n  arguments: {\n  \"purchase_intent_id\": \"...\"\n},\n});"}]}},"/v1/purchase_intents/{purchase_intent_id}/cart_executions/{cart_execution_id}/cancel":{"post":{"tags":["purchase-intents"],"summary":"Cancel a merchant cart","description":"Cancel one queued or in-progress merchant cart within a multi-cart purchase intent, leaving the other merchant carts untouched.","operationId":"v1_cancel_purchase_intent_cart_execution","parameters":[{"name":"purchase_intent_id","in":"path","required":true,"schema":{"type":"string","title":"Purchase Intent Id"}},{"name":"cart_execution_id","in":"path","required":true,"schema":{"type":"string","title":"Cart Execution Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPurchaseIntentPollRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_cancel_purchase_intent_cart_execution","x-mcp-exposed":true,"x-public-path":"/v1/purchase_intents/{purchase_intent_id}/cart_executions/{cart_execution_id}/cancel","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/purchase_intents/.../cart_executions/.../cancel \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_cancel_purchase_intent_cart_execution\",\n    \"arguments\": {\n      \"purchase_intent_id\": \"...\",\n      \"cart_execution_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_cancel_purchase_intent_cart_execution\",\n  arguments: {\n  \"purchase_intent_id\": \"...\",\n  \"cart_execution_id\": \"...\"\n},\n});"}]}},"/v1/purchase_intents/{purchase_intent_id}/cart_executions/{cart_execution_id}/retry":{"post":{"tags":["purchase-intents"],"summary":"Retry a merchant cart","description":"Retry one failed merchant cart within a multi-cart purchase intent, leaving the other merchant carts untouched.","operationId":"v1_retry_purchase_intent_cart_execution","parameters":[{"name":"purchase_intent_id","in":"path","required":true,"schema":{"type":"string","title":"Purchase Intent Id"}},{"name":"cart_execution_id","in":"path","required":true,"schema":{"type":"string","title":"Cart Execution Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPurchaseIntentPollRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_retry_purchase_intent_cart_execution","x-mcp-exposed":true,"x-public-path":"/v1/purchase_intents/{purchase_intent_id}/cart_executions/{cart_execution_id}/retry","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/purchase_intents/.../cart_executions/.../retry \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_retry_purchase_intent_cart_execution\",\n    \"arguments\": {\n      \"purchase_intent_id\": \"...\",\n      \"cart_execution_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_retry_purchase_intent_cart_execution\",\n  arguments: {\n  \"purchase_intent_id\": \"...\",\n  \"cart_execution_id\": \"...\"\n},\n});"}]}},"/v1/purchase_intents/{purchase_intent_id}/events":{"get":{"tags":["purchase-intents"],"summary":"Stream purchase-intent events","description":"Open a server-sent events stream for purchase-intent lifecycle updates.","operationId":"v1_stream_purchase_intent_events","parameters":[{"name":"purchase_intent_id","in":"path","required":true,"schema":{"type":"string","title":"Purchase Intent Id"}},{"name":"expand","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/PublicPurchaseIntentExpand"},"title":"Expand"}}],"responses":{"200":{"description":"Server-sent purchase-intent lifecycle events.","content":{"text/event-stream":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_stream_purchase_intent_events","x-mcp-exposed":true,"x-public-path":"/v1/purchase_intents/{purchase_intent_id}/events","security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":100,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X GET https://api.openmerchant.dev/v1/purchase_intents/.../events \\\n  -H 'Authorization: Bearer pr_sk_test_...'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_stream_purchase_intent_events\",\n    \"arguments\": {\n      \"purchase_intent_id\": \"...\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_stream_purchase_intent_events\",\n  arguments: {\n  \"purchase_intent_id\": \"...\"\n},\n});"}]}},"/v1/merchant/orders/{order_id}/respond":{"post":{"tags":["merchant"],"summary":"Confirm or reject a requested order","description":"Answer an order lifecycle event after reserving the inventory. Confirm to capture the payment and commit the order, or reject to release the buyer authorization. Report per-line availability from your own inventory; supply subtotal_amount_cents to charge less than the buyer authorized. A total above the existing authorization is refused with 402 — reject instead so the buyer can re-authorize.\n\nA secret API key answers the current open order decision. A webhook receiver signs the exact raw response bytes using its destination secret and echoes the destination, event ID, and order.requested event type headers from a delivery addressed to that destination. Standard responses omit decision and return the updated order. Identical signed replays return the current order without repeating capture; different bytes for an accepted event return 409. The optional decision object belongs to the separate connector protocol and is not used for standard destination-based integrations.","operationId":"v1_respond_to_merchant_order","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"The updated order for an API-key response, or the decision acknowledgement for a signed connector decision.","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/MerchantOrderRead"},{"$ref":"#/components/schemas/MerchantWebhookResponseRead"}]}}}},"400":{"description":"The response is well formed but contradicts this order — an unavailable line on a confirmation, or line identity that names nothing on the order."},"402":{"description":"The repriced total exceeds the buyer authorization, or the currency changed. A new authorization is required; reject the order instead."},"404":{"description":"No order of this seller matches the identifier."},"409":{"description":"The order is not awaiting a merchant decision — already confirmed, rejected, or still unpaid — or a different decision was already recorded for this delivery."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-audience":"public_v1","x-api-authentication":"required","x-operation-id":"v1_respond_to_merchant_order","x-mcp-exposed":true,"x-public-path":"/v1/merchant/orders/{order_id}/respond","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MerchantOrderRespondRequest"}}}},"security":[{"ApiKeyBearer":[]}],"x-docs-kind":"other","x-docs-order":101,"x-docs-depth":2,"x-docs-action-order":1000,"x-codeSamples":[{"lang":"shell","label":"curl","source":"curl -X POST https://api.openmerchant.dev/v1/merchant/orders/.../respond \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"outcome\": \"confirmed\"\n}'"},{"lang":"shell","label":"MCP (Streamable HTTP)","source":"curl -X POST https://api.openmerchant.dev/mcp/v1 \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"v1_respond_to_merchant_order\",\n    \"arguments\": {\n      \"order_id\": \"...\",\n      \"outcome\": \"confirmed\"\n    }\n  }\n}'"},{"lang":"typescript","label":"MCP SDK (TS)","source":"// Reusing a Client connected to /mcp/v1 — see the \"MCP server\" tag for setup.\nconst result = await client.callTool({\n  name: \"v1_respond_to_merchant_order\",\n  arguments: {\n  \"order_id\": \"...\",\n  \"outcome\": \"confirmed\"\n},\n});"}]}}},"components":{"schemas":{"AgenticCatalogFulfillmentOptionRead":{"properties":{"id":{"type":"string","title":"Id"},"fulfillment_type":{"$ref":"#/components/schemas/AgenticFulfillmentType"},"display_order":{"type":"integer","title":"Display Order"},"handling_days_override":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Handling Days Override"},"pickup_ready_in_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pickup Ready In Minutes"},"scheduled_duration_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Scheduled Duration Minutes"},"booking_window_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Booking Window Days"},"location_ids":{"items":{"type":"string"},"type":"array","title":"Location Ids"}},"type":"object","required":["id","fulfillment_type","display_order"],"title":"AgenticCatalogFulfillmentOptionRead","description":"Admin read shape for one supported fulfillment mode."},"AgenticCatalogFulfillmentOptionWrite":{"properties":{"fulfillment_type":{"$ref":"#/components/schemas/AgenticFulfillmentType"},"display_order":{"type":"integer","minimum":0.0,"title":"Display Order","default":0},"handling_days_override":{"anyOf":[{"type":"integer","maximum":365.0,"minimum":0.0},{"type":"null"}],"title":"Handling Days Override","description":"SHIP only. Days this item needs before dispatch, overriding the matched rate card's handling window. Null inherits the card."},"pickup_ready_in_minutes":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Pickup Ready In Minutes"},"scheduled_duration_minutes":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Scheduled Duration Minutes"},"booking_window_days":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Booking Window Days"},"location_ids":{"items":{"type":"string"},"type":"array","maxItems":2000,"title":"Location Ids","description":"Canonical merchant locations eligible for this fulfillment mode. Required by buyers only when the listing uses a physical location."}},"type":"object","required":["fulfillment_type"],"title":"AgenticCatalogFulfillmentOptionWrite","description":"One fulfillment mode the item supports, with its mode-scoped settings.\n\nWhat each mode *costs* is a rate card, not an item field. Ship therefore\ncarries exactly one setting — a handling-days override of the matched\ncard's promise — because handling time is a physical fact about this item\n(Google models it per product too), while the price is not."},"AgenticCatalogItemStatus":{"type":"string","enum":["draft","active","archived"],"title":"AgenticCatalogItemStatus","description":"Lifecycle of a catalog listing; only ``ACTIVE`` items are purchasable."},"AgenticCatalogItemType":{"type":"string","enum":["product","service","travel_booking","saas"],"title":"AgenticCatalogItemType","description":"What kind of offering a catalog listing is.\n\n``PRODUCT`` — physical or digital goods. ``SERVICE`` — bookable or\ndeliverable services. ``TRAVEL_BOOKING`` — stays/rentals captured with a\nbooking window and confirmed by the merchant. ``SAAS`` — a\nfixed-term software license sold as a one-time charge (renewal is a new\norder; there is no recurring billing)."},"AgenticCatalogMediaWrite":{"properties":{"source_url":{"type":"string","maxLength":4096,"minLength":1,"title":"Source Url"},"role":{"$ref":"#/components/schemas/CatalogMediaRole","default":"gallery"},"alt_text":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Alt Text"},"display_order":{"type":"integer","minimum":0.0,"title":"Display Order","default":0}},"additionalProperties":false,"type":"object","required":["source_url"],"title":"AgenticCatalogMediaWrite","description":"One ordered item- or variant-level image association."},"AgenticCatalogOptionRead":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"display_order":{"type":"integer","title":"Display Order"},"values":{"items":{"$ref":"#/components/schemas/AgenticCatalogOptionValueRead"},"type":"array","title":"Values"}},"type":"object","required":["id","name","display_order","values"],"title":"AgenticCatalogOptionRead","description":"Admin read shape for one finite option axis."},"AgenticCatalogOptionValueRead":{"properties":{"id":{"type":"string","title":"Id"},"label":{"type":"string","title":"Label"},"display_order":{"type":"integer","title":"Display Order"}},"type":"object","required":["id","label","display_order"],"title":"AgenticCatalogOptionValueRead","description":"Admin read shape for one finite option value."},"AgenticCatalogOptionValueWrite":{"properties":{"id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Id"},"label":{"type":"string","maxLength":120,"minLength":1,"title":"Label"}},"additionalProperties":false,"type":"object","required":["label"],"title":"AgenticCatalogOptionValueWrite","description":"One allowed value for a finite product option."},"AgenticCatalogOptionWrite":{"properties":{"id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Id"},"name":{"type":"string","maxLength":64,"minLength":1,"title":"Name"},"values":{"items":{"$ref":"#/components/schemas/AgenticCatalogOptionValueWrite"},"type":"array","maxItems":100,"minItems":1,"title":"Values"}},"additionalProperties":false,"type":"object","required":["name","values"],"title":"AgenticCatalogOptionWrite","description":"One finite product option axis and all of its allowed values."},"AgenticCatalogVariantOptionSelectionRead":{"properties":{"option_id":{"type":"string","title":"Option Id"},"option_value_id":{"type":"string","title":"Option Value Id"},"option_name":{"type":"string","title":"Option Name"},"value_label":{"type":"string","title":"Value Label"}},"type":"object","required":["option_id","option_value_id","option_name","value_label"],"title":"AgenticCatalogVariantOptionSelectionRead","description":"Admin read shape for one variant option selection."},"AgenticCatalogVariantOptionSelectionWrite":{"properties":{"option_name":{"type":"string","maxLength":64,"minLength":1,"title":"Option Name"},"value_label":{"type":"string","maxLength":120,"minLength":1,"title":"Value Label"}},"additionalProperties":false,"type":"object","required":["option_name","value_label"],"title":"AgenticCatalogVariantOptionSelectionWrite","description":"One option/value pair that identifies a finite variant."},"AgenticCredentialInstructionStatus":{"type":"string","enum":["pending","pending_verification","approved","expired","cancelled","failed"],"title":"AgenticCredentialInstructionStatus","description":"Lifecycle state for one merchant/purchase spending instruction."},"AgenticCredentialsPreference":{"type":"string","enum":["prefer_with_fallback","skip","require"],"title":"AgenticCredentialsPreference","description":"Caller preference for attempting Agentic Credentials."},"AgenticCredentialsStatus":{"type":"string","enum":["active","eligible","pending_verification","failed","suspended","ineligible"],"title":"AgenticCredentialsStatus","description":"Public summary state for a card's Agentic Credentials readiness."},"AgenticCustomerAuthMode":{"type":"string","enum":["never","optional","required"],"title":"AgenticCustomerAuthMode","description":"Whether a hosted seller accepts anonymous customer purchases."},"AgenticCustomizationPricingBasis":{"type":"string","enum":["per_item","per_pricing_unit","flat_per_line"],"title":"AgenticCustomizationPricingBasis","description":"How a customization price delta contributes to an order line."},"AgenticCustomizationSelectionMode":{"type":"string","enum":["single","multiple","quantity"],"title":"AgenticCustomizationSelectionMode","description":"How a buyer may select choices in one customization group."},"AgenticFulfillmentType":{"type":"string","enum":["delivery","pickup","digital","service_booking","ship"],"title":"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)."},"AgenticInstructionRecurrenceFrequency":{"type":"string","enum":["weekly","monthly","yearly"],"title":"AgenticInstructionRecurrenceFrequency","description":"Recurring allowance reset frequency supported by payment instructions.\n\nThe provider supports only these three; policy ``daily``/``all_time``\ninterval limits have no provider equivalent and are enforced app-side\nvia the draw ledger."},"AgenticInventoryManagementMode":{"type":"string","enum":["openmerchant_managed","merchant_managed"],"title":"AgenticInventoryManagementMode","description":"System responsible for validating inventory and confirming orders.\n\nSet on the merchant and applied per merchant only. ``OPENMERCHANT_MANAGED``\nmeans we hold the count, decrement it on every purchase, and refuse\ncheckout past zero. ``MERCHANT_MANAGED`` means the merchant's own system\nstays the source of truth: catalog reads serve the best-effort\navailability and price we mirror on their listings, we never decrement,\nand orders wait for the merchant's inbound ``order.confirmed`` before\ntheir deferred capture settles. The per-item column of the same type on\n``AgenticMerchantCatalogItem`` is retained data, deliberately inert —\nimports still record it for provenance, but resolution\n(``effective_inventory_management``) returns the merchant-level mode\nunconditionally."},"AgenticInventoryScope":{"type":"string","enum":["item","variant"],"title":"AgenticInventoryScope","description":"Granularity at which a catalog item's stock count is kept.\n\n``ITEM`` keeps one pooled count shared by every variant — any variant sells\nfrom the same stock, and the count lives on the item's default variant.\n``VARIANT`` gives each variant its own count; the item total is their sum."},"AgenticMerchantStatus":{"type":"string","enum":["draft","onboarding","active","disabled"],"title":"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."},"AgenticMerchantWebhookDeliveryStatus":{"type":"string","enum":["pending","delivered","failed"],"title":"AgenticMerchantWebhookDeliveryStatus","description":"Delivery outcome recorded on the webhook audit ledger row."},"AgenticMerchantWebhookEventType":{"type":"string","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","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."},"AgenticPricingModel":{"type":"string","enum":["per_unit","per_interval","per_person","per_hour","quoted"],"title":"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."},"AgenticQuoteStatus":{"type":"string","enum":["requested","priced","unavailable","requires_input","declined","failed","expired","consumed"],"title":"AgenticQuoteStatus","description":"Lifecycle of one buyer-owned, merchant-authoritative quote."},"AirCabinPreference":{"type":"string","enum":["economy","premium_economy","business","first","no_preference"],"title":"AirCabinPreference","description":"Preferred cabin class for air travel bookings."},"AirSeatPreference":{"type":"string","enum":["aisle","window","middle","no_preference"],"title":"AirSeatPreference","description":"Preferred seat position for air travel bookings."},"AppliedPromotionLineRead":{"properties":{"line_key":{"type":"string","title":"Line Key","description":"Position key of the line within its basket, such as line_0."},"discount_amount":{"type":"integer","title":"Discount Amount","description":"Discount on this line, in minor units of the charged currency."}},"type":"object","required":["line_key","discount_amount"],"title":"AppliedPromotionLineRead","description":"What one applied promotion took off one line."},"AppliedPromotionRead":{"properties":{"claim_id":{"type":"string","title":"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":{"type":"string","title":"Title","description":"Name the seller gave the promotion."},"currency":{"$ref":"#/components/schemas/CurrencyCode","description":"Currency discount_amount is in."},"discount_amount":{"type":"integer","title":"Discount Amount","description":"Total discount from this promotion, in minor units."},"expires_at":{"type":"string","format":"date-time","title":"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."},"reserved":{"type":"boolean","title":"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."},"redeemed":{"type":"boolean","title":"Redeemed","description":"Whether a payment has redeemed this promotion."},"terms":{"type":"string","title":"Terms","description":"One plain sentence an agent can relay to the person it is buying for: what is offered and until when."},"lines":{"items":{"$ref":"#/components/schemas/AppliedPromotionLineRead"},"type":"array","title":"Lines","description":"The discount per line it applied to."}},"type":"object","required":["claim_id","title","currency","discount_amount","expires_at","reserved","redeemed","terms","lines"],"title":"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."},"AppointmentBookingConfig-Input":{"properties":{"type":{"type":"string","const":"appointment","title":"Type","default":"appointment"},"timezone":{"type":"string","maxLength":64,"minLength":1,"title":"Timezone"},"duration":{"$ref":"#/components/schemas/DurationRule"},"party_size":{"$ref":"#/components/schemas/PartySizeRule"},"windows":{"items":{"$ref":"#/components/schemas/WeeklyWindow"},"type":"array","maxItems":21,"title":"Windows","description":"Weekly local-time working hours. Required (at least one) when OpenMerchant computes availability; may be empty for a `merchant_managed` variant, whose inventory integration owns the calendar."},"date_overrides":{"items":{"$ref":"#/components/schemas/DateOverride"},"type":"array","maxItems":366,"title":"Date Overrides"},"slot_step_minutes":{"type":"integer","maximum":1440.0,"minimum":5.0,"title":"Slot Step Minutes","default":30},"lead_time_minutes":{"type":"integer","maximum":525600.0,"minimum":0.0,"title":"Lead Time Minutes","default":120},"horizon_days":{"type":"integer","maximum":730.0,"minimum":1.0,"title":"Horizon Days","default":60},"concurrency":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Concurrency","default":1},"resources":{"items":{"$ref":"#/components/schemas/ResourceRule"},"type":"array","maxItems":200,"title":"Resources"}},"additionalProperties":false,"type":"object","required":["timezone","duration"],"title":"AppointmentBookingConfig","description":"Computable appointment availability rules for one variant.\n\nAvailability is *derived* — weekly windows minus date overrides minus\nexisting holds and bookings — rather than materialized, because an\nappointment grid over a 45-day horizon is cheap to compute and\nexpensive to keep in sync."},"AppointmentBookingConfig-Output":{"properties":{"type":{"type":"string","const":"appointment","title":"Type","default":"appointment"},"timezone":{"type":"string","maxLength":64,"minLength":1,"title":"Timezone"},"duration":{"$ref":"#/components/schemas/DurationRule"},"party_size":{"$ref":"#/components/schemas/PartySizeRule"},"windows":{"items":{"$ref":"#/components/schemas/WeeklyWindow"},"type":"array","maxItems":21,"title":"Windows","description":"Weekly local-time working hours. Required (at least one) when OpenMerchant computes availability; may be empty for a `merchant_managed` variant, whose inventory integration owns the calendar."},"date_overrides":{"items":{"$ref":"#/components/schemas/DateOverride"},"type":"array","maxItems":366,"title":"Date Overrides"},"slot_step_minutes":{"type":"integer","maximum":1440.0,"minimum":5.0,"title":"Slot Step Minutes","default":30},"lead_time_minutes":{"type":"integer","maximum":525600.0,"minimum":0.0,"title":"Lead Time Minutes","default":120},"horizon_days":{"type":"integer","maximum":730.0,"minimum":1.0,"title":"Horizon Days","default":60},"concurrency":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Concurrency","default":1},"resources":{"items":{"$ref":"#/components/schemas/ResourceRule"},"type":"array","maxItems":200,"title":"Resources"}},"additionalProperties":false,"type":"object","required":["timezone","duration"],"title":"AppointmentBookingConfig","description":"Computable appointment availability rules for one variant.\n\nAvailability is *derived* — weekly windows minus date overrides minus\nexisting holds and bookings — rather than materialized, because an\nappointment grid over a 45-day horizon is cheap to compute and\nexpensive to keep in sync."},"AppointmentBookingRequest":{"properties":{"type":{"type":"string","const":"appointment","title":"Type","description":"Discriminator selecting the appointment request shape.","default":"appointment"},"starts_at":{"type":"string","format":"date-time","title":"Starts At","description":"Requested start; MUST carry a UTC offset.","examples":["2026-09-01T15:00:00Z"]},"duration_minutes":{"anyOf":[{"type":"integer","maximum":10080.0,"minimum":1.0},{"type":"null"}],"title":"Duration Minutes","description":"Omit for fixed-duration services; the config supplies it."},"party_size":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Party Size","description":"How many people the appointment is for.","default":1},"resource_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Resource Id","description":"Optional buyer preference; otherwise assigned server-side."}},"additionalProperties":false,"type":"object","required":["starts_at"],"title":"AppointmentBookingRequest","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."},"AppointmentBookingSnapshot":{"properties":{"type":{"type":"string","const":"appointment","title":"Type","description":"Discriminator selecting the resolved appointment shape.","default":"appointment"},"starts_at":{"type":"string","format":"date-time","title":"Starts At","description":"Exact instant the appointment begins.","examples":["2026-09-01T15:00:00Z"]},"ends_at":{"type":"string","format":"date-time","title":"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"]},"duration_minutes":{"type":"integer","maximum":10080.0,"minimum":1.0,"title":"Duration Minutes","description":"Resolved length of the appointment."},"party_size":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Party Size","description":"People the appointment was booked for.","default":1},"resource_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Resource Id","description":"Resource the appointment was assigned to, if any.","examples":["res_anna"]},"resource_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Resource Name","description":"Buyer-facing name of that resource at booking time.","examples":["Anna"]},"timezone":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Timezone","description":"IANA timezone the appointment was scheduled in.","examples":["America/Los_Angeles"]}},"additionalProperties":false,"type":"object","required":["starts_at","ends_at","duration_minutes"],"title":"AppointmentBookingSnapshot","description":"A resolved appointment: exact start, end, duration, and assignment."},"BookingType":{"type":"string","enum":["quantity","appointment","scheduled_class","stay"],"title":"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."},"BrowserAuthProfileStatus":{"type":"string","enum":["new","awaiting_login","authenticated","reauth_required","expired","revoked","error"],"title":"BrowserAuthProfileStatus","description":"Lifecycle of a reusable merchant browser-auth profile."},"BusinessDetailsCreate":{"properties":{"legal_entity_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Legal Entity Name"},"dba_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Dba Name"},"business_structure":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Business Structure"},"industry_mcc":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Industry Mcc"},"ein":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Ein"},"formation_state":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Formation State"},"formation_date":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Formation Date"},"website":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Website"},"beneficial_owners":{"items":{"$ref":"#/components/schemas/ProfileBeneficialOwnerCreate"},"type":"array","title":"Beneficial Owners"}},"additionalProperties":false,"type":"object","title":"BusinessDetailsCreate","description":"Business identity details supplied for a business profile create request."},"BusinessDetailsListItem":{"properties":{"legal_entity_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Legal Entity Name"}},"type":"object","title":"BusinessDetailsListItem","description":"Compact business details included with profile list rows."},"BusinessDetailsPatch":{"properties":{"legal_entity_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Legal Entity Name"},"dba_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Dba Name"},"business_structure":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Business Structure"},"industry_mcc":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Industry Mcc"},"ein":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Ein"},"formation_state":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Formation State"},"formation_date":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Formation Date"},"website":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Website"},"beneficial_owners":{"anyOf":[{"items":{"$ref":"#/components/schemas/ProfileBeneficialOwnerCreate"},"type":"array"},{"type":"null"}],"title":"Beneficial Owners"}},"additionalProperties":false,"type":"object","title":"BusinessDetailsPatch","description":"Partial business identity update for a business profile."},"BuyerDob":{"properties":{"day":{"type":"integer","maximum":31.0,"minimum":1.0,"title":"Day","description":"Day of the month (1-31).","example":15},"month":{"type":"integer","maximum":12.0,"minimum":1.0,"title":"Month","description":"Month of the year (1-12).","example":6},"year":{"type":"integer","minimum":1900.0,"title":"Year","description":"Four-digit birth year.","example":1990}},"type":"object","required":["day","month","year"],"title":"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."},"CachedImageRead":{"properties":{"id":{"type":"string","title":"Id","description":"Typed object id (om_imgc_<ulid>)."},"source_image_url":{"type":"string","title":"Source Image Url","description":"Normalized upstream URL the bytes were downloaded from."},"source_image_url_hash":{"type":"string","title":"Source Image Url Hash","description":"SHA-256 hex of source_image_url; the cache primary lookup key."},"proxy_url":{"type":"string","title":"Proxy Url","description":"URL the frontend should render. Resolves to the CDN base URL when configured, otherwise to /api/cached-images/file/<hash>."},"content_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Type","description":"Persisted image MIME type (jpeg/png/webp/gif/avif)."},"bytes_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bytes Size","description":"Stored byte length."},"status":{"$ref":"#/components/schemas/CachedImageStatus","description":"Lifecycle state of the row — clients use this to decide whether to render proxy_url or fall back to source_image_url."},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_accessed_at":{"type":"string","format":"date-time","title":"Last Accessed At"}},"type":"object","required":["id","source_image_url","source_image_url_hash","proxy_url","status","created_at","last_accessed_at"],"title":"CachedImageRead","description":"One cached image, ready for the frontend to render via ``proxy_url``."},"CachedImageStatus":{"type":"string","enum":["pending","ok","failed","skipped"],"title":"CachedImageStatus","description":"Lifecycle state of a ``CachedImage`` row.\n\n- ``PENDING`` — the row was inserted as a placeholder by the dispatcher\n  handler before the download was attempted; presence is what makes\n  redelivery a no-op under at-least-once SQS.\n- ``OK`` — the bytes are durably persisted in the image-cache bucket and\n  the artifact_key/content_type/bytes_size columns are populated.\n- ``FAILED`` — the upstream download or persistence step raised; the row\n  is kept so the URL doesn't get re-attempted on every cache miss until a\n  retry sweep clears it.\n- ``SKIPPED`` — the URL was rejected before any download attempt\n  (signed-URL allowlist, content-type denylist, oversize body). Sticky\n  and intentional — re-attempting would skip again."},"CardBrand":{"type":"string","enum":["visa","mastercard","amex","discover","jcb","diners","unionpay","unknown"],"title":"CardBrand","description":"Supported card network brands for profile payment methods."},"CardPaymentMethodKind":{"type":"string","enum":["existing","issued"],"title":"CardPaymentMethodKind","description":"Card payment method variants accepted by the card payment adapter."},"CartLineMatchStatus":{"type":"string","enum":["matched","missing","quantity_mismatch","ambiguous"],"title":"CartLineMatchStatus","description":"Match quality between one requested checkout line and observed cart UI."},"CartSubtotalKind":{"type":"string","enum":["items_subtotal","shipping","tip","tax","discount","fees","total","savings","other"],"title":"CartSubtotalKind","description":"Canonical purpose for one cart subtotal or adjustment row."},"CatalogAvailability":{"type":"string","enum":["in_stock","out_of_stock","available","unavailable","unknown"],"title":"CatalogAvailability","description":"Availability shared by product and service catalog results."},"CatalogCheckoutMode":{"type":"string","enum":["redirect","native"],"title":"CatalogCheckoutMode","description":"How a validated catalog checkout URL is intended to be opened."},"CatalogFulfillmentOptionRead":{"properties":{"type":{"$ref":"#/components/schemas/AgenticFulfillmentType"},"option_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Option Id"}},"additionalProperties":false,"type":"object","required":["type"],"title":"CatalogFulfillmentOptionRead","description":"One stable catalog fulfillment choice accepted by quote requests."},"CatalogFxRead-Input":{"properties":{"exchange_rate":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Exchange Rate","description":"Fee-inclusive native-to-presentment exchange rate."},"native_currency":{"$ref":"#/components/schemas/CurrencyCode","description":"Binding currency of the resolved merchant market."}},"additionalProperties":false,"type":"object","required":["exchange_rate","native_currency"],"title":"CatalogFxRead","description":"Buyer-presentment FX metadata; absent for native market currency."},"CatalogFxRead-Output":{"properties":{"exchange_rate":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Exchange Rate","description":"Fee-inclusive native-to-presentment exchange rate."},"native_currency":{"$ref":"#/components/schemas/CurrencyCode","description":"Binding currency of the resolved merchant market."}},"additionalProperties":false,"type":"object","required":["exchange_rate","native_currency"],"title":"CatalogFxRead","description":"Buyer-presentment FX metadata; absent for native market currency."},"CatalogItemPriceRead":{"properties":{"market":{"type":"string","maxLength":32,"minLength":1,"title":"Market","description":"Merchant-scoped market code that owns this price."},"currency":{"$ref":"#/components/schemas/CurrencyCode","description":"ISO 4217 currency of the returned integer minor-unit amounts."},"is_default":{"type":"boolean","title":"Is Default","description":"Whether this price belongs to the merchant's default market."},"unit_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Unit Amount","description":"Resolved fixed base amount; item rows use their default variant. Null for quoted pricing."},"min_amount":{"type":"integer","minimum":0.0,"title":"Min Amount","description":"Lowest effective selling amount in integer minor units."},"max_amount":{"type":"integer","minimum":0.0,"title":"Max Amount","description":"Highest effective selling amount in integer minor units."},"original_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Original Amount","description":"Undiscounted resolved base amount, or null when the base amount is not on sale."},"original_min_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Original Min Amount","description":"Lowest undiscounted effective amount when any price is on sale."},"original_max_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Original Max Amount","description":"Highest undiscounted effective amount when any price is on sale."},"fx":{"anyOf":[{"$ref":"#/components/schemas/CatalogFxRead-Output"},{"type":"null"}],"description":"Presentment conversion metadata on the selected market row; null for native market amounts."},"market_status":{"$ref":"#/components/schemas/MarketListingStatus","description":"Whether this priced item is listed or hidden in the market."}},"additionalProperties":false,"type":"object","required":["market","currency","is_default","min_amount","max_amount","market_status"],"title":"CatalogItemPriceRead","description":"Item-level market price plus its effective listing state.\n\nA missing item price row means the item is not priced in that market.  A\npresent row can still be hidden, which lets clients distinguish absent\npricing from an intentionally unpublished listing without joining a\nparallel market-status collection."},"CatalogItemPriceWrite":{"properties":{"market":{"type":"string","maxLength":32,"minLength":1,"title":"Market"},"unit_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Unit Amount"},"min_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Min Amount","description":"Inclusive lower price bound in integer minor units. Supplied with max_amount; may accompany unit_amount, which must fall inside it."},"max_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Amount","description":"Inclusive upper price bound in integer minor units. Supplied with min_amount; may accompany unit_amount, which must fall inside it."},"original_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Original Amount"},"is_available":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Available","description":"Optional market override; null inherits variant availability."},"market_status":{"$ref":"#/components/schemas/MarketListingStatus","description":"Whether this priced item is listed or hidden in the market.","default":"listed"}},"additionalProperties":false,"type":"object","required":["market"],"title":"CatalogItemPriceWrite","description":"Binding item price and listing state authored for one merchant market.\n\nItem-level prices are also the convenience prices for the default variant.\nNested variant prices deliberately omit ``market_status`` because listing\npublication belongs to the item, not to an individual variant."},"CatalogItemRead-Input":{"properties":{"id":{"type":"string","title":"Id"},"type":{"$ref":"#/components/schemas/CatalogItemType"},"merchant":{"$ref":"#/components/schemas/CatalogMerchantRead"},"market":{"anyOf":[{"type":"string","maxLength":32,"minLength":1},{"type":"null"}],"title":"Market"},"locale":{"anyOf":[{"$ref":"#/components/schemas/LocaleCode"},{"type":"null"}]},"title":{"type":"string","maxLength":255,"minLength":1,"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Url"},"categories":{"items":{"type":"string"},"type":"array","title":"Categories"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"media_urls":{"items":{"type":"string"},"type":"array","title":"Media Urls"},"fulfillment_options":{"items":{"$ref":"#/components/schemas/CatalogFulfillmentOptionRead"},"type":"array","title":"Fulfillment Options","description":"Stable catalog fulfillment choices. Empty when the source does not publish quote-compatible option identifiers."},"availability":{"$ref":"#/components/schemas/CatalogAvailability"},"price":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/FiatCatalogPriceRead-Input"},{"$ref":"#/components/schemas/TokenCatalogPriceRead"}],"discriminator":{"propertyName":"kind","mapping":{"fiat":"#/components/schemas/FiatCatalogPriceRead-Input","token":"#/components/schemas/TokenCatalogPriceRead"}}},{"type":"null"}],"title":"Price"},"variants":{"items":{"$ref":"#/components/schemas/CatalogVariantRead-Input"},"type":"array","title":"Variants"},"purchasable":{"type":"boolean","title":"Purchasable"},"availability_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Availability Url","description":"Read the concrete open slots, class occurrences, or nightly calendar for this item by POSTing its id, optional variant_id, and a booking window to this URL (date_from/date_until for appointments and classes, check_in/check_out for stays). Present only when at least one current variant is bookable, because an item that sells quantity has nothing to enumerate."},"listings":{"items":{"oneOf":[{"$ref":"#/components/schemas/MppCatalogListingRead-Input"},{"$ref":"#/components/schemas/UcpCatalogListingRead-Input"}],"discriminator":{"propertyName":"protocol","mapping":{"mpp":"#/components/schemas/MppCatalogListingRead-Input","ucp":"#/components/schemas/UcpCatalogListingRead-Input"}}},"type":"array","title":"Listings"}},"additionalProperties":false,"type":"object","required":["id","type","merchant","title","availability","purchasable"],"title":"CatalogItemRead","description":"One normalized product or service with one or more protocol listings."},"CatalogItemRead-Output":{"properties":{"id":{"type":"string","title":"Id"},"type":{"$ref":"#/components/schemas/CatalogItemType"},"merchant":{"$ref":"#/components/schemas/CatalogMerchantRead"},"market":{"anyOf":[{"type":"string","maxLength":32,"minLength":1},{"type":"null"}],"title":"Market"},"locale":{"anyOf":[{"$ref":"#/components/schemas/LocaleCode"},{"type":"null"}]},"title":{"type":"string","maxLength":255,"minLength":1,"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Url"},"categories":{"items":{"type":"string"},"type":"array","title":"Categories"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"media_urls":{"items":{"type":"string"},"type":"array","title":"Media Urls"},"fulfillment_options":{"items":{"$ref":"#/components/schemas/CatalogFulfillmentOptionRead"},"type":"array","title":"Fulfillment Options","description":"Stable catalog fulfillment choices. Empty when the source does not publish quote-compatible option identifiers."},"availability":{"$ref":"#/components/schemas/CatalogAvailability"},"price":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/FiatCatalogPriceRead-Output"},{"$ref":"#/components/schemas/TokenCatalogPriceRead"}],"discriminator":{"propertyName":"kind","mapping":{"fiat":"#/components/schemas/FiatCatalogPriceRead-Output","token":"#/components/schemas/TokenCatalogPriceRead"}}},{"type":"null"}],"title":"Price"},"variants":{"items":{"$ref":"#/components/schemas/CatalogVariantRead-Output"},"type":"array","title":"Variants"},"purchasable":{"type":"boolean","title":"Purchasable"},"availability_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Availability Url","description":"Read the concrete open slots, class occurrences, or nightly calendar for this item by POSTing its id, optional variant_id, and a booking window to this URL (date_from/date_until for appointments and classes, check_in/check_out for stays). Present only when at least one current variant is bookable, because an item that sells quantity has nothing to enumerate."},"listings":{"items":{"oneOf":[{"$ref":"#/components/schemas/MppCatalogListingRead-Output"},{"$ref":"#/components/schemas/UcpCatalogListingRead-Output"}],"discriminator":{"propertyName":"protocol","mapping":{"mpp":"#/components/schemas/MppCatalogListingRead-Output","ucp":"#/components/schemas/UcpCatalogListingRead-Output"}}},"type":"array","title":"Listings"}},"additionalProperties":false,"type":"object","required":["id","type","merchant","title","availability","purchasable"],"title":"CatalogItemRead","description":"One normalized product or service with one or more protocol listings."},"CatalogItemType":{"type":"string","enum":["product","service"],"title":"CatalogItemType","description":"Public catalog entity kinds shared by products and services."},"CatalogLookupCorrelation":{"properties":{"input_id":{"type":"string","title":"Input Id","description":"Identifier exactly as supplied in the lookup request."},"product_id":{"type":"string","title":"Product Id","description":"Stable product identifier the input resolved to."},"variant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Id","description":"Exact variant identifier when the input selected a variant."},"match":{"$ref":"#/components/schemas/CatalogLookupMatch","description":"Kind of catalog identifier that matched the input."}},"additionalProperties":false,"type":"object","required":["input_id","product_id","match"],"title":"CatalogLookupCorrelation","description":"Map one caller input to the normalized item or variant it resolved."},"CatalogLookupMatch":{"type":"string","enum":["product_id","variant_id","sku","handle","url"],"title":"CatalogLookupMatch","description":"How a lookup input matched one normalized catalog result."},"CatalogMediaRole":{"type":"string","enum":["primary","gallery"],"title":"CatalogMediaRole","description":"Presentation role of an item- or variant-owned catalog image."},"CatalogMerchantRead":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"slug":{"anyOf":[{"type":"string","maxLength":120,"minLength":1,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,118}[a-z0-9])?$"},{"type":"null"}],"title":"Slug"},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Url"},"network_business_profile_id":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Network Business Profile Id","description":"Stripe Network Business Profile identifier used to scope Shared Payment Token issuance for an internal OpenMerchant merchant."}},"additionalProperties":false,"type":"object","required":["name"],"title":"CatalogMerchantRead","description":"Merchant identity shared by all listings on one normalized item."},"CatalogOperationMessage":{"properties":{"type":{"$ref":"#/components/schemas/CatalogOperationMessageType","description":"Severity category of this operation message.","default":"info"},"code":{"type":"string","maxLength":120,"minLength":1,"title":"Code","description":"Stable machine-readable message code.","examples":["partial_lookup"]},"content":{"type":"string","maxLength":2000,"minLength":1,"title":"Content","description":"Buyer-platform-readable explanation of the message."},"path":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Path","description":"Request-field path associated with the message, when applicable.","examples":["ids[1]"]}},"additionalProperties":false,"type":"object","required":["code","content"],"title":"CatalogOperationMessage","description":"Portable informational or warning message for a catalog operation."},"CatalogOperationMessageType":{"type":"string","enum":["info","warning"],"title":"CatalogOperationMessageType","description":"Portable severity category for catalog-operation messages."},"CatalogPaymentExecutionStatus":{"type":"string","enum":["executable","advertised_only","unknown"],"title":"CatalogPaymentExecutionStatus","description":"Whether OpenMerchant can execute an advertised payment method."},"CatalogPaymentIntent":{"type":"string","enum":["charge","session","checkout","unknown"],"title":"CatalogPaymentIntent","description":"Normalized payment operation performed by a listing handler."},"CatalogPaymentMethodRead-Input":{"properties":{"rail":{"$ref":"#/components/schemas/CatalogPaymentRail"},"execution_status":{"$ref":"#/components/schemas/CatalogPaymentExecutionStatus"},"provider":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Provider"},"handler_id":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Handler Id"},"intent":{"$ref":"#/components/schemas/CatalogPaymentIntent","default":"unknown"},"price":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/FiatCatalogPriceRead-Input"},{"$ref":"#/components/schemas/TokenCatalogPriceRead"}],"discriminator":{"propertyName":"kind","mapping":{"fiat":"#/components/schemas/FiatCatalogPriceRead-Input","token":"#/components/schemas/TokenCatalogPriceRead"}}},{"type":"null"}],"title":"Price"},"dynamic":{"type":"boolean","title":"Dynamic","default":false},"unit_type":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Unit Type"}},"additionalProperties":false,"type":"object","required":["rail","execution_status"],"title":"CatalogPaymentMethodRead","description":"One payment rail advertised by a protocol listing."},"CatalogPaymentMethodRead-Output":{"properties":{"rail":{"$ref":"#/components/schemas/CatalogPaymentRail"},"execution_status":{"$ref":"#/components/schemas/CatalogPaymentExecutionStatus"},"provider":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Provider"},"handler_id":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Handler Id"},"intent":{"$ref":"#/components/schemas/CatalogPaymentIntent","default":"unknown"},"price":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/FiatCatalogPriceRead-Output"},{"$ref":"#/components/schemas/TokenCatalogPriceRead"}],"discriminator":{"propertyName":"kind","mapping":{"fiat":"#/components/schemas/FiatCatalogPriceRead-Output","token":"#/components/schemas/TokenCatalogPriceRead"}}},{"type":"null"}],"title":"Price"},"dynamic":{"type":"boolean","title":"Dynamic","default":false},"unit_type":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Unit Type"}},"additionalProperties":false,"type":"object","required":["rail","execution_status"],"title":"CatalogPaymentMethodRead","description":"One payment rail advertised by a protocol listing."},"CatalogPaymentRail":{"type":"string","enum":["stripe_spt","stripe_card","tempo_crypto","google_pay","other"],"title":"CatalogPaymentRail","description":"Payment rails advertised by one protocol listing."},"CatalogPriceFilterBase":{"properties":{"min":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Min","description":"Inclusive minimum unit price in minor currency units.","examples":[1000]},"max":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max","description":"Inclusive maximum unit price in minor currency units.","examples":[5000]}},"additionalProperties":false,"type":"object","title":"CatalogPriceFilterBase","description":"Inclusive price bounds expressed in integer minor currency units."},"CatalogProtocol":{"type":"string","enum":["mpp","ucp"],"title":"CatalogProtocol","description":"Commerce discovery protocols represented by the unified catalog."},"CatalogPublicationStatus":{"type":"string","enum":["draft","unpublished","pending","published"],"title":"CatalogPublicationStatus","description":"Publication lifecycle normalized across MPP and UCP listings."},"CatalogRequestRequirementKind":{"type":"string","enum":["path_parameter","request_body","query_parameter","unknown"],"title":"CatalogRequestRequirementKind","description":"Input requirements an agent must satisfy before calling an MPP endpoint."},"CatalogRequestRequirementRead":{"properties":{"kind":{"$ref":"#/components/schemas/CatalogRequestRequirementKind"},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"required":{"type":"boolean","title":"Required","default":true},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description"}},"additionalProperties":false,"type":"object","required":["kind","name"],"title":"CatalogRequestRequirementRead","description":"One input an agent must supply before invoking an MPP endpoint."},"CatalogResponseAnalytics":{"properties":{"openmerchant_attribution_id":{"type":"string","maxLength":64,"minLength":1,"title":"Openmerchant Attribution Id","description":"OpenMerchant discovery token to pass into later commerce analytics.","examples":["om_attr_01J8S3Q8AZ2A7P4H3K5M6N7R8T"]}},"additionalProperties":false,"type":"object","required":["openmerchant_attribution_id"],"title":"CatalogResponseAnalytics","description":"Fresh per-response token used to link discovery to commerce analytics."},"CatalogSourceKind":{"type":"string","enum":["internal","openmerchant_internal","mpp_registry","ucp_public","shopify_catalog","google_search_grounded","google_merchant_center","google_ai_commerce"],"title":"CatalogSourceKind","description":"Typed origins that may contribute listings to a catalog response."},"CatalogSourceState":{"type":"string","enum":["ok","stale","unavailable","disabled","auth_required","timed_out"],"title":"CatalogSourceState","description":"Health of a selected catalog source for one response."},"CatalogSourceStatusRead":{"properties":{"source":{"$ref":"#/components/schemas/CatalogSourceKind"},"state":{"$ref":"#/components/schemas/CatalogSourceState"},"returned_count":{"type":"integer","minimum":0.0,"title":"Returned Count"},"fetched_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Fetched At"},"warning_code":{"anyOf":[{"$ref":"#/components/schemas/CatalogSourceWarningCode"},{"type":"null"}]},"warning_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Warning Message"}},"additionalProperties":false,"type":"object","required":["source","state","returned_count"],"title":"CatalogSourceStatusRead","description":"Per-provider health and contribution metadata for a catalog response."},"CatalogSourceWarningCode":{"type":"string","enum":["stale_snapshot","provider_unavailable","provider_disabled","provider_auth_required","provider_timed_out","discovery_truncated","invalid_ucp_profile","unsupported_ucp_version","invalid_upstream_pagination","unsafe_ucp_target","signature_invalid","agent_profile_not_public","provider_forbidden"],"title":"CatalogSourceWarningCode","description":"Stable machine-readable reason for degraded catalog source health."},"CatalogTranslationRead":{"properties":{"locale":{"$ref":"#/components/schemas/LocaleCode"},"title":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"additionalProperties":false,"type":"object","required":["locale"],"title":"CatalogTranslationRead","description":"Persisted sparse locale override returned to catalog editors."},"CatalogTranslationWrite":{"properties":{"locale":{"$ref":"#/components/schemas/LocaleCode"},"title":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"additionalProperties":false,"type":"object","required":["locale"],"title":"CatalogTranslationWrite","description":"Sparse localized copy; null fields inherit the owner base fields."},"CatalogVariantAttributeRead":{"properties":{"name":{"type":"string","maxLength":120,"minLength":1,"title":"Name"},"value":{"type":"string","maxLength":255,"minLength":1,"title":"Value"}},"additionalProperties":false,"type":"object","required":["name","value"],"title":"CatalogVariantAttributeRead","description":"One selectable or descriptive name/value attribute on a variant."},"CatalogVariantCheckoutRead":{"properties":{"url":{"type":"string","maxLength":2048,"minLength":1,"title":"Url"},"mode":{"$ref":"#/components/schemas/CatalogCheckoutMode"}},"additionalProperties":false,"type":"object","required":["url","mode"],"title":"CatalogVariantCheckoutRead","description":"A validated checkout handoff associated with one concrete variant."},"CatalogVariantPriceRead":{"properties":{"market":{"type":"string","maxLength":32,"minLength":1,"title":"Market","description":"Merchant-scoped market code that owns this price."},"currency":{"$ref":"#/components/schemas/CurrencyCode","description":"ISO 4217 currency of the returned integer minor-unit amounts."},"is_default":{"type":"boolean","title":"Is Default","description":"Whether this price belongs to the merchant's default market."},"unit_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Unit Amount","description":"Resolved fixed base amount; item rows use their default variant. Null for quoted pricing."},"min_amount":{"type":"integer","minimum":0.0,"title":"Min Amount","description":"Lowest effective selling amount in integer minor units."},"max_amount":{"type":"integer","minimum":0.0,"title":"Max Amount","description":"Highest effective selling amount in integer minor units."},"original_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Original Amount","description":"Undiscounted resolved base amount, or null when the base amount is not on sale."},"original_min_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Original Min Amount","description":"Lowest undiscounted effective amount when any price is on sale."},"original_max_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Original Max Amount","description":"Highest undiscounted effective amount when any price is on sale."},"fx":{"anyOf":[{"$ref":"#/components/schemas/CatalogFxRead-Output"},{"type":"null"}],"description":"Presentment conversion metadata on the selected market row; null for native market amounts."},"is_available_override":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Available Override","description":"Null inherits the variant-level availability value."}},"additionalProperties":false,"type":"object","required":["market","currency","is_default","min_amount","max_amount"],"title":"CatalogVariantPriceRead","description":"Merchant-management variant price plus its availability override."},"CatalogVariantPriceWrite":{"properties":{"market":{"type":"string","maxLength":32,"minLength":1,"title":"Market"},"unit_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Unit Amount"},"min_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Min Amount","description":"Inclusive lower price bound in integer minor units. Supplied with max_amount; may accompany unit_amount, which must fall inside it."},"max_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Amount","description":"Inclusive upper price bound in integer minor units. Supplied with min_amount; may accompany unit_amount, which must fall inside it."},"original_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Original Amount"},"is_available":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Available","description":"Optional market override; null inherits variant availability."}},"additionalProperties":false,"type":"object","required":["market"],"title":"CatalogVariantPriceWrite","description":"Binding variant price authored for one merchant market."},"CatalogVariantRead-Input":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","maxLength":255,"minLength":1,"title":"Title"},"sku":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Sku"},"url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Url"},"checkout":{"anyOf":[{"$ref":"#/components/schemas/CatalogVariantCheckoutRead"},{"type":"null"}]},"attributes":{"items":{"$ref":"#/components/schemas/CatalogVariantAttributeRead"},"type":"array","title":"Attributes","description":"Selectable or descriptive variant name/value pairs. See [UCP selected options](https://ucp.dev/2026-08-25/specification/shopping/catalog#selected-option)."},"availability":{"$ref":"#/components/schemas/CatalogAvailability"},"price":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/FiatCatalogPriceRead-Input"},{"$ref":"#/components/schemas/TokenCatalogPriceRead"}],"discriminator":{"propertyName":"kind","mapping":{"fiat":"#/components/schemas/FiatCatalogPriceRead-Input","token":"#/components/schemas/TokenCatalogPriceRead"}}},{"type":"null"}],"title":"Price"},"purchasable":{"type":"boolean","title":"Purchasable"},"booking":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/PublicAppointmentBookingRead"},{"$ref":"#/components/schemas/PublicScheduledClassBookingRead"},{"$ref":"#/components/schemas/PublicStayBookingRead"}],"discriminator":{"propertyName":"type","mapping":{"appointment":"#/components/schemas/PublicAppointmentBookingRead","scheduled_class":"#/components/schemas/PublicScheduledClassBookingRead","stay":"#/components/schemas/PublicStayBookingRead"}}},{"type":"null"}],"title":"Booking","description":"Buyer-visible booking bounds when this variant sells time rather than quantity: the IANA timezone its schedule is authored in, the durations and party sizes it accepts, how much notice it needs, and how far ahead its calendar is open. Absent for ordinary quantity variants. The bounds say what may be asked for; the item's availability_url answers what is actually open."}},"additionalProperties":false,"type":"object","required":["id","title","availability","purchasable"],"title":"CatalogVariantRead","description":"A finite purchasable configuration of a catalog item."},"CatalogVariantRead-Output":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","maxLength":255,"minLength":1,"title":"Title"},"sku":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Sku"},"url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Url"},"checkout":{"anyOf":[{"$ref":"#/components/schemas/CatalogVariantCheckoutRead"},{"type":"null"}]},"attributes":{"items":{"$ref":"#/components/schemas/CatalogVariantAttributeRead"},"type":"array","title":"Attributes","description":"Selectable or descriptive variant name/value pairs. See [UCP selected options](https://ucp.dev/2026-08-25/specification/shopping/catalog#selected-option)."},"availability":{"$ref":"#/components/schemas/CatalogAvailability"},"price":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/FiatCatalogPriceRead-Output"},{"$ref":"#/components/schemas/TokenCatalogPriceRead"}],"discriminator":{"propertyName":"kind","mapping":{"fiat":"#/components/schemas/FiatCatalogPriceRead-Output","token":"#/components/schemas/TokenCatalogPriceRead"}}},{"type":"null"}],"title":"Price"},"purchasable":{"type":"boolean","title":"Purchasable"},"booking":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/PublicAppointmentBookingRead"},{"$ref":"#/components/schemas/PublicScheduledClassBookingRead"},{"$ref":"#/components/schemas/PublicStayBookingRead"}],"discriminator":{"propertyName":"type","mapping":{"appointment":"#/components/schemas/PublicAppointmentBookingRead","scheduled_class":"#/components/schemas/PublicScheduledClassBookingRead","stay":"#/components/schemas/PublicStayBookingRead"}}},{"type":"null"}],"title":"Booking","description":"Buyer-visible booking bounds when this variant sells time rather than quantity: the IANA timezone its schedule is authored in, the durations and party sizes it accepts, how much notice it needs, and how far ahead its calendar is open. Absent for ordinary quantity variants. The bounds say what may be asked for; the item's availability_url answers what is actually open."}},"additionalProperties":false,"type":"object","required":["id","title","availability","purchasable"],"title":"CatalogVariantRead","description":"A finite purchasable configuration of a catalog item."},"ChatThreadStatus":{"type":"string","enum":["active","open","archived","closed"],"title":"ChatThreadStatus","description":"Lifecycle state of a persisted chat thread."},"CheckoutPhase":{"type":"string","enum":["select","identify","fulfill","review","pay","submit","confirm"],"title":"CheckoutPhase","description":"Vertical-agnostic checkout phase — the universal spine every purchase\nshares, one realization of which is the retail ``CheckoutStep`` ladder.\n\nA phase is DERIVED from the native ``CheckoutStep`` (retail) or emitted\ndirectly by non-retail providers (travel/SaaS). Several phases are optional\nper flow (IDENTIFY / FULFILL / REVIEW), and — beyond a few universal\nprecedence edges (SELECT/PAY/SUBMIT precede CONFIRM) — their relative order\nis flow-specific, so no global ordering is asserted here. Ordering lives in\nthe per-style flow template (Phase 3B); this enum is only the vocabulary."},"ConfirmedImpressionLine":{"properties":{"attribution_id":{"type":"string","maxLength":64,"minLength":20,"title":"Attribution Id"},"item_id":{"type":"string","maxLength":255,"minLength":1,"title":"Item Id"},"variant_id":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Variant Id"}},"additionalProperties":false,"type":"object","required":["attribution_id","item_id"],"title":"ConfirmedImpressionLine","description":"One response entity that was visibly committed in a presentation."},"ConfirmedImpressionsCreate":{"properties":{"presentation_id":{"type":"string","maxLength":256,"minLength":1,"title":"Presentation Id","description":"Idempotency identity for one durable presentation; a new value does not let the same API-return entity increment analytics again."},"lines":{"items":{"$ref":"#/components/schemas/ConfirmedImpressionLine"},"type":"array","maxItems":6,"minItems":1,"title":"Lines"}},"additionalProperties":false,"type":"object","required":["presentation_id","lines"],"title":"ConfirmedImpressionsCreate","description":"Idempotent confirmation report for one committed message or surface."},"ConfirmedImpressionsRead":{"properties":{"confirmed_item_impressions":{"type":"integer","minimum":0.0,"title":"Confirmed Item Impressions","description":"Parent-item returns first confirmed by this presentation. Returns already confirmed under another presentation are excluded."},"confirmed_variant_impressions":{"type":"integer","minimum":0.0,"title":"Confirmed Variant Impressions","description":"Exact-variant returns first confirmed by this presentation. Returns already confirmed under another presentation are excluded."},"idempotent_replay":{"type":"boolean","title":"Idempotent Replay","description":"True only when this presentation ID was an identical retry."}},"additionalProperties":false,"type":"object","required":["confirmed_item_impressions","confirmed_variant_impressions","idempotent_replay"],"title":"ConfirmedImpressionsRead","description":"New response-scoped metric claims established by one presentation."},"CountryCode":{"type":"string","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","description":"ISO 3166-1 alpha-2 country code used by profile identity/address records."},"CredentialCardRead":{"properties":{"number":{"type":"string","title":"Number"},"exp_month":{"type":"integer","title":"Exp Month"},"exp_year":{"type":"integer","title":"Exp Year"},"cvc":{"type":"string","title":"Cvc"},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"}},"additionalProperties":false,"type":"object","required":["number","exp_month","exp_year","cvc"],"title":"CredentialCardRead","description":"One-time network-generated virtual card credentials (not the saved PAN)."},"CredentialChargeRequest":{"properties":{"amount_cents":{"type":"integer","exclusiveMinimum":0.0,"title":"Amount Cents","description":"Charge amount in minor currency units, drawn from the standing budget remaining allowance."},"currency_code":{"$ref":"#/components/schemas/CurrencyCode","description":"ISO 4217 currency for the charge; must match the standing budget currency."},"merchant":{"anyOf":[{"$ref":"#/components/schemas/CredentialMerchantInput"},{"type":"null"}],"description":"Optional merchant the charge is attributed to."}},"additionalProperties":false,"type":"object","required":["amount_cents","currency_code"],"title":"CredentialChargeRequest","description":"Simulate a test-mode charge against a payment method's standing budget.\n\nRecords an ``AgenticCredentialDraw`` against the standing budget and\ndecrements the remaining allowance by ``amount_cents``. Test mode only:\nno real credentials are retrieved from the provider. The merchant is\noptional and recorded on the draw for audit."},"CredentialChargeResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Created draw object id."},"payment_method_id":{"type":"string","title":"Payment Method Id"},"amount_cents":{"type":"integer","title":"Amount Cents"},"currency_code":{"$ref":"#/components/schemas/CurrencyCode"},"remaining_amount":{"type":"integer","title":"Remaining Amount","description":"Remaining standing-budget amount in minor currency units after this charge."},"merchant":{"anyOf":[{"$ref":"#/components/schemas/CredentialMerchantRead"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"additionalProperties":false,"type":"object","required":["id","payment_method_id","amount_cents","currency_code","remaining_amount","created_at"],"title":"CredentialChargeResponse","description":"Result of a simulated test-mode standing-budget charge."},"CredentialIssueRequest":{"properties":{"amount_cents":{"type":"integer","exclusiveMinimum":0.0,"title":"Amount Cents","description":"Required transaction amount in minor currency units. The network locks the credentials to this amount, and the backend validates the amount against current standing-allowance headroom. Retrieval itself does not record spend."},"currency_code":{"$ref":"#/components/schemas/CurrencyCode","description":"ISO 4217 currency for the credential retrieval."},"merchant":{"anyOf":[{"$ref":"#/components/schemas/CredentialMerchantInput"},{"type":"null"}],"description":"Optional merchant the credentials will be used at. When set, the network locks the card to this merchant."}},"additionalProperties":false,"type":"object","required":["amount_cents","currency_code"],"title":"CredentialIssueRequest","description":"Request card credentials against the standing instruction.\n\nThe provider requires a concrete amount when retrieving card credentials.\nThe requested currency must match the standing instruction's currency.\nMerchant details remain optional; when set, the network also locks the\ncard to that merchant."},"CredentialIssueResponse":{"properties":{"card":{"$ref":"#/components/schemas/CredentialCardRead"},"credentials_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Credentials Expires At"},"payment_method_id":{"type":"string","title":"Payment Method Id"},"amount_cents":{"type":"integer","title":"Amount Cents"},"currency_code":{"$ref":"#/components/schemas/CurrencyCode"},"remaining_budget_amount":{"type":"integer","title":"Remaining Budget Amount","description":"Current remaining standing-budget amount in minor currency units after validating the credential retrieval. Retrieval itself does not record spend."},"merchant":{"anyOf":[{"$ref":"#/components/schemas/CredentialMerchantRead"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["card","payment_method_id","amount_cents","currency_code","remaining_budget_amount"],"title":"CredentialIssueResponse","description":"Issued credentials plus the current remaining budget amount.\n\n``merchant`` is echoed when supplied so clients can display the exact\ncredential scope without receiving internal instruction or draw ids."},"CredentialMerchantInput":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"url":{"type":"string","minLength":1,"title":"Url","description":"Merchant website or checkout URL."},"country":{"$ref":"#/components/schemas/CountryCode","description":"ISO 3166-1 alpha-2 country code of the merchant."},"category":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Category","description":"Stripe issuing category code; mapped to a 4-digit MCC for the network."}},"additionalProperties":false,"type":"object","required":["name","url","country"],"title":"CredentialMerchantInput","description":"Merchant the one-time credentials will be used at (network-locked)."},"CredentialMerchantRead":{"properties":{"name":{"type":"string","title":"Name"},"url":{"type":"string","title":"Url"},"country":{"$ref":"#/components/schemas/CountryCode"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},"additionalProperties":false,"type":"object","required":["name","url","country"],"title":"CredentialMerchantRead","description":"Merchant scope echoed on issued one-time credentials."},"CurrencyCode":{"type":"string","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","description":"ISO 4217 currency codes accepted by persisted monetary surfaces."},"CustomizationChoicePriceRead":{"properties":{"market":{"type":"string","maxLength":32,"minLength":1,"title":"Market"},"delta_amount":{"type":"integer","title":"Delta Amount"},"currency":{"$ref":"#/components/schemas/CurrencyCode"}},"additionalProperties":false,"type":"object","required":["market","delta_amount","currency"],"title":"CustomizationChoicePriceRead","description":"Persisted customization delta with its market currency."},"CustomizationChoicePriceWrite":{"properties":{"market":{"type":"string","maxLength":32,"minLength":1,"title":"Market"},"delta_amount":{"type":"integer","title":"Delta Amount"}},"additionalProperties":false,"type":"object","required":["market","delta_amount"],"title":"CustomizationChoicePriceWrite","description":"Binding customization delta authored for one merchant market."},"DateOverride":{"properties":{"date":{"type":"string","format":"date","title":"Date"},"closed":{"type":"boolean","title":"Closed","default":false},"start_local":{"anyOf":[{"type":"string","format":"time"},{"type":"null"}],"title":"Start Local"},"end_local":{"anyOf":[{"type":"string","format":"time"},{"type":"null"}],"title":"End Local"}},"additionalProperties":false,"type":"object","required":["date"],"title":"DateOverride","description":"A single-date exception to the weekly windows.\n\nEither closes the date outright (``closed``) or replaces that day's\nhours with an explicit local window."},"DeliveryMethod":{"type":"string","enum":["hand_to_me","leave_at_door"],"title":"DeliveryMethod","description":"Preferred local delivery handoff instruction for checkout."},"Dob":{"properties":{"day":{"type":"integer","maximum":31.0,"minimum":1.0,"title":"Day","description":"Day of the month (1-31).","example":15},"month":{"type":"integer","maximum":12.0,"minimum":1.0,"title":"Month","description":"Month of the year (1-12).","example":6},"year":{"type":"integer","minimum":1900.0,"title":"Year","description":"Four-digit birth year.","example":1990}},"type":"object","required":["day","month","year"],"title":"Dob","description":"Date of birth in ``{day, month, year}`` shape for **write** requests.\n\nValidates that the components form a real calendar date and that the\nperson is at least 18 years old."},"DobRead":{"properties":{"day":{"type":"integer","maximum":31.0,"minimum":1.0,"title":"Day","description":"Day of the month (1-31).","example":15},"month":{"type":"integer","maximum":12.0,"minimum":1.0,"title":"Month","description":"Month of the year (1-12).","example":6},"year":{"type":"integer","minimum":1900.0,"title":"Year","description":"Four-digit birth year.","example":1990}},"type":"object","required":["day","month","year"],"title":"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."},"DurationRule":{"properties":{"min_minutes":{"type":"integer","maximum":10080.0,"minimum":1.0,"title":"Min Minutes","description":"Shortest bookable duration."},"max_minutes":{"type":"integer","maximum":10080.0,"minimum":1.0,"title":"Max Minutes","description":"Longest bookable duration. Must be reachable from `min_minutes` in whole `step_minutes` increments."},"step_minutes":{"type":"integer","maximum":1440.0,"minimum":1.0,"title":"Step Minutes","description":"Increment between allowed durations.","default":15}},"additionalProperties":false,"type":"object","required":["min_minutes","max_minutes"],"title":"DurationRule","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)."},"ExternalCatalogSearchTool-Input":{"properties":{"tool_call_id":{"type":"string","maxLength":255,"minLength":1,"title":"Tool Call Id"},"state":{"$ref":"#/components/schemas/ExternalChatToolState"},"error_text":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Error Text"},"tool_schema_version":{"type":"integer","const":12,"title":"Tool Schema Version","default":12},"tool_name":{"type":"string","const":"v1_search_catalog","title":"Tool Name","default":"v1_search_catalog"},"input":{"$ref":"#/components/schemas/V1CatalogSearchRequest-Input"},"output":{"anyOf":[{"$ref":"#/components/schemas/V1CatalogSearchResponse-Input"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["tool_call_id","state","input"],"title":"ExternalCatalogSearchTool","description":"Current catalog output publishes internal seller network profiles."},"ExternalCatalogSearchTool-Output":{"properties":{"tool_call_id":{"type":"string","maxLength":255,"minLength":1,"title":"Tool Call Id"},"state":{"$ref":"#/components/schemas/ExternalChatToolState"},"error_text":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Error Text"},"tool_schema_version":{"type":"integer","const":12,"title":"Tool Schema Version","default":12},"tool_name":{"type":"string","const":"v1_search_catalog","title":"Tool Name","default":"v1_search_catalog"},"input":{"$ref":"#/components/schemas/V1CatalogSearchRequest-Output"},"output":{"anyOf":[{"$ref":"#/components/schemas/app__schemas__chat__public_chat__V1CatalogSearchResponse-Output"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["tool_call_id","state","input"],"title":"ExternalCatalogSearchTool","description":"Current catalog output publishes internal seller network profiles."},"ExternalChatActorSessionRead":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type","default":"Bearer"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"additionalProperties":false,"type":"object","required":["access_token","expires_at"],"title":"ExternalChatActorSessionRead","description":"Server-to-server bearer session for one chat and profile."},"ExternalChatCreate":{"properties":{"profile_id":{"type":"string","maxLength":128,"minLength":1,"title":"Profile Id"}},"additionalProperties":false,"type":"object","required":["profile_id"],"title":"ExternalChatCreate","description":"Create one Shopping Agent thread for an owned profile."},"ExternalChatListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ExternalChatThreadRead"},"type":"array","title":"Items"},"total":{"type":"integer","minimum":0.0,"title":"Total"}},"additionalProperties":false,"type":"object","required":["total"],"title":"ExternalChatListResponse","description":"One page of Shopping Agent chat threads."},"ExternalChatMessageContent-Input":{"properties":{"schema_version":{"type":"integer","const":1,"title":"Schema Version","default":1},"parts":{"items":{"oneOf":[{"$ref":"#/components/schemas/ExternalChatTextPart"},{"$ref":"#/components/schemas/ExternalChatSourceUrlPart"},{"$ref":"#/components/schemas/ExternalChatToolPart-Input"}],"discriminator":{"propertyName":"kind","mapping":{"source_url":"#/components/schemas/ExternalChatSourceUrlPart","text":"#/components/schemas/ExternalChatTextPart","tool":"#/components/schemas/ExternalChatToolPart-Input"}}},"type":"array","maxItems":100,"minItems":1,"title":"Parts"}},"additionalProperties":false,"type":"object","required":["parts"],"title":"ExternalChatMessageContent","description":"Versioned, strongly typed content stored in ``tool_payload_json``."},"ExternalChatMessageContent-Output":{"properties":{"schema_version":{"type":"integer","const":1,"title":"Schema Version","default":1},"parts":{"items":{"oneOf":[{"$ref":"#/components/schemas/ExternalChatTextPart"},{"$ref":"#/components/schemas/ExternalChatSourceUrlPart"},{"$ref":"#/components/schemas/ExternalChatToolPart-Output"}],"discriminator":{"propertyName":"kind","mapping":{"source_url":"#/components/schemas/ExternalChatSourceUrlPart","text":"#/components/schemas/ExternalChatTextPart","tool":"#/components/schemas/ExternalChatToolPart-Output"}}},"type":"array","maxItems":100,"minItems":1,"title":"Parts"}},"additionalProperties":false,"type":"object","required":["parts"],"title":"ExternalChatMessageContent","description":"Versioned, strongly typed content stored in ``tool_payload_json``."},"ExternalChatMessageCreate":{"properties":{"external_message_id":{"type":"string","maxLength":128,"minLength":1,"title":"External Message Id"},"role":{"$ref":"#/components/schemas/ExternalChatMessageRole"},"content":{"$ref":"#/components/schemas/ExternalChatMessageContent-Input"},"confirmed_catalog_impressions":{"items":{"$ref":"#/components/schemas/ConfirmedImpressionLine"},"type":"array","maxItems":6,"title":"Confirmed Catalog Impressions","description":"Catalog cards actually rendered by this committed assistant message. The server validates every line against its attributed API response."}},"additionalProperties":false,"type":"object","required":["external_message_id","role","content"],"title":"ExternalChatMessageCreate","description":"Idempotently append one completed UI message."},"ExternalChatMessageListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ExternalChatMessageRead"},"type":"array","title":"Items"},"total":{"type":"integer","minimum":0.0,"title":"Total"}},"additionalProperties":false,"type":"object","required":["total"],"title":"ExternalChatMessageListResponse","description":"One chronological page of persisted UI messages."},"ExternalChatMessageRead":{"properties":{"external_message_id":{"type":"string","maxLength":128,"minLength":1,"title":"External Message Id"},"role":{"$ref":"#/components/schemas/ExternalChatMessageRole"},"content":{"$ref":"#/components/schemas/ExternalChatMessageContent-Output"},"id":{"type":"string","title":"Id"},"sequence_number":{"type":"integer","minimum":0.0,"title":"Sequence Number"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"additionalProperties":false,"type":"object","required":["external_message_id","role","content","id","sequence_number","created_at"],"title":"ExternalChatMessageRead","description":"Persisted message returned to the Shopping Agent server."},"ExternalChatMessageRole":{"type":"string","enum":["user","assistant"],"title":"ExternalChatMessageRole","description":"UI-message roles accepted by the public Shopping Agent chat API."},"ExternalChatSourceUrlPart":{"properties":{"kind":{"type":"string","const":"source_url","title":"Kind","default":"source_url"},"source_id":{"type":"string","maxLength":255,"minLength":1,"title":"Source Id"},"url":{"type":"string","maxLength":4096,"minLength":1,"title":"Url"},"title":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Title"}},"additionalProperties":false,"type":"object","required":["source_id","url"],"title":"ExternalChatSourceUrlPart","description":"One public web citation emitted by the search provider."},"ExternalChatTextPart":{"properties":{"kind":{"type":"string","const":"text","title":"Kind","default":"text"},"text":{"type":"string","maxLength":16000,"minLength":1,"title":"Text"}},"additionalProperties":false,"type":"object","required":["text"],"title":"ExternalChatTextPart","description":"One completed markdown text part."},"ExternalChatThreadRead":{"properties":{"id":{"type":"string","title":"Id"},"profile_id":{"type":"string","title":"Profile Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"status":{"$ref":"#/components/schemas/ChatThreadStatus"},"message_count":{"type":"integer","minimum":0.0,"title":"Message Count","default":0},"active_purchase_intent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Active Purchase Intent Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"additionalProperties":false,"type":"object","required":["id","profile_id","status","created_at","updated_at"],"title":"ExternalChatThreadRead","description":"Browser-safe persisted chat-thread summary."},"ExternalChatToolPart-Input":{"properties":{"kind":{"type":"string","const":"tool","title":"Kind","default":"tool"},"tool":{"oneOf":[{"$ref":"#/components/schemas/ExternalWebSearchTool-Input"},{"$ref":"#/components/schemas/ExternalCatalogSearchTool-Input"},{"$ref":"#/components/schemas/ExternalCreateQuoteToolV3-Input"},{"$ref":"#/components/schemas/ExternalGetQuoteToolV2-Input"},{"$ref":"#/components/schemas/ExternalRefreshQuoteToolV3-Input"},{"$ref":"#/components/schemas/ExternalPresentOffersToolV2-Input"},{"$ref":"#/components/schemas/ExternalCreatePurchaseIntentToolV4-Input"},{"$ref":"#/components/schemas/ExternalUpdatePurchaseIntentTool-Input"},{"$ref":"#/components/schemas/ExternalGetPurchaseIntentTool-Input"},{"$ref":"#/components/schemas/ExternalListPurchaseIntentsTool-Input"},{"$ref":"#/components/schemas/ExternalGetProfileTool-Input"},{"$ref":"#/components/schemas/ExternalListProfilesTool-Input"}],"title":"Tool","discriminator":{"propertyName":"tool_name","mapping":{"present_offers":"#/components/schemas/ExternalPresentOffersToolV2-Input","v1_create_purchase_intent":"#/components/schemas/ExternalCreatePurchaseIntentToolV4-Input","v1_create_quote":"#/components/schemas/ExternalCreateQuoteToolV3-Input","v1_get_profile":"#/components/schemas/ExternalGetProfileTool-Input","v1_get_purchase_intent":"#/components/schemas/ExternalGetPurchaseIntentTool-Input","v1_get_quote":"#/components/schemas/ExternalGetQuoteToolV2-Input","v1_list_profiles":"#/components/schemas/ExternalListProfilesTool-Input","v1_list_purchase_intents":"#/components/schemas/ExternalListPurchaseIntentsTool-Input","v1_refresh_quote":"#/components/schemas/ExternalRefreshQuoteToolV3-Input","v1_search_catalog":"#/components/schemas/ExternalCatalogSearchTool-Input","v1_update_purchase_intent":"#/components/schemas/ExternalUpdatePurchaseIntentTool-Input","web_search":"#/components/schemas/ExternalWebSearchTool-Input"}}}},"additionalProperties":false,"type":"object","required":["tool"],"title":"ExternalChatToolPart","description":"One allowlisted terminal tool part."},"ExternalChatToolPart-Output":{"properties":{"kind":{"type":"string","const":"tool","title":"Kind","default":"tool"},"tool":{"oneOf":[{"$ref":"#/components/schemas/ExternalWebSearchTool-Output"},{"$ref":"#/components/schemas/ExternalCatalogSearchTool-Output"},{"$ref":"#/components/schemas/ExternalCreateQuoteToolV3-Output"},{"$ref":"#/components/schemas/ExternalGetQuoteToolV2-Output"},{"$ref":"#/components/schemas/ExternalRefreshQuoteToolV3-Output"},{"$ref":"#/components/schemas/ExternalPresentOffersToolV2-Output"},{"$ref":"#/components/schemas/ExternalCreatePurchaseIntentToolV4-Output"},{"$ref":"#/components/schemas/ExternalUpdatePurchaseIntentTool-Output"},{"$ref":"#/components/schemas/ExternalGetPurchaseIntentTool-Output"},{"$ref":"#/components/schemas/ExternalListPurchaseIntentsTool-Output"},{"$ref":"#/components/schemas/ExternalGetProfileTool-Output"},{"$ref":"#/components/schemas/ExternalListProfilesTool-Output"}],"title":"Tool","discriminator":{"propertyName":"tool_name","mapping":{"present_offers":"#/components/schemas/ExternalPresentOffersToolV2-Output","v1_create_purchase_intent":"#/components/schemas/ExternalCreatePurchaseIntentToolV4-Output","v1_create_quote":"#/components/schemas/ExternalCreateQuoteToolV3-Output","v1_get_profile":"#/components/schemas/ExternalGetProfileTool-Output","v1_get_purchase_intent":"#/components/schemas/ExternalGetPurchaseIntentTool-Output","v1_get_quote":"#/components/schemas/ExternalGetQuoteToolV2-Output","v1_list_profiles":"#/components/schemas/ExternalListProfilesTool-Output","v1_list_purchase_intents":"#/components/schemas/ExternalListPurchaseIntentsTool-Output","v1_refresh_quote":"#/components/schemas/ExternalRefreshQuoteToolV3-Output","v1_search_catalog":"#/components/schemas/ExternalCatalogSearchTool-Output","v1_update_purchase_intent":"#/components/schemas/ExternalUpdatePurchaseIntentTool-Output","web_search":"#/components/schemas/ExternalWebSearchTool-Output"}}}},"additionalProperties":false,"type":"object","required":["tool"],"title":"ExternalChatToolPart","description":"One allowlisted terminal tool part."},"ExternalChatToolState":{"type":"string","enum":["output-available","output-error"],"title":"ExternalChatToolState","description":"Terminal AI SDK tool states retained in a completed transcript."},"ExternalCreatePurchaseIntentInputV2-Input":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ExternalPurchaseIntentCreateItemInputV2"},"type":"array","maxItems":50,"minItems":1,"title":"Items"},"policy_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Policy Id"},"currency_code":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}]},"preferences":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentCreatePreferencesInput-Input"},{"type":"null"}]},"confirmed":{"type":"boolean","const":true,"title":"Confirmed","description":"Model attestation that the shopper confirmed the exact purchase."}},"additionalProperties":false,"type":"object","required":["items","confirmed"],"title":"ExternalCreatePurchaseIntentInputV2","description":"Safe model-facing PI create arguments; profile and idempotency are bound."},"ExternalCreatePurchaseIntentInputV2-Output":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ExternalPurchaseIntentCreateItemInputV2"},"type":"array","maxItems":50,"minItems":1,"title":"Items"},"policy_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Policy Id"},"currency_code":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}]},"preferences":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentCreatePreferencesInput-Output"},{"type":"null"}]},"confirmed":{"type":"boolean","const":true,"title":"Confirmed","description":"Model attestation that the shopper confirmed the exact purchase."}},"additionalProperties":false,"type":"object","required":["items","confirmed"],"title":"ExternalCreatePurchaseIntentInputV2","description":"Safe model-facing PI create arguments; profile and idempotency are bound."},"ExternalCreatePurchaseIntentToolV4-Input":{"properties":{"tool_call_id":{"type":"string","maxLength":255,"minLength":1,"title":"Tool Call Id"},"state":{"$ref":"#/components/schemas/ExternalChatToolState"},"error_text":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Error Text"},"tool_schema_version":{"type":"integer","const":4,"title":"Tool Schema Version","default":4},"tool_name":{"type":"string","const":"v1_create_purchase_intent","title":"Tool Name","default":"v1_create_purchase_intent"},"input":{"$ref":"#/components/schemas/ExternalCreatePurchaseIntentInputV2-Input"},"output":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentSnapshotV4-Input"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["tool_call_id","state","input"],"title":"ExternalCreatePurchaseIntentToolV4","description":"Current create-PI transcript contract with selected quote projections."},"ExternalCreatePurchaseIntentToolV4-Output":{"properties":{"tool_call_id":{"type":"string","maxLength":255,"minLength":1,"title":"Tool Call Id"},"state":{"$ref":"#/components/schemas/ExternalChatToolState"},"error_text":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Error Text"},"tool_schema_version":{"type":"integer","const":4,"title":"Tool Schema Version","default":4},"tool_name":{"type":"string","const":"v1_create_purchase_intent","title":"Tool Name","default":"v1_create_purchase_intent"},"input":{"$ref":"#/components/schemas/ExternalCreatePurchaseIntentInputV2-Output"},"output":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentSnapshotV4-Output"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["tool_call_id","state","input"],"title":"ExternalCreatePurchaseIntentToolV4","description":"Current create-PI transcript contract with selected quote projections."},"ExternalCreateQuoteFulfillmentInputV2":{"properties":{"type":{"$ref":"#/components/schemas/AgenticFulfillmentType"},"option_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Option Id"},"rate_card_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Rate Card Id"}},"additionalProperties":false,"type":"object","required":["type"],"title":"ExternalCreateQuoteFulfillmentInputV2","description":"Model-selected public fulfillment constraint for a quote request.\n\nDestination addresses and buyer contact data are deliberately absent: the\nchat server injects those trusted profile fields after validating this\nselection against the catalog."},"ExternalCreateQuoteInputV3-Input":{"properties":{"merchant_slug":{"anyOf":[{"type":"string","maxLength":120,"minLength":1,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,118}[a-z0-9])?$"},{"type":"null"}],"title":"Merchant Slug"},"catalog_item_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Catalog Item Id"},"catalog_variant_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Catalog Variant Id"},"quantity":{"anyOf":[{"type":"integer","maximum":1000.0,"minimum":1.0},{"type":"null"}],"title":"Quantity"},"booking":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/QuantityBookingRequest"},{"$ref":"#/components/schemas/AppointmentBookingRequest"},{"$ref":"#/components/schemas/ScheduledClassBookingRequest"},{"$ref":"#/components/schemas/StayBookingRequest"}],"discriminator":{"propertyName":"type","mapping":{"appointment":"#/components/schemas/AppointmentBookingRequest","quantity":"#/components/schemas/QuantityBookingRequest","scheduled_class":"#/components/schemas/ScheduledClassBookingRequest","stay":"#/components/schemas/StayBookingRequest"}}},{"type":"null"}],"title":"Booking"},"fulfillment":{"anyOf":[{"$ref":"#/components/schemas/ExternalCreateQuoteFulfillmentInputV2"},{"type":"null"}]},"price_proposal":{"anyOf":[{"$ref":"#/components/schemas/ExternalQuotePriceProposalInputV3"},{"type":"null"}]}},"additionalProperties":false,"type":"object","title":"ExternalCreateQuoteInputV3","description":"Current model-safe quote request persisted with a completed MCP call.\n\nThe model may select a published fulfillment choice and make one explicit,\ntyped unit-price proposal. Account ownership, buyer contact data,\ndestinations, currency defaults, and idempotency remain server controlled."},"ExternalCreateQuoteInputV3-Output":{"properties":{"merchant_slug":{"anyOf":[{"type":"string","maxLength":120,"minLength":1,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,118}[a-z0-9])?$"},{"type":"null"}],"title":"Merchant Slug"},"catalog_item_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Catalog Item Id"},"catalog_variant_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Catalog Variant Id"},"quantity":{"anyOf":[{"type":"integer","maximum":1000.0,"minimum":1.0},{"type":"null"}],"title":"Quantity"},"booking":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/QuantityBookingRequest"},{"$ref":"#/components/schemas/AppointmentBookingRequest"},{"$ref":"#/components/schemas/ScheduledClassBookingRequest"},{"$ref":"#/components/schemas/StayBookingRequest"}],"discriminator":{"propertyName":"type","mapping":{"appointment":"#/components/schemas/AppointmentBookingRequest","quantity":"#/components/schemas/QuantityBookingRequest","scheduled_class":"#/components/schemas/ScheduledClassBookingRequest","stay":"#/components/schemas/StayBookingRequest"}}},{"type":"null"}],"title":"Booking"},"fulfillment":{"anyOf":[{"$ref":"#/components/schemas/ExternalCreateQuoteFulfillmentInputV2"},{"type":"null"}]},"price_proposal":{"anyOf":[{"$ref":"#/components/schemas/ExternalQuotePriceProposalInputV3"},{"type":"null"}]}},"additionalProperties":false,"type":"object","title":"ExternalCreateQuoteInputV3","description":"Current model-safe quote request persisted with a completed MCP call.\n\nThe model may select a published fulfillment choice and make one explicit,\ntyped unit-price proposal. Account ownership, buyer contact data,\ndestinations, currency defaults, and idempotency remain server controlled."},"ExternalCreateQuoteToolV3-Input":{"properties":{"tool_call_id":{"type":"string","maxLength":255,"minLength":1,"title":"Tool Call Id"},"state":{"$ref":"#/components/schemas/ExternalChatToolState"},"error_text":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Error Text"},"tool_schema_version":{"type":"integer","const":3,"title":"Tool Schema Version","default":3},"tool_name":{"type":"string","const":"v1_create_quote","title":"Tool Name","default":"v1_create_quote"},"input":{"$ref":"#/components/schemas/ExternalCreateQuoteInputV3-Input"},"output":{"anyOf":[{"$ref":"#/components/schemas/ExternalQuoteSnapshotV2-Input"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["tool_call_id","state","input"],"title":"ExternalCreateQuoteToolV3","description":"Current buyer quote-creation MCP invocation with server-bound currency."},"ExternalCreateQuoteToolV3-Output":{"properties":{"tool_call_id":{"type":"string","maxLength":255,"minLength":1,"title":"Tool Call Id"},"state":{"$ref":"#/components/schemas/ExternalChatToolState"},"error_text":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Error Text"},"tool_schema_version":{"type":"integer","const":3,"title":"Tool Schema Version","default":3},"tool_name":{"type":"string","const":"v1_create_quote","title":"Tool Name","default":"v1_create_quote"},"input":{"$ref":"#/components/schemas/ExternalCreateQuoteInputV3-Output"},"output":{"anyOf":[{"$ref":"#/components/schemas/ExternalQuoteSnapshotV2-Output"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["tool_call_id","state","input"],"title":"ExternalCreateQuoteToolV3","description":"Current buyer quote-creation MCP invocation with server-bound currency."},"ExternalExaWebSearchCost":{"properties":{"total":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Total"},"search":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Search"}},"additionalProperties":false,"type":"object","title":"ExternalExaWebSearchCost","description":"Typed Exa cost metadata retained for transcript fidelity."},"ExternalExaWebSearchInput-Input":{"properties":{"query":{"type":"string","maxLength":2000,"minLength":1,"title":"Query"},"type":{"anyOf":[{"$ref":"#/components/schemas/ExternalWebSearchType"},{"type":"null"}]},"num_results":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":1.0},{"type":"null"}],"title":"Num Results"},"category":{"anyOf":[{"$ref":"#/components/schemas/ExternalWebSearchCategory"},{"type":"null"}]},"user_location":{"anyOf":[{"type":"string","maxLength":2,"minLength":2},{"type":"null"}],"title":"User Location"},"include_domains":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Include Domains"},"exclude_domains":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Exclude Domains"},"start_published_date":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Start Published Date"},"end_published_date":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"End Published Date"},"contents":{"anyOf":[{"$ref":"#/components/schemas/ExternalWebSearchContentsInput-Input"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["query"],"title":"ExternalExaWebSearchInput","description":"Current Gateway Exa arguments retained in the transcript."},"ExternalExaWebSearchInput-Output":{"properties":{"query":{"type":"string","maxLength":2000,"minLength":1,"title":"Query"},"type":{"anyOf":[{"$ref":"#/components/schemas/ExternalWebSearchType"},{"type":"null"}]},"num_results":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":1.0},{"type":"null"}],"title":"Num Results"},"category":{"anyOf":[{"$ref":"#/components/schemas/ExternalWebSearchCategory"},{"type":"null"}]},"user_location":{"anyOf":[{"type":"string","maxLength":2,"minLength":2},{"type":"null"}],"title":"User Location"},"include_domains":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Include Domains"},"exclude_domains":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Exclude Domains"},"start_published_date":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Start Published Date"},"end_published_date":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"End Published Date"},"contents":{"anyOf":[{"$ref":"#/components/schemas/ExternalWebSearchContentsInput-Output"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["query"],"title":"ExternalExaWebSearchInput","description":"Current Gateway Exa arguments retained in the transcript."},"ExternalExaWebSearchResult-Input":{"properties":{"title":{"type":"string","maxLength":1000,"title":"Title"},"url":{"type":"string","maxLength":4096,"title":"Url"},"id":{"type":"string","maxLength":255,"minLength":1,"title":"Id"},"publishedDate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publisheddate"},"author":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Author"},"image":{"anyOf":[{"type":"string","maxLength":4096},{"type":"null"}],"title":"Image"},"favicon":{"anyOf":[{"type":"string","maxLength":4096},{"type":"null"}],"title":"Favicon"},"text":{"anyOf":[{"type":"string","maxLength":16000},{"type":"null"}],"title":"Text"},"highlights":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Highlights"},"highlightScores":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Highlightscores"},"summary":{"anyOf":[{"type":"string","maxLength":16000},{"type":"null"}],"title":"Summary"},"subpages":{"anyOf":[{"items":{"$ref":"#/components/schemas/ExternalExaWebSearchSubpageResult"},"type":"array"},{"type":"null"}],"title":"Subpages"},"extras":{"anyOf":[{"$ref":"#/components/schemas/ExternalExaWebSearchResultExtras"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["title","url","id"],"title":"ExternalExaWebSearchResult","description":"One typed Exa result, including its product image."},"ExternalExaWebSearchResult-Output":{"properties":{"title":{"type":"string","maxLength":1000,"title":"Title"},"url":{"type":"string","maxLength":4096,"title":"Url"},"id":{"type":"string","maxLength":255,"minLength":1,"title":"Id"},"publishedDate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publisheddate"},"author":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Author"},"image":{"anyOf":[{"type":"string","maxLength":4096},{"type":"null"}],"title":"Image"},"favicon":{"anyOf":[{"type":"string","maxLength":4096},{"type":"null"}],"title":"Favicon"},"text":{"anyOf":[{"type":"string","maxLength":16000},{"type":"null"}],"title":"Text"},"highlights":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Highlights"},"highlightScores":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Highlightscores"},"summary":{"anyOf":[{"type":"string","maxLength":16000},{"type":"null"}],"title":"Summary"},"subpages":{"anyOf":[{"items":{"$ref":"#/components/schemas/ExternalExaWebSearchSubpageResult"},"type":"array"},{"type":"null"}],"title":"Subpages"},"extras":{"anyOf":[{"$ref":"#/components/schemas/ExternalExaWebSearchResultExtras"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["title","url","id"],"title":"ExternalExaWebSearchResult","description":"One typed Exa result, including its product image."},"ExternalExaWebSearchResultExtras":{"properties":{"links":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Links"},"imageLinks":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Imagelinks"}},"additionalProperties":false,"type":"object","title":"ExternalExaWebSearchResultExtras","description":"Additional result links returned by Exa."},"ExternalExaWebSearchSubpageResult":{"properties":{"title":{"type":"string","maxLength":1000,"title":"Title"},"url":{"type":"string","maxLength":4096,"title":"Url"},"id":{"type":"string","maxLength":255,"minLength":1,"title":"Id"},"publishedDate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publisheddate"},"author":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Author"},"image":{"anyOf":[{"type":"string","maxLength":4096},{"type":"null"}],"title":"Image"},"favicon":{"anyOf":[{"type":"string","maxLength":4096},{"type":"null"}],"title":"Favicon"},"text":{"anyOf":[{"type":"string","maxLength":16000},{"type":"null"}],"title":"Text"},"highlights":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Highlights"},"highlightScores":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Highlightscores"},"summary":{"anyOf":[{"type":"string","maxLength":16000},{"type":"null"}],"title":"Summary"},"extras":{"anyOf":[{"$ref":"#/components/schemas/ExternalExaWebSearchResultExtras"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["title","url","id"],"title":"ExternalExaWebSearchSubpageResult","description":"One non-recursive Exa subpage result."},"ExternalExaWebSearchSuccess-Input":{"properties":{"requestId":{"type":"string","maxLength":255,"minLength":1,"title":"Requestid"},"searchType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Searchtype"},"resolvedSearchType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resolvedsearchtype"},"searchTime":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Searchtime","description":"Provider-reported search latency retained for transcript fidelity."},"results":{"items":{"$ref":"#/components/schemas/ExternalExaWebSearchResult-Input"},"type":"array","maxItems":100,"title":"Results"},"costDollars":{"anyOf":[{"$ref":"#/components/schemas/ExternalExaWebSearchCost"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["requestId","results"],"title":"ExternalExaWebSearchSuccess","description":"Successful Gateway Exa response."},"ExternalExaWebSearchSuccess-Output":{"properties":{"requestId":{"type":"string","maxLength":255,"minLength":1,"title":"Requestid"},"searchType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Searchtype"},"resolvedSearchType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resolvedsearchtype"},"searchTime":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Searchtime","description":"Provider-reported search latency retained for transcript fidelity."},"results":{"items":{"$ref":"#/components/schemas/ExternalExaWebSearchResult-Output"},"type":"array","maxItems":100,"title":"Results"},"costDollars":{"anyOf":[{"$ref":"#/components/schemas/ExternalExaWebSearchCost"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["requestId","results"],"title":"ExternalExaWebSearchSuccess","description":"Successful Gateway Exa response."},"ExternalGetProfileInput":{"properties":{"profile_id":{"type":"string","maxLength":128,"minLength":1,"title":"Profile Id"}},"additionalProperties":false,"type":"object","required":["profile_id"],"title":"ExternalGetProfileInput","description":"Arguments for reading the server-selected sample profile."},"ExternalGetProfileTool-Input":{"properties":{"tool_call_id":{"type":"string","maxLength":255,"minLength":1,"title":"Tool Call Id"},"state":{"$ref":"#/components/schemas/ExternalChatToolState"},"error_text":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Error Text"},"tool_schema_version":{"type":"integer","const":1,"title":"Tool Schema Version","default":1},"tool_name":{"type":"string","const":"v1_get_profile","title":"Tool Name","default":"v1_get_profile"},"input":{"$ref":"#/components/schemas/ExternalGetProfileInput"},"output":{"anyOf":[{"$ref":"#/components/schemas/ExternalProfileSnapshot"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["tool_call_id","state","input"],"title":"ExternalGetProfileTool","description":"Persisted profile-get invocation."},"ExternalGetProfileTool-Output":{"properties":{"tool_call_id":{"type":"string","maxLength":255,"minLength":1,"title":"Tool Call Id"},"state":{"$ref":"#/components/schemas/ExternalChatToolState"},"error_text":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Error Text"},"tool_schema_version":{"type":"integer","const":1,"title":"Tool Schema Version","default":1},"tool_name":{"type":"string","const":"v1_get_profile","title":"Tool Name","default":"v1_get_profile"},"input":{"$ref":"#/components/schemas/ExternalGetProfileInput"},"output":{"anyOf":[{"$ref":"#/components/schemas/ExternalProfileSnapshot"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["tool_call_id","state","input"],"title":"ExternalGetProfileTool","description":"Persisted profile-get invocation."},"ExternalGetPurchaseIntentInput":{"properties":{"purchase_intent_id":{"type":"string","maxLength":128,"minLength":1,"title":"Purchase Intent Id"},"expand":{"anyOf":[{"items":{"$ref":"#/components/schemas/ExternalPurchaseIntentExpand"},"type":"array","maxItems":3},{"type":"null"}],"title":"Expand"}},"additionalProperties":false,"type":"object","required":["purchase_intent_id"],"title":"ExternalGetPurchaseIntentInput","description":"Arguments for retrieving a single PI."},"ExternalGetPurchaseIntentTool-Input":{"properties":{"tool_call_id":{"type":"string","maxLength":255,"minLength":1,"title":"Tool Call Id"},"state":{"$ref":"#/components/schemas/ExternalChatToolState"},"error_text":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Error Text"},"tool_schema_version":{"type":"integer","const":1,"title":"Tool Schema Version","default":1},"tool_name":{"type":"string","const":"v1_get_purchase_intent","title":"Tool Name","default":"v1_get_purchase_intent"},"input":{"$ref":"#/components/schemas/ExternalGetPurchaseIntentInput"},"output":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentSnapshot-Input"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["tool_call_id","state","input"],"title":"ExternalGetPurchaseIntentTool","description":"Persisted PI-get invocation."},"ExternalGetPurchaseIntentTool-Output":{"properties":{"tool_call_id":{"type":"string","maxLength":255,"minLength":1,"title":"Tool Call Id"},"state":{"$ref":"#/components/schemas/ExternalChatToolState"},"error_text":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Error Text"},"tool_schema_version":{"type":"integer","const":1,"title":"Tool Schema Version","default":1},"tool_name":{"type":"string","const":"v1_get_purchase_intent","title":"Tool Name","default":"v1_get_purchase_intent"},"input":{"$ref":"#/components/schemas/ExternalGetPurchaseIntentInput"},"output":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentSnapshot-Output"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["tool_call_id","state","input"],"title":"ExternalGetPurchaseIntentTool","description":"Persisted PI-get invocation."},"ExternalGetQuoteInput":{"properties":{"quote_id":{"type":"string","maxLength":64,"minLength":1,"title":"Quote Id"}},"additionalProperties":false,"type":"object","required":["quote_id"],"title":"ExternalGetQuoteInput","description":"Known buyer-owned quote selected for polling or retrieval."},"ExternalGetQuoteToolV2-Input":{"properties":{"tool_call_id":{"type":"string","maxLength":255,"minLength":1,"title":"Tool Call Id"},"state":{"$ref":"#/components/schemas/ExternalChatToolState"},"error_text":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Error Text"},"tool_schema_version":{"type":"integer","const":2,"title":"Tool Schema Version","default":2},"tool_name":{"type":"string","const":"v1_get_quote","title":"Tool Name","default":"v1_get_quote"},"input":{"$ref":"#/components/schemas/ExternalGetQuoteInput"},"output":{"anyOf":[{"$ref":"#/components/schemas/ExternalQuoteSnapshotV2-Input"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["tool_call_id","state","input"],"title":"ExternalGetQuoteToolV2","description":"Current buyer quote-retrieval MCP invocation."},"ExternalGetQuoteToolV2-Output":{"properties":{"tool_call_id":{"type":"string","maxLength":255,"minLength":1,"title":"Tool Call Id"},"state":{"$ref":"#/components/schemas/ExternalChatToolState"},"error_text":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Error Text"},"tool_schema_version":{"type":"integer","const":2,"title":"Tool Schema Version","default":2},"tool_name":{"type":"string","const":"v1_get_quote","title":"Tool Name","default":"v1_get_quote"},"input":{"$ref":"#/components/schemas/ExternalGetQuoteInput"},"output":{"anyOf":[{"$ref":"#/components/schemas/ExternalQuoteSnapshotV2-Output"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["tool_call_id","state","input"],"title":"ExternalGetQuoteToolV2","description":"Current buyer quote-retrieval MCP invocation."},"ExternalLegacyWebSearchInput":{"properties":{"query":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"}],"title":"Query"},"max_results":{"anyOf":[{"type":"integer","maximum":20.0,"minimum":1.0},{"type":"null"}],"title":"Max Results"},"max_tokens_per_page":{"anyOf":[{"type":"integer","maximum":2048.0,"minimum":256.0},{"type":"null"}],"title":"Max Tokens Per Page"},"max_tokens":{"anyOf":[{"type":"integer","maximum":1000000.0,"minimum":1.0},{"type":"null"}],"title":"Max Tokens"},"country":{"anyOf":[{"type":"string","maxLength":2,"minLength":2},{"type":"null"}],"title":"Country"},"search_domain_filter":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":20},{"type":"null"}],"title":"Search Domain Filter"},"search_language_filter":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":10},{"type":"null"}],"title":"Search Language Filter"},"search_after_date":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Search After Date"},"search_before_date":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Search Before Date"},"last_updated_after_filter":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Last Updated After Filter"},"last_updated_before_filter":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Last Updated Before Filter"},"search_recency_filter":{"anyOf":[{"$ref":"#/components/schemas/ExternalWebSearchRecency"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["query"],"title":"ExternalLegacyWebSearchInput","description":"Historical Gateway Perplexity arguments retained for old transcripts."},"ExternalListProfilesInput":{"properties":{"limit":{"anyOf":[{"type":"integer","maximum":50.0,"minimum":1.0},{"type":"null"}],"title":"Limit"},"offset":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Offset"},"profile_type":{"anyOf":[{"$ref":"#/components/schemas/ProfileType"},{"type":"null"}]},"status":{"anyOf":[{"$ref":"#/components/schemas/ProfileStatus"},{"type":"null"}]},"country":{"anyOf":[{"$ref":"#/components/schemas/CountryCode"},{"type":"null"}]},"q":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Q"}},"additionalProperties":false,"type":"object","title":"ExternalListProfilesInput","description":"Filters accepted by the profile-list tool."},"ExternalListProfilesTool-Input":{"properties":{"tool_call_id":{"type":"string","maxLength":255,"minLength":1,"title":"Tool Call Id"},"state":{"$ref":"#/components/schemas/ExternalChatToolState"},"error_text":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Error Text"},"tool_schema_version":{"type":"integer","const":1,"title":"Tool Schema Version","default":1},"tool_name":{"type":"string","const":"v1_list_profiles","title":"Tool Name","default":"v1_list_profiles"},"input":{"$ref":"#/components/schemas/ExternalListProfilesInput"},"output":{"anyOf":[{"$ref":"#/components/schemas/ExternalProfileListSnapshot-Input"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["tool_call_id","state","input"],"title":"ExternalListProfilesTool","description":"Persisted profile-list invocation."},"ExternalListProfilesTool-Output":{"properties":{"tool_call_id":{"type":"string","maxLength":255,"minLength":1,"title":"Tool Call Id"},"state":{"$ref":"#/components/schemas/ExternalChatToolState"},"error_text":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Error Text"},"tool_schema_version":{"type":"integer","const":1,"title":"Tool Schema Version","default":1},"tool_name":{"type":"string","const":"v1_list_profiles","title":"Tool Name","default":"v1_list_profiles"},"input":{"$ref":"#/components/schemas/ExternalListProfilesInput"},"output":{"anyOf":[{"$ref":"#/components/schemas/ExternalProfileListSnapshot-Output"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["tool_call_id","state","input"],"title":"ExternalListProfilesTool","description":"Persisted profile-list invocation."},"ExternalListPurchaseIntentsInput":{"properties":{"status":{"anyOf":[{"$ref":"#/components/schemas/PurchaseIntentStatus"},{"type":"null"}]},"q":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Q"},"limit":{"anyOf":[{"type":"integer","maximum":50.0,"minimum":1.0},{"type":"null"}],"title":"Limit"},"offset":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Offset"}},"additionalProperties":false,"type":"object","title":"ExternalListPurchaseIntentsInput","description":"Bounded filters for listing the sample profile's PIs."},"ExternalListPurchaseIntentsTool-Input":{"properties":{"tool_call_id":{"type":"string","maxLength":255,"minLength":1,"title":"Tool Call Id"},"state":{"$ref":"#/components/schemas/ExternalChatToolState"},"error_text":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Error Text"},"tool_schema_version":{"type":"integer","const":1,"title":"Tool Schema Version","default":1},"tool_name":{"type":"string","const":"v1_list_purchase_intents","title":"Tool Name","default":"v1_list_purchase_intents"},"input":{"$ref":"#/components/schemas/ExternalListPurchaseIntentsInput"},"output":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentListSnapshot-Input"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["tool_call_id","state","input"],"title":"ExternalListPurchaseIntentsTool","description":"Persisted PI-list invocation."},"ExternalListPurchaseIntentsTool-Output":{"properties":{"tool_call_id":{"type":"string","maxLength":255,"minLength":1,"title":"Tool Call Id"},"state":{"$ref":"#/components/schemas/ExternalChatToolState"},"error_text":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Error Text"},"tool_schema_version":{"type":"integer","const":1,"title":"Tool Schema Version","default":1},"tool_name":{"type":"string","const":"v1_list_purchase_intents","title":"Tool Name","default":"v1_list_purchase_intents"},"input":{"$ref":"#/components/schemas/ExternalListPurchaseIntentsInput"},"output":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentListSnapshot-Output"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["tool_call_id","state","input"],"title":"ExternalListPurchaseIntentsTool","description":"Persisted PI-list invocation."},"ExternalOfferBookingOptionV2-Input":{"properties":{"id":{"type":"string","maxLength":128,"minLength":1,"title":"Id"},"quote_offer_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Quote Offer Id"},"label":{"type":"string","maxLength":120,"minLength":1,"title":"Label"},"booking_snapshot":{"oneOf":[{"$ref":"#/components/schemas/QuantityBookingSnapshot"},{"$ref":"#/components/schemas/AppointmentBookingSnapshot"},{"$ref":"#/components/schemas/ScheduledClassBookingSnapshot"},{"$ref":"#/components/schemas/StayBookingSnapshot"}],"title":"Booking Snapshot","discriminator":{"propertyName":"type","mapping":{"appointment":"#/components/schemas/AppointmentBookingSnapshot","quantity":"#/components/schemas/QuantityBookingSnapshot","scheduled_class":"#/components/schemas/ScheduledClassBookingSnapshot","stay":"#/components/schemas/StayBookingSnapshot"}}},"total_amount_cents":{"type":"integer","minimum":0.0,"title":"Total Amount Cents"},"unit_amount_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Unit Amount Cents"},"unit_count":{"type":"integer","minimum":1.0,"title":"Unit Count","default":1},"availability_status":{"$ref":"#/components/schemas/QuoteOfferAvailabilityStatus"},"cancellation":{"anyOf":[{"$ref":"#/components/schemas/ExternalOfferCancellationPolicy"},{"type":"null"}]},"subtotals":{"items":{"$ref":"#/components/schemas/PriceSubtotal"},"type":"array","maxItems":12,"title":"Subtotals"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"promotion":{"anyOf":[{"$ref":"#/components/schemas/AppliedPromotionRead"},{"type":"null"}]},"superseded_by_offer_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Superseded By Offer Id"}},"additionalProperties":false,"type":"object","required":["id","label","booking_snapshot","total_amount_cents","availability_status"],"title":"ExternalOfferBookingOptionV2","description":"Current booking option with promotion and supersession state."},"ExternalOfferBookingOptionV2-Output":{"properties":{"id":{"type":"string","maxLength":128,"minLength":1,"title":"Id"},"quote_offer_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Quote Offer Id"},"label":{"type":"string","maxLength":120,"minLength":1,"title":"Label"},"booking_snapshot":{"oneOf":[{"$ref":"#/components/schemas/QuantityBookingSnapshot"},{"$ref":"#/components/schemas/AppointmentBookingSnapshot"},{"$ref":"#/components/schemas/ScheduledClassBookingSnapshot"},{"$ref":"#/components/schemas/StayBookingSnapshot"}],"title":"Booking Snapshot","discriminator":{"propertyName":"type","mapping":{"appointment":"#/components/schemas/AppointmentBookingSnapshot","quantity":"#/components/schemas/QuantityBookingSnapshot","scheduled_class":"#/components/schemas/ScheduledClassBookingSnapshot","stay":"#/components/schemas/StayBookingSnapshot"}}},"total_amount_cents":{"type":"integer","minimum":0.0,"title":"Total Amount Cents"},"unit_amount_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Unit Amount Cents"},"unit_count":{"type":"integer","minimum":1.0,"title":"Unit Count","default":1},"availability_status":{"$ref":"#/components/schemas/QuoteOfferAvailabilityStatus"},"cancellation":{"anyOf":[{"$ref":"#/components/schemas/ExternalOfferCancellationPolicy"},{"type":"null"}]},"subtotals":{"items":{"$ref":"#/components/schemas/PriceSubtotal"},"type":"array","maxItems":12,"title":"Subtotals"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"promotion":{"anyOf":[{"$ref":"#/components/schemas/AppliedPromotionRead"},{"type":"null"}]},"superseded_by_offer_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Superseded By Offer Id"}},"additionalProperties":false,"type":"object","required":["id","label","booking_snapshot","total_amount_cents","availability_status"],"title":"ExternalOfferBookingOptionV2","description":"Current booking option with promotion and supersession state."},"ExternalOfferBookingV2-Input":{"properties":{"type":{"$ref":"#/components/schemas/BookingType"},"selected_option_id":{"type":"string","maxLength":128,"minLength":1,"title":"Selected Option Id"},"options":{"items":{"$ref":"#/components/schemas/ExternalOfferBookingOptionV2-Input"},"type":"array","maxItems":12,"minItems":1,"title":"Options"},"provider_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Provider Name"},"service_type":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Service Type"},"unit_description":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Unit Description"},"location_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Location Name"},"address":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Address"},"check_in_time":{"anyOf":[{"type":"string","pattern":"^\\d{2}:\\d{2}$"},{"type":"null"}],"title":"Check In Time"},"check_out_time":{"anyOf":[{"type":"string","pattern":"^\\d{2}:\\d{2}$"},{"type":"null"}],"title":"Check Out Time"},"distance_text":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Distance Text"},"rating":{"anyOf":[{"type":"number","maximum":5.0,"minimum":0.0},{"type":"null"}],"title":"Rating"},"rating_count":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Rating Count"},"includes":{"items":{"type":"string"},"type":"array","maxItems":8,"title":"Includes"},"excludes":{"items":{"type":"string"},"type":"array","maxItems":4,"title":"Excludes"},"on_site_charges":{"items":{"type":"string"},"type":"array","maxItems":4,"title":"On Site Charges"}},"additionalProperties":false,"type":"object","required":["type","selected_option_id","options"],"title":"ExternalOfferBookingV2","description":"Current booking-card facts with versioned quote option pricing."},"ExternalOfferBookingV2-Output":{"properties":{"type":{"$ref":"#/components/schemas/BookingType"},"selected_option_id":{"type":"string","maxLength":128,"minLength":1,"title":"Selected Option Id"},"options":{"items":{"$ref":"#/components/schemas/ExternalOfferBookingOptionV2-Output"},"type":"array","maxItems":12,"minItems":1,"title":"Options"},"provider_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Provider Name"},"service_type":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Service Type"},"unit_description":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Unit Description"},"location_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Location Name"},"address":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Address"},"check_in_time":{"anyOf":[{"type":"string","pattern":"^\\d{2}:\\d{2}$"},{"type":"null"}],"title":"Check In Time"},"check_out_time":{"anyOf":[{"type":"string","pattern":"^\\d{2}:\\d{2}$"},{"type":"null"}],"title":"Check Out Time"},"distance_text":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Distance Text"},"rating":{"anyOf":[{"type":"number","maximum":5.0,"minimum":0.0},{"type":"null"}],"title":"Rating"},"rating_count":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Rating Count"},"includes":{"items":{"type":"string"},"type":"array","maxItems":8,"title":"Includes"},"excludes":{"items":{"type":"string"},"type":"array","maxItems":4,"title":"Excludes"},"on_site_charges":{"items":{"type":"string"},"type":"array","maxItems":4,"title":"On Site Charges"}},"additionalProperties":false,"type":"object","required":["type","selected_option_id","options"],"title":"ExternalOfferBookingV2","description":"Current booking-card facts with versioned quote option pricing."},"ExternalOfferCancellationPolicy":{"properties":{"refundable":{"type":"boolean","title":"Refundable"},"free_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Free Until"},"penalty_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Penalty Cents"},"summary":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Summary"}},"additionalProperties":false,"type":"object","required":["refundable"],"title":"ExternalOfferCancellationPolicy","description":"Whether, and until when, a booked offer can still be given back.\n\nNeither the booking snapshot nor the quote-offer read models this today, so\nit is the one genuinely new piece of booking vocabulary. The card renders it\nas the pill beside the option row (\"Free cancellation until Sep 12, 6:00 PM\"\n/ \"Non-refundable · charged at booking\")."},"ExternalOfferCandidateV2-Input":{"properties":{"id":{"type":"string","maxLength":128,"minLength":1,"title":"Id"},"name":{"type":"string","maxLength":300,"minLength":1,"title":"Name"},"price_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Price Cents"},"price_max_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Price Max Cents"},"price_is_estimate":{"type":"boolean","title":"Price Is Estimate","default":false},"currency_code":{"$ref":"#/components/schemas/CurrencyCode"},"merchant_name":{"type":"string","maxLength":200,"minLength":1,"title":"Merchant Name"},"merchant_domain":{"type":"string","maxLength":255,"minLength":1,"title":"Merchant Domain"},"listing_url":{"type":"string","maxLength":4096,"minLength":1,"title":"Listing Url"},"rationale":{"type":"string","maxLength":2000,"title":"Rationale","default":""},"chips":{"items":{"type":"string"},"type":"array","maxItems":8,"title":"Chips"},"best":{"type":"boolean","title":"Best","default":false},"image_url":{"anyOf":[{"type":"string","maxLength":4096},{"type":"null"}],"title":"Image Url"},"quoted_pricing":{"anyOf":[{"$ref":"#/components/schemas/ExternalOfferQuotedPricingV2-Input"},{"type":"null"}]},"booking":{"anyOf":[{"$ref":"#/components/schemas/ExternalOfferBookingV2-Input"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["id","name","currency_code","merchant_name","merchant_domain","listing_url"],"title":"ExternalOfferCandidateV2","description":"Current shopper-facing card with optional authoritative quote pricing."},"ExternalOfferCandidateV2-Output":{"properties":{"id":{"type":"string","maxLength":128,"minLength":1,"title":"Id"},"name":{"type":"string","maxLength":300,"minLength":1,"title":"Name"},"price_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Price Cents"},"price_max_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Price Max Cents"},"price_is_estimate":{"type":"boolean","title":"Price Is Estimate","default":false},"currency_code":{"$ref":"#/components/schemas/CurrencyCode"},"merchant_name":{"type":"string","maxLength":200,"minLength":1,"title":"Merchant Name"},"merchant_domain":{"type":"string","maxLength":255,"minLength":1,"title":"Merchant Domain"},"listing_url":{"type":"string","maxLength":4096,"minLength":1,"title":"Listing Url"},"rationale":{"type":"string","maxLength":2000,"title":"Rationale","default":""},"chips":{"items":{"type":"string"},"type":"array","maxItems":8,"title":"Chips"},"best":{"type":"boolean","title":"Best","default":false},"image_url":{"anyOf":[{"type":"string","maxLength":4096},{"type":"null"}],"title":"Image Url"},"quoted_pricing":{"anyOf":[{"$ref":"#/components/schemas/ExternalOfferQuotedPricingV2-Output"},{"type":"null"}]},"booking":{"anyOf":[{"$ref":"#/components/schemas/ExternalOfferBookingV2-Output"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["id","name","currency_code","merchant_name","merchant_domain","listing_url"],"title":"ExternalOfferCandidateV2","description":"Current shopper-facing card with optional authoritative quote pricing."},"ExternalOfferQuotedPricingV2-Input":{"properties":{"quote_id":{"type":"string","maxLength":64,"minLength":1,"title":"Quote Id"},"quote_offer_id":{"type":"string","maxLength":64,"minLength":1,"title":"Quote Offer Id"},"total_amount_cents":{"type":"integer","minimum":0.0,"title":"Total Amount Cents"},"unit_amount_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Unit Amount Cents"},"unit_count":{"type":"integer","minimum":1.0,"title":"Unit Count","default":1},"currency":{"$ref":"#/components/schemas/CurrencyCode"},"subtotals":{"items":{"$ref":"#/components/schemas/PriceSubtotal"},"type":"array","maxItems":20,"title":"Subtotals"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"availability_status":{"$ref":"#/components/schemas/QuoteOfferAvailabilityStatus"},"promotion":{"anyOf":[{"$ref":"#/components/schemas/AppliedPromotionRead"},{"type":"null"}]},"superseded_by_offer_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Superseded By Offer Id"}},"additionalProperties":false,"type":"object","required":["quote_id","quote_offer_id","total_amount_cents","currency","expires_at","availability_status"],"title":"ExternalOfferQuotedPricingV2","description":"Exact quote authority retained on a non-booking offer card."},"ExternalOfferQuotedPricingV2-Output":{"properties":{"quote_id":{"type":"string","maxLength":64,"minLength":1,"title":"Quote Id"},"quote_offer_id":{"type":"string","maxLength":64,"minLength":1,"title":"Quote Offer Id"},"total_amount_cents":{"type":"integer","minimum":0.0,"title":"Total Amount Cents"},"unit_amount_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Unit Amount Cents"},"unit_count":{"type":"integer","minimum":1.0,"title":"Unit Count","default":1},"currency":{"$ref":"#/components/schemas/CurrencyCode"},"subtotals":{"items":{"$ref":"#/components/schemas/PriceSubtotal"},"type":"array","maxItems":20,"title":"Subtotals"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"availability_status":{"$ref":"#/components/schemas/QuoteOfferAvailabilityStatus"},"promotion":{"anyOf":[{"$ref":"#/components/schemas/AppliedPromotionRead"},{"type":"null"}]},"superseded_by_offer_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Superseded By Offer Id"}},"additionalProperties":false,"type":"object","required":["quote_id","quote_offer_id","total_amount_cents","currency","expires_at","availability_status"],"title":"ExternalOfferQuotedPricingV2","description":"Exact quote authority retained on a non-booking offer card."},"ExternalPresentOffersInputV2-Input":{"properties":{"offers":{"items":{"$ref":"#/components/schemas/ExternalOfferCandidateV2-Input"},"type":"array","maxItems":6,"minItems":1,"title":"Offers"},"intro":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Intro"}},"additionalProperties":false,"type":"object","required":["offers"],"title":"ExternalPresentOffersInputV2","description":"Current structured offer set with exact promotional quote authority."},"ExternalPresentOffersInputV2-Output":{"properties":{"offers":{"items":{"$ref":"#/components/schemas/ExternalOfferCandidateV2-Output"},"type":"array","maxItems":6,"minItems":1,"title":"Offers"},"intro":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Intro"}},"additionalProperties":false,"type":"object","required":["offers"],"title":"ExternalPresentOffersInputV2","description":"Current structured offer set with exact promotional quote authority."},"ExternalPresentOffersOutput":{"properties":{"presented_count":{"type":"integer","maximum":6.0,"minimum":0.0,"title":"Presented Count"}},"additionalProperties":false,"type":"object","required":["presented_count"],"title":"ExternalPresentOffersOutput","description":"Terminal ack so the presentation tool part persists as output-available."},"ExternalPresentOffersToolV2-Input":{"properties":{"tool_call_id":{"type":"string","maxLength":255,"minLength":1,"title":"Tool Call Id"},"state":{"$ref":"#/components/schemas/ExternalChatToolState"},"error_text":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Error Text"},"tool_schema_version":{"type":"integer","const":2,"title":"Tool Schema Version","default":2},"tool_name":{"type":"string","const":"present_offers","title":"Tool Name","default":"present_offers"},"input":{"$ref":"#/components/schemas/ExternalPresentOffersInputV2-Input"},"output":{"anyOf":[{"$ref":"#/components/schemas/ExternalPresentOffersOutput"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["tool_call_id","state","input"],"title":"ExternalPresentOffersToolV2","description":"Current offer-presentation invocation with exact quote pricing."},"ExternalPresentOffersToolV2-Output":{"properties":{"tool_call_id":{"type":"string","maxLength":255,"minLength":1,"title":"Tool Call Id"},"state":{"$ref":"#/components/schemas/ExternalChatToolState"},"error_text":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Error Text"},"tool_schema_version":{"type":"integer","const":2,"title":"Tool Schema Version","default":2},"tool_name":{"type":"string","const":"present_offers","title":"Tool Name","default":"present_offers"},"input":{"$ref":"#/components/schemas/ExternalPresentOffersInputV2-Output"},"output":{"anyOf":[{"$ref":"#/components/schemas/ExternalPresentOffersOutput"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["tool_call_id","state","input"],"title":"ExternalPresentOffersToolV2","description":"Current offer-presentation invocation with exact quote pricing."},"ExternalProfileListSnapshot-Input":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ExternalProfileSnapshot"},"type":"array","maxItems":1,"title":"Items"},"total":{"type":"integer","maximum":1.0,"minimum":0.0,"title":"Total"}},"additionalProperties":false,"type":"object","required":["total"],"title":"ExternalProfileListSnapshot","description":"Typed profile-list result after server-side scope filtering."},"ExternalProfileListSnapshot-Output":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ExternalProfileSnapshot"},"type":"array","maxItems":1,"title":"Items"},"total":{"type":"integer","maximum":1.0,"minimum":0.0,"title":"Total"}},"additionalProperties":false,"type":"object","required":["total"],"title":"ExternalProfileListSnapshot","description":"Typed profile-list result after server-side scope filtering."},"ExternalProfileSnapshot":{"properties":{"id":{"type":"string","title":"Id"},"profile_type":{"$ref":"#/components/schemas/ProfileType"},"status":{"$ref":"#/components/schemas/ProfileStatus"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"email":{"type":"string","title":"Email"},"phone":{"type":"string","title":"Phone"},"country":{"$ref":"#/components/schemas/CountryCode"},"default_currency":{"$ref":"#/components/schemas/CurrencyCode","default":"USD"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","profile_type","status","first_name","last_name","email","phone","country"],"title":"ExternalProfileSnapshot","description":"Profile fields safe to retain in a server-owned chat transcript."},"ExternalPurchaseIntentCartErrorSnapshot":{"properties":{"failure_reason":{"anyOf":[{"$ref":"#/components/schemas/app__schemas__chat__public_chat__PurchaseFailureReason"},{"type":"null"}]},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"additionalProperties":false,"type":"object","title":"ExternalPurchaseIntentCartErrorSnapshot","description":"Sanitized failure details retained with one PI cart."},"ExternalPurchaseIntentCartErrorSnapshotV3":{"properties":{"failure_reason":{"anyOf":[{"$ref":"#/components/schemas/app__integrations__browser__browser_clients__types__PurchaseFailureReason"},{"type":"null"}]},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"additionalProperties":false,"type":"object","title":"ExternalPurchaseIntentCartErrorSnapshotV3","description":"Current cart error vocabulary including protocol identity-link pauses."},"ExternalPurchaseIntentCartMerchantSnapshot":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"icon_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Image Url"}},"additionalProperties":false,"type":"object","title":"ExternalPurchaseIntentCartMerchantSnapshot","description":"Display-safe merchant identity retained with one PI cart."},"ExternalPurchaseIntentCartSnapshot-Input":{"properties":{"id":{"type":"string","title":"Id"},"status":{"$ref":"#/components/schemas/PurchaseCartExecutionStatus"},"can_retry":{"type":"boolean","title":"Can Retry","default":false},"can_cancel":{"type":"boolean","title":"Can Cancel","default":false},"merchant":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentCartMerchantSnapshot"},{"type":"null"}]},"merchant_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchant Domain"},"expected_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expected Amount"},"expected_fulfillment_fee_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Fulfillment Fee Amount"},"expected_tax_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Tax Amount"},"expected_total_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Total Amount"},"actual_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Actual Amount"},"is_synthetic":{"type":"boolean","title":"Is Synthetic","default":false},"synthetic_source":{"anyOf":[{"$ref":"#/components/schemas/SyntheticRecordSource"},{"type":"null"}]},"currency_code":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}]},"order_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Id"},"transaction_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transaction Id"},"subtotals":{"items":{"$ref":"#/components/schemas/ExternalPurchaseIntentCartSubtotalSnapshot"},"type":"array","title":"Subtotals"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"error":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentCartErrorSnapshot"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["id","status"],"title":"ExternalPurchaseIntentCartSnapshot","description":"Stable, browser-safe cart fields returned by PI MCP tools."},"ExternalPurchaseIntentCartSnapshot-Output":{"properties":{"id":{"type":"string","title":"Id"},"status":{"$ref":"#/components/schemas/PurchaseCartExecutionStatus"},"can_retry":{"type":"boolean","title":"Can Retry","default":false},"can_cancel":{"type":"boolean","title":"Can Cancel","default":false},"merchant":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentCartMerchantSnapshot"},{"type":"null"}]},"merchant_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchant Domain"},"expected_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expected Amount"},"expected_fulfillment_fee_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Fulfillment Fee Amount"},"expected_tax_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Tax Amount"},"expected_total_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Total Amount"},"actual_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Actual Amount"},"is_synthetic":{"type":"boolean","title":"Is Synthetic","default":false},"synthetic_source":{"anyOf":[{"$ref":"#/components/schemas/SyntheticRecordSource"},{"type":"null"}]},"currency_code":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}]},"order_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Id"},"transaction_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transaction Id"},"subtotals":{"items":{"$ref":"#/components/schemas/ExternalPurchaseIntentCartSubtotalSnapshot"},"type":"array","title":"Subtotals"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"error":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentCartErrorSnapshot"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["id","status"],"title":"ExternalPurchaseIntentCartSnapshot","description":"Stable, browser-safe cart fields returned by PI MCP tools."},"ExternalPurchaseIntentCartSnapshotV3-Input":{"properties":{"id":{"type":"string","title":"Id"},"status":{"$ref":"#/components/schemas/PurchaseCartExecutionStatus"},"can_retry":{"type":"boolean","title":"Can Retry","default":false},"can_cancel":{"type":"boolean","title":"Can Cancel","default":false},"merchant":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentCartMerchantSnapshot"},{"type":"null"}]},"merchant_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchant Domain"},"expected_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expected Amount"},"expected_fulfillment_fee_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Fulfillment Fee Amount"},"expected_tax_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Tax Amount"},"expected_total_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Total Amount"},"actual_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Actual Amount"},"is_synthetic":{"type":"boolean","title":"Is Synthetic","default":false},"synthetic_source":{"anyOf":[{"$ref":"#/components/schemas/SyntheticRecordSource"},{"type":"null"}]},"currency_code":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}]},"order_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Id"},"transaction_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transaction Id"},"subtotals":{"items":{"$ref":"#/components/schemas/ExternalPurchaseIntentCartSubtotalSnapshot"},"type":"array","title":"Subtotals"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"error":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentCartErrorSnapshotV3"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["id","status"],"title":"ExternalPurchaseIntentCartSnapshotV3","description":"Current cart projection using the extensible live failure vocabulary."},"ExternalPurchaseIntentCartSnapshotV3-Output":{"properties":{"id":{"type":"string","title":"Id"},"status":{"$ref":"#/components/schemas/PurchaseCartExecutionStatus"},"can_retry":{"type":"boolean","title":"Can Retry","default":false},"can_cancel":{"type":"boolean","title":"Can Cancel","default":false},"merchant":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentCartMerchantSnapshot"},{"type":"null"}]},"merchant_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchant Domain"},"expected_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expected Amount"},"expected_fulfillment_fee_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Fulfillment Fee Amount"},"expected_tax_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Tax Amount"},"expected_total_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Total Amount"},"actual_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Actual Amount"},"is_synthetic":{"type":"boolean","title":"Is Synthetic","default":false},"synthetic_source":{"anyOf":[{"$ref":"#/components/schemas/SyntheticRecordSource"},{"type":"null"}]},"currency_code":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}]},"order_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Id"},"transaction_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transaction Id"},"subtotals":{"items":{"$ref":"#/components/schemas/ExternalPurchaseIntentCartSubtotalSnapshot"},"type":"array","title":"Subtotals"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"error":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentCartErrorSnapshotV3"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["id","status"],"title":"ExternalPurchaseIntentCartSnapshotV3","description":"Current cart projection using the extensible live failure vocabulary."},"ExternalPurchaseIntentCartSubtotalSnapshot":{"properties":{"kind":{"type":"string","title":"Kind"},"amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Amount"}},"additionalProperties":false,"type":"object","required":["kind"],"title":"ExternalPurchaseIntentCartSubtotalSnapshot","description":"One typed subtotal from a PI cart's current public projection."},"ExternalPurchaseIntentCreateFulfillmentInput-Input":{"properties":{"method":{"anyOf":[{"$ref":"#/components/schemas/FulfillmentMethod"},{"type":"null"}]},"shipping_address_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Shipping Address Id"},"shipping_address":{"anyOf":[{"$ref":"#/components/schemas/ExternalShippingAddressInput"},{"type":"null"}]},"preferred_time":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Preferred Time"},"delivery_method":{"anyOf":[{"$ref":"#/components/schemas/DeliveryMethod"},{"type":"null"}]},"max_fee_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Fee Amount"},"tip_percentage":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Tip Percentage"}},"additionalProperties":false,"type":"object","title":"ExternalPurchaseIntentCreateFulfillmentInput","description":"Fulfillment preferences sent to PI creation."},"ExternalPurchaseIntentCreateFulfillmentInput-Output":{"properties":{"method":{"anyOf":[{"$ref":"#/components/schemas/FulfillmentMethod"},{"type":"null"}]},"shipping_address_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Shipping Address Id"},"shipping_address":{"anyOf":[{"$ref":"#/components/schemas/ExternalShippingAddressInput"},{"type":"null"}]},"preferred_time":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Preferred Time"},"delivery_method":{"anyOf":[{"$ref":"#/components/schemas/DeliveryMethod"},{"type":"null"}]},"max_fee_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Fee Amount"},"tip_percentage":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Tip Percentage"}},"additionalProperties":false,"type":"object","title":"ExternalPurchaseIntentCreateFulfillmentInput","description":"Fulfillment preferences sent to PI creation."},"ExternalPurchaseIntentCreateItemInputV2":{"properties":{"url":{"anyOf":[{"type":"string","maxLength":4096,"minLength":1},{"type":"null"}],"title":"Url"},"catalog_item_id":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Catalog Item Id"},"catalog_variant_id":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Catalog Variant Id"},"quote_offer_id":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Quote Offer Id"},"expected_amount":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Expected Amount"},"quantity":{"type":"integer","maximum":100.0,"exclusiveMinimum":0.0,"title":"Quantity","default":1},"title":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Title"},"image_url":{"anyOf":[{"type":"string","maxLength":4096},{"type":"null"}],"title":"Image Url"},"variant_attributes":{"additionalProperties":{"type":"string"},"type":"object","maxProperties":20,"title":"Variant Attributes"},"addressing_mode":{"anyOf":[{"$ref":"#/components/schemas/ItemAddressingMode"},{"type":"null"}]}},"additionalProperties":false,"type":"object","title":"ExternalPurchaseIntentCreateItemInputV2","description":"One model-confirmed URL, catalog, or quote-addressed PI item."},"ExternalPurchaseIntentCreatePreferencesInput-Input":{"properties":{"fulfillment":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentCreateFulfillmentInput-Input"},{"type":"null"}]},"estimate_tax":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Estimate Tax"}},"additionalProperties":false,"type":"object","title":"ExternalPurchaseIntentCreatePreferencesInput","description":"Top-level optional PI create preferences."},"ExternalPurchaseIntentCreatePreferencesInput-Output":{"properties":{"fulfillment":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentCreateFulfillmentInput-Output"},{"type":"null"}]},"estimate_tax":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Estimate Tax"}},"additionalProperties":false,"type":"object","title":"ExternalPurchaseIntentCreatePreferencesInput","description":"Top-level optional PI create preferences."},"ExternalPurchaseIntentExpand":{"type":"string","enum":["carts","items","payment_action"],"title":"ExternalPurchaseIntentExpand","description":"Public PI sections the persisted get-tool input may request."},"ExternalPurchaseIntentFulfillmentSnapshot":{"properties":{"method":{"$ref":"#/components/schemas/FulfillmentMethod","default":"ship"},"max_fee_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Fee Amount"},"tip_percentage":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Tip Percentage"},"shipping_address_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Shipping Address Id"},"preferred_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Preferred Time"},"delivery_method":{"anyOf":[{"$ref":"#/components/schemas/DeliveryMethod"},{"type":"null"}]}},"additionalProperties":false,"type":"object","title":"ExternalPurchaseIntentFulfillmentSnapshot","description":"Fulfillment preferences retained with a completed PI tool result."},"ExternalPurchaseIntentItemSnapshot":{"properties":{"id":{"type":"string","title":"Id"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"quantity":{"type":"integer","exclusiveMinimum":0.0,"title":"Quantity","default":1},"expected_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Amount"},"expected_currency":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}]},"variant_attributes":{"additionalProperties":{"type":"string"},"type":"object","maxProperties":20,"title":"Variant Attributes"},"status":{"$ref":"#/components/schemas/PurchaseIntentItemStatus"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"image_urls":{"items":{"type":"string"},"type":"array","maxItems":20,"title":"Image Urls"}},"additionalProperties":false,"type":"object","required":["id","status"],"title":"ExternalPurchaseIntentItemSnapshot","description":"Browser-safe PI line item retained with tool output."},"ExternalPurchaseIntentItemSnapshotV4-Input":{"properties":{"id":{"type":"string","title":"Id"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"quantity":{"type":"integer","exclusiveMinimum":0.0,"title":"Quantity","default":1},"expected_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Amount"},"expected_currency":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}]},"variant_attributes":{"additionalProperties":{"type":"string"},"type":"object","maxProperties":20,"title":"Variant Attributes"},"status":{"$ref":"#/components/schemas/PurchaseIntentItemStatus"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"image_urls":{"items":{"type":"string"},"type":"array","maxItems":20,"title":"Image Urls"},"quote_offer_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Quote Offer Id"},"quoted_pricing":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentQuotedPricingSnapshotV4-Input"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["id","status"],"title":"ExternalPurchaseIntentItemSnapshotV4","description":"Current PI item with its exact selected quote and promotion projection."},"ExternalPurchaseIntentItemSnapshotV4-Output":{"properties":{"id":{"type":"string","title":"Id"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"quantity":{"type":"integer","exclusiveMinimum":0.0,"title":"Quantity","default":1},"expected_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Amount"},"expected_currency":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}]},"variant_attributes":{"additionalProperties":{"type":"string"},"type":"object","maxProperties":20,"title":"Variant Attributes"},"status":{"$ref":"#/components/schemas/PurchaseIntentItemStatus"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"image_urls":{"items":{"type":"string"},"type":"array","maxItems":20,"title":"Image Urls"},"quote_offer_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Quote Offer Id"},"quoted_pricing":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentQuotedPricingSnapshotV4-Output"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["id","status"],"title":"ExternalPurchaseIntentItemSnapshotV4","description":"Current PI item with its exact selected quote and promotion projection."},"ExternalPurchaseIntentListItemSnapshot-Input":{"properties":{"id":{"type":"string","title":"Id"},"profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Id"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"source":{"anyOf":[{"$ref":"#/components/schemas/PurchaseIntentSource"},{"type":"null"}]},"status":{"$ref":"#/components/schemas/PurchaseIntentStatus"},"expected_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Amount"},"max_allowed_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Allowed Amount"},"currency_code":{"$ref":"#/components/schemas/CurrencyCode","default":"USD"},"items":{"items":{"$ref":"#/components/schemas/ExternalPurchaseIntentItemSnapshot"},"type":"array","title":"Items"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["id","status","created_at"],"title":"ExternalPurchaseIntentListItemSnapshot","description":"One public PI audit-list row."},"ExternalPurchaseIntentListItemSnapshot-Output":{"properties":{"id":{"type":"string","title":"Id"},"profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Id"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"source":{"anyOf":[{"$ref":"#/components/schemas/PurchaseIntentSource"},{"type":"null"}]},"status":{"$ref":"#/components/schemas/PurchaseIntentStatus"},"expected_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Amount"},"max_allowed_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Allowed Amount"},"currency_code":{"$ref":"#/components/schemas/CurrencyCode","default":"USD"},"items":{"items":{"$ref":"#/components/schemas/ExternalPurchaseIntentItemSnapshot"},"type":"array","title":"Items"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["id","status","created_at"],"title":"ExternalPurchaseIntentListItemSnapshot","description":"One public PI audit-list row."},"ExternalPurchaseIntentListSnapshot-Input":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ExternalPurchaseIntentListItemSnapshot-Input"},"type":"array","maxItems":50,"title":"Items"},"total":{"type":"integer","minimum":0.0,"title":"Total"}},"additionalProperties":false,"type":"object","required":["total"],"title":"ExternalPurchaseIntentListSnapshot","description":"Typed result of the PI-list MCP operation."},"ExternalPurchaseIntentListSnapshot-Output":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ExternalPurchaseIntentListItemSnapshot-Output"},"type":"array","maxItems":50,"title":"Items"},"total":{"type":"integer","minimum":0.0,"title":"Total"}},"additionalProperties":false,"type":"object","required":["total"],"title":"ExternalPurchaseIntentListSnapshot","description":"Typed result of the PI-list MCP operation."},"ExternalPurchaseIntentPaymentActionSnapshot":{"properties":{"kind":{"$ref":"#/components/schemas/app__schemas__chat__public_chat__PurchaseIntentPaymentActionKind"},"message":{"type":"string","title":"Message"}},"additionalProperties":false,"type":"object","required":["kind","message"],"title":"ExternalPurchaseIntentPaymentActionSnapshot","description":"Human action required before a PI can execute."},"ExternalPurchaseIntentPaymentActionSnapshotV2":{"properties":{"kind":{"$ref":"#/components/schemas/app__enums__PurchaseIntentPaymentActionKind"},"message":{"type":"string","title":"Message"}},"additionalProperties":false,"type":"object","required":["kind","message"],"title":"ExternalPurchaseIntentPaymentActionSnapshotV2","description":"Current PI action surface, including deferred card selection."},"ExternalPurchaseIntentPreferencesSnapshot-Input":{"properties":{"fulfillment":{"$ref":"#/components/schemas/ExternalPurchaseIntentFulfillmentSnapshot"},"estimate_tax":{"type":"boolean","title":"Estimate Tax","default":true},"preferred_protocol":{"anyOf":[{"$ref":"#/components/schemas/PurchaseProtocol"},{"type":"null"}]}},"additionalProperties":false,"type":"object","title":"ExternalPurchaseIntentPreferencesSnapshot","description":"Purchase preferences needed to restore editable checkout state."},"ExternalPurchaseIntentPreferencesSnapshot-Output":{"properties":{"fulfillment":{"$ref":"#/components/schemas/ExternalPurchaseIntentFulfillmentSnapshot"},"estimate_tax":{"type":"boolean","title":"Estimate Tax","default":true},"preferred_protocol":{"anyOf":[{"$ref":"#/components/schemas/PurchaseProtocol"},{"type":"null"}]}},"additionalProperties":false,"type":"object","title":"ExternalPurchaseIntentPreferencesSnapshot","description":"Purchase preferences needed to restore editable checkout state."},"ExternalPurchaseIntentQuotedPricingSnapshotV4-Input":{"properties":{"quote_id":{"type":"string","maxLength":64,"minLength":1,"title":"Quote Id"},"quote_offer_id":{"type":"string","maxLength":64,"minLength":1,"title":"Quote Offer Id"},"currency":{"$ref":"#/components/schemas/CurrencyCode"},"total_amount_cents":{"type":"integer","minimum":0.0,"title":"Total Amount Cents"},"subtotals":{"items":{"$ref":"#/components/schemas/PriceSubtotal"},"type":"array","maxItems":20,"title":"Subtotals"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"availability_status":{"$ref":"#/components/schemas/QuoteOfferAvailabilityStatus"},"superseded_by_offer_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Superseded By Offer Id"},"promotion":{"anyOf":[{"$ref":"#/components/schemas/AppliedPromotionRead"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["quote_id","quote_offer_id","currency","total_amount_cents","expires_at","availability_status"],"title":"ExternalPurchaseIntentQuotedPricingSnapshotV4","description":"Selected quote authority retained on a current PI transcript item."},"ExternalPurchaseIntentQuotedPricingSnapshotV4-Output":{"properties":{"quote_id":{"type":"string","maxLength":64,"minLength":1,"title":"Quote Id"},"quote_offer_id":{"type":"string","maxLength":64,"minLength":1,"title":"Quote Offer Id"},"currency":{"$ref":"#/components/schemas/CurrencyCode"},"total_amount_cents":{"type":"integer","minimum":0.0,"title":"Total Amount Cents"},"subtotals":{"items":{"$ref":"#/components/schemas/PriceSubtotal"},"type":"array","maxItems":20,"title":"Subtotals"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"availability_status":{"$ref":"#/components/schemas/QuoteOfferAvailabilityStatus"},"superseded_by_offer_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Superseded By Offer Id"},"promotion":{"anyOf":[{"$ref":"#/components/schemas/AppliedPromotionRead"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["quote_id","quote_offer_id","currency","total_amount_cents","expires_at","availability_status"],"title":"ExternalPurchaseIntentQuotedPricingSnapshotV4","description":"Selected quote authority retained on a current PI transcript item."},"ExternalPurchaseIntentSnapshot-Input":{"properties":{"id":{"type":"string","title":"Id"},"object":{"type":"string","title":"Object","default":"purchase_intent"},"expected_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Amount"},"item_subtotal_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Item Subtotal Cents"},"actual_amount":{"type":"integer","minimum":0.0,"title":"Actual Amount","default":0},"currency_code":{"$ref":"#/components/schemas/CurrencyCode","default":"USD"},"status":{"$ref":"#/components/schemas/PurchaseIntentStatus"},"failure_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failure Reason"},"profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Id"},"items":{"items":{"$ref":"#/components/schemas/ExternalPurchaseIntentItemSnapshot"},"type":"array","title":"Items"},"carts":{"anyOf":[{"items":{"$ref":"#/components/schemas/ExternalPurchaseIntentCartSnapshot-Input"},"type":"array"},{"type":"null"}],"title":"Carts"},"preferences":{"$ref":"#/components/schemas/ExternalPurchaseIntentPreferencesSnapshot-Input"},"payment_action":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentPaymentActionSnapshot"},{"type":"null"}]},"can_retry":{"type":"boolean","title":"Can Retry","default":false},"can_cancel":{"type":"boolean","title":"Can Cancel","default":false},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"additionalProperties":false,"type":"object","required":["id","status","created_at","updated_at"],"title":"ExternalPurchaseIntentSnapshot","description":"Stable PI projection used by chat tool results and the browser."},"ExternalPurchaseIntentSnapshot-Output":{"properties":{"id":{"type":"string","title":"Id"},"object":{"type":"string","title":"Object","default":"purchase_intent"},"expected_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Amount"},"item_subtotal_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Item Subtotal Cents"},"actual_amount":{"type":"integer","minimum":0.0,"title":"Actual Amount","default":0},"currency_code":{"$ref":"#/components/schemas/CurrencyCode","default":"USD"},"status":{"$ref":"#/components/schemas/PurchaseIntentStatus"},"failure_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failure Reason"},"profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Id"},"items":{"items":{"$ref":"#/components/schemas/ExternalPurchaseIntentItemSnapshot"},"type":"array","title":"Items"},"carts":{"anyOf":[{"items":{"$ref":"#/components/schemas/ExternalPurchaseIntentCartSnapshot-Output"},"type":"array"},{"type":"null"}],"title":"Carts"},"preferences":{"$ref":"#/components/schemas/ExternalPurchaseIntentPreferencesSnapshot-Output"},"payment_action":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentPaymentActionSnapshot"},{"type":"null"}]},"can_retry":{"type":"boolean","title":"Can Retry","default":false},"can_cancel":{"type":"boolean","title":"Can Cancel","default":false},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"additionalProperties":false,"type":"object","required":["id","status","created_at","updated_at"],"title":"ExternalPurchaseIntentSnapshot","description":"Stable PI projection used by chat tool results and the browser."},"ExternalPurchaseIntentSnapshotV4-Input":{"properties":{"id":{"type":"string","title":"Id"},"object":{"type":"string","title":"Object","default":"purchase_intent"},"expected_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Amount"},"item_subtotal_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Item Subtotal Cents"},"actual_amount":{"type":"integer","minimum":0.0,"title":"Actual Amount","default":0},"currency_code":{"$ref":"#/components/schemas/CurrencyCode","default":"USD"},"status":{"$ref":"#/components/schemas/PurchaseIntentStatus"},"failure_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failure Reason"},"profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Id"},"items":{"items":{"$ref":"#/components/schemas/ExternalPurchaseIntentItemSnapshotV4-Input"},"type":"array","title":"Items"},"carts":{"anyOf":[{"items":{"$ref":"#/components/schemas/ExternalPurchaseIntentCartSnapshotV3-Input"},"type":"array"},{"type":"null"}],"title":"Carts"},"preferences":{"$ref":"#/components/schemas/ExternalPurchaseIntentPreferencesSnapshot-Input"},"payment_action":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentPaymentActionSnapshotV2"},{"type":"null"}]},"can_retry":{"type":"boolean","title":"Can Retry","default":false},"can_cancel":{"type":"boolean","title":"Can Cancel","default":false},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"additionalProperties":false,"type":"object","required":["id","status","created_at","updated_at"],"title":"ExternalPurchaseIntentSnapshotV4","description":"Current create-PI output with exact selected quote projections."},"ExternalPurchaseIntentSnapshotV4-Output":{"properties":{"id":{"type":"string","title":"Id"},"object":{"type":"string","title":"Object","default":"purchase_intent"},"expected_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Amount"},"item_subtotal_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Item Subtotal Cents"},"actual_amount":{"type":"integer","minimum":0.0,"title":"Actual Amount","default":0},"currency_code":{"$ref":"#/components/schemas/CurrencyCode","default":"USD"},"status":{"$ref":"#/components/schemas/PurchaseIntentStatus"},"failure_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failure Reason"},"profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Id"},"items":{"items":{"$ref":"#/components/schemas/ExternalPurchaseIntentItemSnapshotV4-Output"},"type":"array","title":"Items"},"carts":{"anyOf":[{"items":{"$ref":"#/components/schemas/ExternalPurchaseIntentCartSnapshotV3-Output"},"type":"array"},{"type":"null"}],"title":"Carts"},"preferences":{"$ref":"#/components/schemas/ExternalPurchaseIntentPreferencesSnapshot-Output"},"payment_action":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentPaymentActionSnapshotV2"},{"type":"null"}]},"can_retry":{"type":"boolean","title":"Can Retry","default":false},"can_cancel":{"type":"boolean","title":"Can Cancel","default":false},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"additionalProperties":false,"type":"object","required":["id","status","created_at","updated_at"],"title":"ExternalPurchaseIntentSnapshotV4","description":"Current create-PI output with exact selected quote projections."},"ExternalPurchaseIntentUpdateItemInput":{"properties":{"id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Id"},"url":{"anyOf":[{"type":"string","maxLength":4096},{"type":"null"}],"title":"Url"},"expected_amount":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Expected Amount"},"quantity":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Quantity"},"remove":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Remove"},"variant_attributes":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object","maxProperties":20},{"type":"null"}],"title":"Variant Attributes"},"addressing_mode":{"anyOf":[{"$ref":"#/components/schemas/ItemAddressingMode"},{"type":"null"}]}},"additionalProperties":false,"type":"object","title":"ExternalPurchaseIntentUpdateItemInput","description":"One item mutation sent to the PI update tool."},"ExternalPurchaseIntentUpdatePreferencesInput-Input":{"properties":{"fulfillment_method":{"anyOf":[{"$ref":"#/components/schemas/FulfillmentMethod"},{"type":"null"}]},"preferred_time_text":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Preferred Time Text"},"delivery_method":{"anyOf":[{"$ref":"#/components/schemas/DeliveryMethod"},{"type":"null"}]},"shipping_address_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Shipping Address Id"},"shipping_address":{"anyOf":[{"$ref":"#/components/schemas/ExternalShippingAddressInput"},{"type":"null"}]},"max_fee_amount_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Fee Amount Cents"},"tip_percentage":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Tip Percentage"}},"additionalProperties":false,"type":"object","title":"ExternalPurchaseIntentUpdatePreferencesInput","description":"Mutable fulfillment preferences exposed to the model."},"ExternalPurchaseIntentUpdatePreferencesInput-Output":{"properties":{"fulfillment_method":{"anyOf":[{"$ref":"#/components/schemas/FulfillmentMethod"},{"type":"null"}]},"preferred_time_text":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Preferred Time Text"},"delivery_method":{"anyOf":[{"$ref":"#/components/schemas/DeliveryMethod"},{"type":"null"}]},"shipping_address_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Shipping Address Id"},"shipping_address":{"anyOf":[{"$ref":"#/components/schemas/ExternalShippingAddressInput"},{"type":"null"}]},"max_fee_amount_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Fee Amount Cents"},"tip_percentage":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Tip Percentage"}},"additionalProperties":false,"type":"object","title":"ExternalPurchaseIntentUpdatePreferencesInput","description":"Mutable fulfillment preferences exposed to the model."},"ExternalQuoteFulfillmentSnapshot":{"properties":{"type":{"$ref":"#/components/schemas/AgenticFulfillmentType"},"option_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Option Id"}},"additionalProperties":false,"type":"object","required":["type"],"title":"ExternalQuoteFulfillmentSnapshot","description":"Fulfillment choice bound to one authoritative quote offer."},"ExternalQuoteItemSnapshot":{"properties":{"sku":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sku"},"name":{"type":"string","title":"Name"},"catalog_item_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Catalog Item Id"},"variant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Id"},"variant_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Name"}},"additionalProperties":false,"type":"object","required":["name"],"title":"ExternalQuoteItemSnapshot","description":"Catalog identity snapshotted on a quote returned to the chat agent."},"ExternalQuoteMessageSnapshot":{"properties":{"code":{"type":"string","title":"Code"},"message":{"type":"string","title":"Message"},"offer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Offer Id"},"previous_total_amount_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Previous Total Amount Cents"}},"additionalProperties":false,"type":"object","required":["code","message"],"title":"ExternalQuoteMessageSnapshot","description":"Machine-readable merchant note attached to a quote or offer."},"ExternalQuoteOfferSnapshotV2-Input":{"properties":{"id":{"type":"string","title":"Id"},"booking_snapshot":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/QuantityBookingSnapshot"},{"$ref":"#/components/schemas/AppointmentBookingSnapshot"},{"$ref":"#/components/schemas/ScheduledClassBookingSnapshot"},{"$ref":"#/components/schemas/StayBookingSnapshot"}],"discriminator":{"propertyName":"type","mapping":{"appointment":"#/components/schemas/AppointmentBookingSnapshot","quantity":"#/components/schemas/QuantityBookingSnapshot","scheduled_class":"#/components/schemas/ScheduledClassBookingSnapshot","stay":"#/components/schemas/StayBookingSnapshot"}}},{"type":"null"}],"title":"Booking Snapshot"},"unit_count":{"type":"integer","minimum":1.0,"title":"Unit Count","default":1},"unit_amount_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Unit Amount Cents"},"total_amount_cents":{"type":"integer","minimum":0.0,"title":"Total Amount Cents"},"currency":{"$ref":"#/components/schemas/CurrencyCode"},"subtotals":{"items":{"$ref":"#/components/schemas/PriceSubtotal"},"type":"array","title":"Subtotals"},"availability_status":{"$ref":"#/components/schemas/QuoteOfferAvailabilityStatus"},"available_quantity":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Available Quantity"},"fulfillment":{"anyOf":[{"$ref":"#/components/schemas/ExternalQuoteFulfillmentSnapshot"},{"type":"null"}]},"merchant_offer_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchant Offer Reference"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"superseded_by_offer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Superseded By Offer Id"},"catalog_item_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Catalog Item Id"},"catalog_variant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Catalog Variant Id"},"promotion":{"anyOf":[{"$ref":"#/components/schemas/AppliedPromotionRead"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["id","total_amount_cents","currency","availability_status","expires_at"],"title":"ExternalQuoteOfferSnapshotV2","description":"Current priced alternative with exact catalog and promotion identity."},"ExternalQuoteOfferSnapshotV2-Output":{"properties":{"id":{"type":"string","title":"Id"},"booking_snapshot":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/QuantityBookingSnapshot"},{"$ref":"#/components/schemas/AppointmentBookingSnapshot"},{"$ref":"#/components/schemas/ScheduledClassBookingSnapshot"},{"$ref":"#/components/schemas/StayBookingSnapshot"}],"discriminator":{"propertyName":"type","mapping":{"appointment":"#/components/schemas/AppointmentBookingSnapshot","quantity":"#/components/schemas/QuantityBookingSnapshot","scheduled_class":"#/components/schemas/ScheduledClassBookingSnapshot","stay":"#/components/schemas/StayBookingSnapshot"}}},{"type":"null"}],"title":"Booking Snapshot"},"unit_count":{"type":"integer","minimum":1.0,"title":"Unit Count","default":1},"unit_amount_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Unit Amount Cents"},"total_amount_cents":{"type":"integer","minimum":0.0,"title":"Total Amount Cents"},"currency":{"$ref":"#/components/schemas/CurrencyCode"},"subtotals":{"items":{"$ref":"#/components/schemas/PriceSubtotal"},"type":"array","title":"Subtotals"},"availability_status":{"$ref":"#/components/schemas/QuoteOfferAvailabilityStatus"},"available_quantity":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Available Quantity"},"fulfillment":{"anyOf":[{"$ref":"#/components/schemas/ExternalQuoteFulfillmentSnapshot"},{"type":"null"}]},"merchant_offer_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchant Offer Reference"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"superseded_by_offer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Superseded By Offer Id"},"catalog_item_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Catalog Item Id"},"catalog_variant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Catalog Variant Id"},"promotion":{"anyOf":[{"$ref":"#/components/schemas/AppliedPromotionRead"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["id","total_amount_cents","currency","availability_status","expires_at"],"title":"ExternalQuoteOfferSnapshotV2","description":"Current priced alternative with exact catalog and promotion identity."},"ExternalQuotePriceProposalInputV3":{"properties":{"unit_amount":{"type":"integer","maximum":2147483647.0,"minimum":1.0,"title":"Unit Amount","description":"Proposed unit price in the authenticated profile's currency."}},"additionalProperties":false,"type":"object","required":["unit_amount"],"title":"ExternalQuotePriceProposalInputV3","description":"Model-selected target unit price with server-bound currency."},"ExternalQuoteSnapshotV2-Input":{"properties":{"id":{"type":"string","title":"Id"},"merchant_slug":{"type":"string","title":"Merchant Slug"},"status":{"$ref":"#/components/schemas/AgenticQuoteStatus"},"item":{"$ref":"#/components/schemas/ExternalQuoteItemSnapshot"},"quantity":{"type":"integer","minimum":1.0,"title":"Quantity","default":1},"offers":{"items":{"$ref":"#/components/schemas/ExternalQuoteOfferSnapshotV2-Input"},"type":"array","title":"Offers"},"messages":{"items":{"$ref":"#/components/schemas/ExternalQuoteMessageSnapshot"},"type":"array","title":"Messages"},"decline_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decline Note"},"negotiation":{"anyOf":[{"$ref":"#/components/schemas/QuoteNegotiationRead"},{"type":"null"}]},"next":{"anyOf":[{"$ref":"#/components/schemas/QuoteNextAction"},{"type":"null"}]},"resolution_generation":{"type":"integer","minimum":1.0,"title":"Resolution Generation","default":1},"order_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"additionalProperties":false,"type":"object","required":["id","merchant_slug","status","item","created_at"],"title":"ExternalQuoteSnapshotV2","description":"Current quote result safe to persist in a Shopping Agent transcript."},"ExternalQuoteSnapshotV2-Output":{"properties":{"id":{"type":"string","title":"Id"},"merchant_slug":{"type":"string","title":"Merchant Slug"},"status":{"$ref":"#/components/schemas/AgenticQuoteStatus"},"item":{"$ref":"#/components/schemas/ExternalQuoteItemSnapshot"},"quantity":{"type":"integer","minimum":1.0,"title":"Quantity","default":1},"offers":{"items":{"$ref":"#/components/schemas/ExternalQuoteOfferSnapshotV2-Output"},"type":"array","title":"Offers"},"messages":{"items":{"$ref":"#/components/schemas/ExternalQuoteMessageSnapshot"},"type":"array","title":"Messages"},"decline_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decline Note"},"negotiation":{"anyOf":[{"$ref":"#/components/schemas/QuoteNegotiationRead"},{"type":"null"}]},"next":{"anyOf":[{"$ref":"#/components/schemas/QuoteNextAction"},{"type":"null"}]},"resolution_generation":{"type":"integer","minimum":1.0,"title":"Resolution Generation","default":1},"order_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"additionalProperties":false,"type":"object","required":["id","merchant_slug","status","item","created_at"],"title":"ExternalQuoteSnapshotV2","description":"Current quote result safe to persist in a Shopping Agent transcript."},"ExternalRefreshQuoteInputV3":{"properties":{"quote_id":{"type":"string","maxLength":64,"minLength":1,"title":"Quote Id"},"price_proposal":{"anyOf":[{"$ref":"#/components/schemas/ExternalQuotePriceProposalInputV3"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["quote_id"],"title":"ExternalRefreshQuoteInputV3","description":"Current quote refresh with a server-currency-bound price proposal."},"ExternalRefreshQuoteToolV3-Input":{"properties":{"tool_call_id":{"type":"string","maxLength":255,"minLength":1,"title":"Tool Call Id"},"state":{"$ref":"#/components/schemas/ExternalChatToolState"},"error_text":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Error Text"},"tool_schema_version":{"type":"integer","const":3,"title":"Tool Schema Version","default":3},"tool_name":{"type":"string","const":"v1_refresh_quote","title":"Tool Name","default":"v1_refresh_quote"},"input":{"$ref":"#/components/schemas/ExternalRefreshQuoteInputV3"},"output":{"anyOf":[{"$ref":"#/components/schemas/ExternalQuoteSnapshotV2-Input"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["tool_call_id","state","input"],"title":"ExternalRefreshQuoteToolV3","description":"Current buyer quote-refresh MCP invocation with server-bound currency."},"ExternalRefreshQuoteToolV3-Output":{"properties":{"tool_call_id":{"type":"string","maxLength":255,"minLength":1,"title":"Tool Call Id"},"state":{"$ref":"#/components/schemas/ExternalChatToolState"},"error_text":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Error Text"},"tool_schema_version":{"type":"integer","const":3,"title":"Tool Schema Version","default":3},"tool_name":{"type":"string","const":"v1_refresh_quote","title":"Tool Name","default":"v1_refresh_quote"},"input":{"$ref":"#/components/schemas/ExternalRefreshQuoteInputV3"},"output":{"anyOf":[{"$ref":"#/components/schemas/ExternalQuoteSnapshotV2-Output"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["tool_call_id","state","input"],"title":"ExternalRefreshQuoteToolV3","description":"Current buyer quote-refresh MCP invocation with server-bound currency."},"ExternalShippingAddressInput":{"properties":{"line1":{"type":"string","maxLength":255,"minLength":1,"title":"Line1"},"line2":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Line2"},"city":{"type":"string","maxLength":120,"minLength":1,"title":"City"},"state":{"type":"string","maxLength":120,"minLength":1,"title":"State"},"postal_code":{"type":"string","maxLength":32,"minLength":1,"title":"Postal Code"},"country":{"$ref":"#/components/schemas/CountryCode"},"recipient_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Recipient Name"},"phone":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Phone"}},"additionalProperties":false,"type":"object","required":["line1","city","state","postal_code","country"],"title":"ExternalShippingAddressInput","description":"Inline shipping address accepted by PI create/update tools."},"ExternalUpdatePurchaseIntentInput-Input":{"properties":{"purchase_intent_id":{"type":"string","maxLength":128,"minLength":1,"title":"Purchase Intent Id"},"items":{"anyOf":[{"items":{"$ref":"#/components/schemas/ExternalPurchaseIntentUpdateItemInput"},"type":"array","maxItems":50,"minItems":1},{"type":"null"}],"title":"Items"},"preferences":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentUpdatePreferencesInput-Input"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["purchase_intent_id"],"title":"ExternalUpdatePurchaseIntentInput","description":"Safe PI update arguments; approval is intentionally absent."},"ExternalUpdatePurchaseIntentInput-Output":{"properties":{"purchase_intent_id":{"type":"string","maxLength":128,"minLength":1,"title":"Purchase Intent Id"},"items":{"anyOf":[{"items":{"$ref":"#/components/schemas/ExternalPurchaseIntentUpdateItemInput"},"type":"array","maxItems":50,"minItems":1},{"type":"null"}],"title":"Items"},"preferences":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentUpdatePreferencesInput-Output"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["purchase_intent_id"],"title":"ExternalUpdatePurchaseIntentInput","description":"Safe PI update arguments; approval is intentionally absent."},"ExternalUpdatePurchaseIntentTool-Input":{"properties":{"tool_call_id":{"type":"string","maxLength":255,"minLength":1,"title":"Tool Call Id"},"state":{"$ref":"#/components/schemas/ExternalChatToolState"},"error_text":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Error Text"},"tool_schema_version":{"type":"integer","const":1,"title":"Tool Schema Version","default":1},"tool_name":{"type":"string","const":"v1_update_purchase_intent","title":"Tool Name","default":"v1_update_purchase_intent"},"input":{"$ref":"#/components/schemas/ExternalUpdatePurchaseIntentInput-Input"},"output":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentSnapshot-Input"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["tool_call_id","state","input"],"title":"ExternalUpdatePurchaseIntentTool","description":"Persisted PI-update invocation."},"ExternalUpdatePurchaseIntentTool-Output":{"properties":{"tool_call_id":{"type":"string","maxLength":255,"minLength":1,"title":"Tool Call Id"},"state":{"$ref":"#/components/schemas/ExternalChatToolState"},"error_text":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Error Text"},"tool_schema_version":{"type":"integer","const":1,"title":"Tool Schema Version","default":1},"tool_name":{"type":"string","const":"v1_update_purchase_intent","title":"Tool Name","default":"v1_update_purchase_intent"},"input":{"$ref":"#/components/schemas/ExternalUpdatePurchaseIntentInput-Output"},"output":{"anyOf":[{"$ref":"#/components/schemas/ExternalPurchaseIntentSnapshot-Output"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["tool_call_id","state","input"],"title":"ExternalUpdatePurchaseIntentTool","description":"Persisted PI-update invocation."},"ExternalWebSearchCategory":{"type":"string","enum":["company","people","research paper","news","personal site","financial report"],"title":"ExternalWebSearchCategory","description":"Exa result categories accepted by AI Gateway."},"ExternalWebSearchContentsInput-Input":{"properties":{"text":{"anyOf":[{"type":"boolean"},{"$ref":"#/components/schemas/ExternalWebSearchTextInput"},{"type":"null"}],"title":"Text"},"highlights":{"anyOf":[{"type":"boolean"},{"$ref":"#/components/schemas/ExternalWebSearchHighlightsInput"},{"type":"null"}],"title":"Highlights"},"max_age_hours":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Max Age Hours"},"livecrawl_timeout":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Livecrawl Timeout"},"subpages":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Subpages"},"subpage_target":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Subpage Target"},"extras":{"anyOf":[{"$ref":"#/components/schemas/ExternalWebSearchExtrasInput"},{"type":"null"}]}},"additionalProperties":false,"type":"object","title":"ExternalWebSearchContentsInput","description":"Exa content and image extraction controls."},"ExternalWebSearchContentsInput-Output":{"properties":{"text":{"anyOf":[{"type":"boolean"},{"$ref":"#/components/schemas/ExternalWebSearchTextInput"},{"type":"null"}],"title":"Text"},"highlights":{"anyOf":[{"type":"boolean"},{"$ref":"#/components/schemas/ExternalWebSearchHighlightsInput"},{"type":"null"}],"title":"Highlights"},"max_age_hours":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Max Age Hours"},"livecrawl_timeout":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Livecrawl Timeout"},"subpages":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Subpages"},"subpage_target":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Subpage Target"},"extras":{"anyOf":[{"$ref":"#/components/schemas/ExternalWebSearchExtrasInput"},{"type":"null"}]}},"additionalProperties":false,"type":"object","title":"ExternalWebSearchContentsInput","description":"Exa content and image extraction controls."},"ExternalWebSearchError":{"properties":{"error":{"$ref":"#/components/schemas/ExternalWebSearchErrorCode"},"statusCode":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Statuscode"},"message":{"type":"string","maxLength":2000,"minLength":1,"title":"Message"}},"additionalProperties":false,"type":"object","required":["error","message"],"title":"ExternalWebSearchError","description":"Typed Gateway web-search failure response."},"ExternalWebSearchErrorCode":{"type":"string","enum":["api_error","rate_limit","timeout","invalid_input","configuration_error","execution_error","unknown"],"title":"ExternalWebSearchErrorCode","description":"Stable Gateway web-search failure categories retained in transcripts."},"ExternalWebSearchExtrasInput":{"properties":{"links":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Links"},"image_links":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Image Links"}},"additionalProperties":false,"type":"object","title":"ExternalWebSearchExtrasInput","description":"Additional typed links requested from Exa."},"ExternalWebSearchHighlightsInput":{"properties":{"query":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Query"},"max_characters":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Max Characters"}},"additionalProperties":false,"type":"object","title":"ExternalWebSearchHighlightsInput","description":"Bounded Exa highlight extraction controls."},"ExternalWebSearchRecency":{"type":"string","enum":["day","week","month","year"],"title":"ExternalWebSearchRecency","description":"Gateway-supported relative time windows for web discovery."},"ExternalWebSearchResult":{"properties":{"title":{"type":"string","maxLength":1000,"title":"Title"},"url":{"type":"string","maxLength":4096,"title":"Url"},"snippet":{"type":"string","maxLength":8000,"title":"Snippet"},"date":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Date"},"lastUpdated":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Lastupdated"}},"additionalProperties":false,"type":"object","required":["title","url","snippet"],"title":"ExternalWebSearchResult","description":"One public web-search result.\n\n``populate_by_name`` is required (matching the sibling\n``ExternalWebSearchSuccess`` / ``ExternalWebSearchError`` models): the\ntranscript write path persists content via ``model_dump(mode='json')``\nwith the default ``by_alias=False``, so ``last_updated`` lands in storage\nunder its snake_case field name (as ``None`` even when the provider omits\nit). Without ``populate_by_name`` the read-side ``model_validate`` would\nreject that stored key as an ``extra_forbidden`` input and 500 the whole\n``list_chat_messages`` response."},"ExternalWebSearchSuccess":{"properties":{"results":{"items":{"$ref":"#/components/schemas/ExternalWebSearchResult"},"type":"array","maxItems":20,"title":"Results"},"id":{"type":"string","maxLength":255,"minLength":1,"title":"Id"}},"additionalProperties":false,"type":"object","required":["results","id"],"title":"ExternalWebSearchSuccess","description":"Successful Gateway Perplexity response."},"ExternalWebSearchTextInput":{"properties":{"max_characters":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Max Characters"},"include_html_tags":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Include Html Tags"},"verbosity":{"anyOf":[{"$ref":"#/components/schemas/ExternalWebSearchTextVerbosity"},{"type":"null"}]},"include_sections":{"anyOf":[{"items":{"$ref":"#/components/schemas/ExternalWebSearchTextSection"},"type":"array"},{"type":"null"}],"title":"Include Sections"},"exclude_sections":{"anyOf":[{"items":{"$ref":"#/components/schemas/ExternalWebSearchTextSection"},"type":"array"},{"type":"null"}],"title":"Exclude Sections"}},"additionalProperties":false,"type":"object","title":"ExternalWebSearchTextInput","description":"Bounded Exa page-text extraction controls."},"ExternalWebSearchTextSection":{"type":"string","enum":["header","navigation","banner","body","sidebar","footer","metadata"],"title":"ExternalWebSearchTextSection","description":"Exa page sections accepted by bounded content extraction."},"ExternalWebSearchTextVerbosity":{"type":"string","enum":["compact","standard","full"],"title":"ExternalWebSearchTextVerbosity","description":"Exa text extraction density."},"ExternalWebSearchTool-Input":{"properties":{"tool_call_id":{"type":"string","maxLength":255,"minLength":1,"title":"Tool Call Id"},"state":{"$ref":"#/components/schemas/ExternalChatToolState"},"error_text":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Error Text"},"tool_schema_version":{"type":"integer","const":1,"title":"Tool Schema Version","default":1},"tool_name":{"type":"string","const":"web_search","title":"Tool Name","default":"web_search"},"input":{"anyOf":[{"$ref":"#/components/schemas/ExternalExaWebSearchInput-Input"},{"$ref":"#/components/schemas/ExternalLegacyWebSearchInput"}],"title":"Input"},"output":{"anyOf":[{"$ref":"#/components/schemas/ExternalExaWebSearchSuccess-Input"},{"$ref":"#/components/schemas/ExternalWebSearchSuccess"},{"$ref":"#/components/schemas/ExternalWebSearchError"},{"type":"null"}],"title":"Output"}},"additionalProperties":false,"type":"object","required":["tool_call_id","state","input"],"title":"ExternalWebSearchTool","description":"Persisted web-search invocation."},"ExternalWebSearchTool-Output":{"properties":{"tool_call_id":{"type":"string","maxLength":255,"minLength":1,"title":"Tool Call Id"},"state":{"$ref":"#/components/schemas/ExternalChatToolState"},"error_text":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Error Text"},"tool_schema_version":{"type":"integer","const":1,"title":"Tool Schema Version","default":1},"tool_name":{"type":"string","const":"web_search","title":"Tool Name","default":"web_search"},"input":{"anyOf":[{"$ref":"#/components/schemas/ExternalExaWebSearchInput-Output"},{"$ref":"#/components/schemas/ExternalLegacyWebSearchInput"}],"title":"Input"},"output":{"anyOf":[{"$ref":"#/components/schemas/ExternalExaWebSearchSuccess-Output"},{"$ref":"#/components/schemas/ExternalWebSearchSuccess"},{"$ref":"#/components/schemas/ExternalWebSearchError"},{"type":"null"}],"title":"Output"}},"additionalProperties":false,"type":"object","required":["tool_call_id","state","input"],"title":"ExternalWebSearchTool","description":"Persisted web-search invocation."},"ExternalWebSearchType":{"type":"string","enum":["auto","fast","instant"],"title":"ExternalWebSearchType","description":"Exa search execution modes exposed through AI Gateway."},"FiatCatalogPriceRead-Input":{"properties":{"kind":{"type":"string","const":"fiat","title":"Kind","default":"fiat"},"market":{"anyOf":[{"type":"string","maxLength":32,"minLength":1},{"type":"null"}],"title":"Market"},"currency":{"$ref":"#/components/schemas/CurrencyCode"},"unit_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Unit Amount"},"min_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Min Amount"},"max_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Amount"},"original_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Original Amount"},"fx":{"anyOf":[{"$ref":"#/components/schemas/CatalogFxRead-Input"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["currency"],"title":"FiatCatalogPriceRead","description":"A fixed or ranged ISO-currency catalog price."},"FiatCatalogPriceRead-Output":{"properties":{"kind":{"type":"string","const":"fiat","title":"Kind","default":"fiat"},"market":{"anyOf":[{"type":"string","maxLength":32,"minLength":1},{"type":"null"}],"title":"Market"},"currency":{"$ref":"#/components/schemas/CurrencyCode"},"unit_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Unit Amount"},"min_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Min Amount"},"max_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Amount"},"original_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Original Amount"},"fx":{"anyOf":[{"$ref":"#/components/schemas/CatalogFxRead-Output"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["currency"],"title":"FiatCatalogPriceRead","description":"A fixed or ranged ISO-currency catalog price."},"FulfillmentChargeBasis":{"type":"string","enum":["per_group","per_order","per_line","per_unit"],"title":"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)."},"FulfillmentChargeTotalType":{"type":"string","enum":["fulfillment","fee"],"title":"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."},"FulfillmentMethod":{"type":"string","enum":["pickup","delivery","ship"],"title":"FulfillmentMethod","description":"Preferred fulfillment method for a purchase intent checkout."},"FulfillmentProvider":{"type":"string","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","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."},"FulfillmentRateCardStatus":{"type":"string","enum":["active","paused"],"title":"FulfillmentRateCardStatus","description":"Whether a rate card may be offered to buyers.\n\n``PAUSED`` keeps the card, its tiers, and its attachments intact but takes\nit out of matching, so a seasonal service can be switched off and back on\nwithout losing configuration."},"FulfillmentRateKind":{"type":"string","enum":["free","flat","tiered","carrier"],"title":"FulfillmentRateKind","description":"How a fulfillment rate card computes its charge.\n\n``FREE`` never charges; ``FLAT`` charges one fixed ``flat_amount`` per\ncharge basis; ``TIERED`` resolves an amount from the card's tier grid\n(weight / order value / distance / item count / label bands); ``CARRIER``\nasks a live carrier for a quote and applies the card's markup. Every kind\nstill honours ``free_over_amount``, which zeroes the charge once the\nqualifying order value clears the threshold."},"FulfillmentTaxCategory":{"type":"string","enum":["shipping","service_fee","none"],"title":"FulfillmentTaxCategory","description":"How a rate card's charge is classified for tax.\n\n``SHIPPING`` and ``SERVICE_FEE`` route to different tax treatments in most\njurisdictions; ``NONE`` marks a charge the merchant asserts is not taxable."},"FulfillmentTierDimension":{"type":"string","enum":["weight","order_value","distance","item_count","label"],"title":"FulfillmentTierDimension","description":"One axis of a tiered rate card's amount grid.\n\nThe numeric dimensions band an inclusive upper bound (\"up to and\nincluding\"); ``LABEL`` is categorical and keys the amount off the\nfulfillment label of the group being priced. A card declares its axes\nexplicitly so exporters and the dashboard know the grid's shape without\ninspecting every tier row."},"FulfillmentZoneMode":{"type":"string","enum":["include","exclude"],"title":"FulfillmentZoneMode","description":"Whether listed zones are served or withheld inside a card's markets.\n\nEmpty rules serve the whole market in either mode. Exclusions retain\nwhole-market priority, including projections without a destination."},"GeneralPublicationReadinessCheckCode":{"type":"string","enum":["publication_capability","merchant_screening","stripe_account_connected","stripe_account_ready","api_endpoint_configuration","sellable_representative","representative_commerce_workflow","customer_identity_provider","fulfillment_rate_coverage","fulfillment_variant_weights"],"title":"GeneralPublicationReadinessCheckCode","description":"Stable checks shared by every merchant publication destination."},"GeneralPublicationReadinessCheckRead":{"properties":{"outcome":{"$ref":"#/components/schemas/ReadinessCheckOutcome"},"severity":{"$ref":"#/components/schemas/ReadinessCheckSeverity"},"title":{"type":"string","title":"Title"},"message":{"type":"string","title":"Message"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Remediation"},"commerce_stages":{"items":{"$ref":"#/components/schemas/ReadinessCommerceStageRead"},"type":"array","title":"Commerce Stages"},"code":{"$ref":"#/components/schemas/GeneralPublicationReadinessCheckCode"}},"additionalProperties":false,"type":"object","required":["outcome","severity","title","message","code"],"title":"GeneralPublicationReadinessCheckRead","description":"One destination-independent merchant publication requirement."},"GeneralPublicationReadinessRead":{"properties":{"status":{"$ref":"#/components/schemas/ReadinessStatus","default":"not_run"},"run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Run Id"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"stale":{"type":"boolean","title":"Stale","default":false},"catalog_checks_required":{"type":"boolean","title":"Catalog Checks Required","description":"Whether published products require catalog and quote checks.","default":true},"api_checks_required":{"type":"boolean","title":"Api Checks Required","description":"Whether publication requires API configuration and test evidence.","default":false},"representative_catalog_item_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Representative Catalog Item Id"},"representative_variant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Representative Variant Id"},"checks":{"items":{"$ref":"#/components/schemas/GeneralPublicationReadinessCheckRead"},"type":"array","title":"Checks"},"unmet_requirements":{"items":{"$ref":"#/components/schemas/GeneralPublicationReadinessCheckRead"},"type":"array","title":"Unmet Requirements","description":"General blocking failed or still-pending requirements only."}},"additionalProperties":false,"type":"object","title":"GeneralPublicationReadinessRead","description":"Latest general readiness run shared by every destination."},"GoogleCatalogEligibility":{"type":"string","enum":["eligible","pending","disapproved","unknown"],"title":"GoogleCatalogEligibility","description":"Google's UCP/free-listings eligibility assessment for one product."},"GuestCounts":{"properties":{"adults":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Adults","description":"Adult occupants across the booked rooms.","default":1},"children":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Children","description":"Child occupants, counted separately for occupancy rules.","default":0}},"additionalProperties":false,"type":"object","title":"GuestCounts","description":"Occupancy for a stay booking."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HotelBedPreference":{"type":"string","enum":["king","queen","two_beds","no_preference"],"title":"HotelBedPreference","description":"Preferred bed setup for hotel bookings."},"HotelSmokingPreference":{"type":"string","enum":["non_smoking","smoking","no_preference"],"title":"HotelSmokingPreference","description":"Preferred smoking-room option for hotel bookings."},"InitialStandingBudgetRequest":{"properties":{"amount_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Amount Cents","description":"Budget amount in minor currency units. Required to create the allowance."},"currency_code":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}],"description":"ISO 4217 currency for the allowance; defaults to USD when omitted."},"recurrence_frequency":{"anyOf":[{"$ref":"#/components/schemas/AgenticInstructionRecurrenceFrequency"},{"type":"null"}],"description":"Optional recurring reset cadence."},"description":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Description","description":"Shown to the cardholder during passkey verification."},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At","description":"Optional instruction expiry."}},"additionalProperties":false,"type":"object","title":"InitialStandingBudgetRequest","description":"Pre-configure a standing credentials allowance when creating a payment method.\n\nA subset of :class:`StandingBudgetCommandRequest` with the action fixed to\n\"create\": callers supply only the budget fields, never an ``action`` or a\nverification payload. Used for the ``initial_budget`` on payment-method\ncreation. Amount validation is left to the service layer (typed error)\nrather than Pydantic, matching the budget-command contract."},"IntegrationCheckKind":{"type":"string","enum":["quote","order"],"title":"IntegrationCheckKind","description":"Business responses that an integration check can verify."},"IssuingCapabilityRequest":{"properties":{"requested":{"type":"boolean","title":"Requested","description":"Whether this capability is requested for the profile."}},"additionalProperties":false,"type":"object","required":["requested"],"title":"IssuingCapabilityRequest","description":"Request payload for the profile Issuing capability."},"ItemAddressingMode":{"type":"string","enum":["product_url","merchant_surface"],"title":"ItemAddressingMode","description":"How a checkout line's URL relates to the item's identity.\n\n- ``PRODUCT_URL`` — the URL IS the item (classic product page:\n  ``/p/…``, ``?variant=…``); variant attributes only refine it. Default.\n- ``MERCHANT_SURFACE`` — the URL is an ordering SURFACE (shared menu,\n  category, configurator, store-scoped app) and the item is identified\n  by title + variant attributes, not the URL. Page-scoped extraction on\n  such a surface can latch onto a different prominent listing, so\n  extraction must be target-first.\n\nDefined here (harness vocabulary, monolith-free) and re-exported from\n``app.enums``; the app-domain resolution-provenance sibling\n``ItemAddressingModeSource`` lives in ``app.enums``."},"ItemAvailability":{"type":"string","enum":["in_stock","out_of_stock","unknown"],"title":"ItemAvailability","description":"Stock availability observed on a merchant's product page.\n\nMapped from schema.org offer availability values (JSON-LD / OpenGraph)\nand DOM out-of-stock markers. ``UNKNOWN`` means the page gave no\nreadable availability signal — treated as purchasable (fail-open)."},"JsonValue":{},"LegalGender":{"type":"string","enum":["male","female","x"],"title":"LegalGender","description":"Legal-document gender marker used for travel and identity workflows."},"LocaleCode":{"type":"string","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","description":"BCP 47 locale tags accepted by profile localization preferences."},"LocationHoursPeriodRead":{"properties":{"weekday":{"$ref":"#/components/schemas/WeekdayCode","description":"Local weekday when this period opens."},"opens_at":{"type":"string","format":"time","title":"Opens At","description":"Local wall-clock opening time."},"closes_at":{"type":"string","format":"time","title":"Closes At","description":"Local wall-clock closing time."},"closes_day_offset":{"type":"integer","maximum":1.0,"minimum":0.0,"title":"Closes Day Offset","description":"Zero for a same-day close or one for an overnight close.","default":0},"label":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Label","description":"Optional seller-facing label for this opening period."},"id":{"type":"string","title":"Id","description":"Stable regular-period identifier."},"position":{"type":"integer","minimum":0.0,"title":"Position","description":"Display order among periods for the same weekday."}},"additionalProperties":false,"type":"object","required":["weekday","opens_at","closes_at","id","position"],"title":"LocationHoursPeriodRead","description":"Persisted regular opening interval with stable identity and order."},"LocationHoursScheduleRead":{"properties":{"id":{"type":"string","title":"Id","description":"Stable opening-hours schedule identifier."},"schedule_type":{"$ref":"#/components/schemas/MerchantLocationHoursScheduleType","description":"Whether the location is always open or follows periods."},"periods":{"items":{"$ref":"#/components/schemas/LocationHoursPeriodRead"},"type":"array","title":"Periods","description":"Regular weekly opening periods in local time."},"special_days":{"items":{"$ref":"#/components/schemas/LocationSpecialDayRead"},"type":"array","title":"Special Days","description":"Date-specific exceptions that replace the regular schedule."}},"additionalProperties":false,"type":"object","required":["id","schedule_type","periods","special_days"],"title":"LocationHoursScheduleRead","description":"Persisted opening schedule included in management/public projections."},"LocationSpecialDayRead":{"properties":{"id":{"type":"string","title":"Id","description":"Stable special-day identifier."},"local_date":{"type":"string","format":"date","title":"Local Date","description":"Local calendar date this exception replaces."},"status":{"$ref":"#/components/schemas/MerchantLocationSpecialDayStatus","description":"Whether this date is closed or follows custom periods."},"periods":{"items":{"$ref":"#/components/schemas/LocationSpecialPeriodRead"},"type":"array","title":"Periods","description":"Custom opening periods; empty when the date is closed."},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label","description":"Optional seller-facing label for the date exception."}},"additionalProperties":false,"type":"object","required":["id","local_date","status","periods"],"title":"LocationSpecialDayRead","description":"Persisted date exception and its custom periods."},"LocationSpecialPeriodRead":{"properties":{"opens_at":{"type":"string","format":"time","title":"Opens At","description":"Local wall-clock opening time."},"closes_at":{"type":"string","format":"time","title":"Closes At","description":"Local wall-clock closing time."},"closes_day_offset":{"type":"integer","maximum":1.0,"minimum":0.0,"title":"Closes Day Offset","description":"Zero for a same-day close or one for an overnight close.","default":0},"id":{"type":"string","title":"Id","description":"Stable special-period identifier."},"position":{"type":"integer","minimum":0.0,"title":"Position","description":"Display order among periods for this special date."}},"additionalProperties":false,"type":"object","required":["opens_at","closes_at","id","position"],"title":"LocationSpecialPeriodRead","description":"Persisted special-date interval with stable identity and order."},"MarketCreate":{"properties":{"code":{"type":"string","maxLength":32,"minLength":1,"pattern":"^[a-z0-9]+(?:_[a-z0-9]+)*$","title":"Code"},"currency":{"$ref":"#/components/schemas/CurrencyCode"},"is_default":{"type":"boolean","title":"Is Default","default":false},"status":{"$ref":"#/components/schemas/MarketStatus","default":"active"},"default_locale":{"$ref":"#/components/schemas/LocaleCode"},"locales":{"items":{"$ref":"#/components/schemas/LocaleCode"},"type":"array","minItems":1,"title":"Locales"},"rules":{"items":{"$ref":"#/components/schemas/MarketRuleWrite"},"type":"array","title":"Rules"}},"additionalProperties":false,"type":"object","required":["code","currency","default_locale","locales"],"title":"MarketCreate","description":"Create one merchant market and fully replaceable child collections."},"MarketListingStatus":{"type":"string","enum":["listed","hidden"],"title":"MarketListingStatus","description":"Per-market visibility override for one catalog item."},"MarketPatch":{"properties":{"currency":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}]},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default"},"status":{"anyOf":[{"$ref":"#/components/schemas/MarketStatus"},{"type":"null"}]},"default_locale":{"anyOf":[{"$ref":"#/components/schemas/LocaleCode"},{"type":"null"}]},"locales":{"anyOf":[{"items":{"$ref":"#/components/schemas/LocaleCode"},"type":"array"},{"type":"null"}],"title":"Locales"},"rules":{"anyOf":[{"items":{"$ref":"#/components/schemas/MarketRuleWrite"},"type":"array"},{"type":"null"}],"title":"Rules"}},"additionalProperties":false,"type":"object","title":"MarketPatch","description":"Partial market update; the market code is deliberately immutable."},"MarketRuleKind":{"type":"string","enum":["country","subdivision","postal_prefix"],"title":"MarketRuleKind","description":"Typed buyer-location rule used to select a merchant market."},"MarketRuleRead":{"properties":{"kind":{"$ref":"#/components/schemas/MarketRuleKind"},"country":{"$ref":"#/components/schemas/CountryCode"},"subdivision":{"anyOf":[{"type":"string","maxLength":8,"minLength":1},{"type":"null"}],"title":"Subdivision"},"postal_prefix":{"anyOf":[{"type":"string","maxLength":16,"minLength":1},{"type":"null"}],"title":"Postal Prefix"},"id":{"type":"string","title":"Id"},"source":{"$ref":"#/components/schemas/MarketRuleSource"}},"additionalProperties":false,"type":"object","required":["kind","country","id","source"],"title":"MarketRuleRead","description":"Persisted market rule with stable identity and ownership source."},"MarketRuleSource":{"type":"string","enum":["manual","platform_sync"],"title":"MarketRuleSource","description":"Authority that owns a merchant market routing rule."},"MarketRuleWrite":{"properties":{"kind":{"$ref":"#/components/schemas/MarketRuleKind"},"country":{"$ref":"#/components/schemas/CountryCode"},"subdivision":{"anyOf":[{"type":"string","maxLength":8,"minLength":1},{"type":"null"}],"title":"Subdivision"},"postal_prefix":{"anyOf":[{"type":"string","maxLength":16,"minLength":1},{"type":"null"}],"title":"Postal Prefix"}},"additionalProperties":false,"type":"object","required":["kind","country"],"title":"MarketRuleWrite","description":"One manually managed geographic market-resolution rule."},"MarketStatus":{"type":"string","enum":["active","disabled"],"title":"MarketStatus","description":"Whether a merchant market may be selected for new buyer requests."},"MerchantAppliedPromotionRead":{"properties":{"claim_id":{"type":"string","title":"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":{"type":"string","title":"Title","description":"Name the seller gave the promotion."},"currency":{"$ref":"#/components/schemas/CurrencyCode","description":"Currency discount_amount is in."},"discount_amount":{"type":"integer","title":"Discount Amount","description":"Total discount from this promotion, in minor units."},"expires_at":{"type":"string","format":"date-time","title":"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."},"reserved":{"type":"boolean","title":"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."},"redeemed":{"type":"boolean","title":"Redeemed","description":"Whether a payment has redeemed this promotion."},"terms":{"type":"string","title":"Terms","description":"One plain sentence an agent can relay to the person it is buying for: what is offered and until when."},"lines":{"items":{"$ref":"#/components/schemas/AppliedPromotionLineRead"},"type":"array","title":"Lines","description":"The discount per line it applied to."},"promotion_id":{"type":"string","title":"Promotion Id","description":"Campaign this claim was drawn from (`om_agpm_…`). Merchant-only; never published on a buyer quote, checkout, or public order read."}},"type":"object","required":["claim_id","title","currency","discount_amount","expires_at","reserved","redeemed","terms","lines","promotion_id"],"title":"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."},"MerchantDocumentId":{"type":"string","enum":["guide","tools","testing","troubleshooting","live"],"title":"MerchantDocumentId","description":"Allowlisted documentation exposed through merchant REST and MCP tools."},"MerchantDocumentationList":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MerchantDocumentationRead"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"MerchantDocumentationList","description":"Small searchable set of repository-authored integration documents."},"MerchantDocumentationRead":{"properties":{"id":{"$ref":"#/components/schemas/MerchantDocumentId"},"title":{"type":"string","title":"Title"},"content":{"type":"string","title":"Content"}},"type":"object","required":["id","title","content"],"title":"MerchantDocumentationRead","description":"One curated integration document; arbitrary URL fetching is unsupported."},"MerchantIntegrationCheckCreate":{"properties":{"kind":{"$ref":"#/components/schemas/IntegrationCheckKind"},"destination_id":{"type":"string","maxLength":64,"minLength":1,"title":"Destination Id"},"quote_request":{"anyOf":[{"$ref":"#/components/schemas/PublicMppQuoteCreateRequest"},{"type":"null"}]},"order_id":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Order Id"}},"additionalProperties":false,"type":"object","required":["kind","destination_id"],"title":"MerchantIntegrationCheckCreate","description":"Exercise a quote or inspect an explicitly created test payment/order flow.\n\nOrder checks do not create orders or move money. Start the buyer test flow\nexplicitly, then supply its order ID; polling observes the signed response."},"MerchantIntegrationCheckRead":{"properties":{"id":{"type":"string","title":"Id"},"kind":{"$ref":"#/components/schemas/IntegrationCheckKind"},"destination_id":{"type":"string","title":"Destination Id"},"status":{"$ref":"#/components/schemas/ReadinessStatus"},"stale":{"type":"boolean","title":"Stale"},"message":{"type":"string","title":"Message"},"quote_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quote Id"},"order_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["id","kind","destination_id","status","stale","message","created_at"],"title":"MerchantIntegrationCheckRead","description":"Evidence for one explicit check against a particular configuration."},"MerchantLocationHoursScheduleType":{"type":"string","enum":["scheduled","always_open"],"title":"MerchantLocationHoursScheduleType","description":"Shape of a location's optional regular opening schedule."},"MerchantLocationOpenState":{"type":"string","enum":["open","closed","unknown"],"title":"MerchantLocationOpenState","description":"Computed public opening state for a location at one instant."},"MerchantLocationSpecialDayStatus":{"type":"string","enum":["closed","custom"],"title":"MerchantLocationSpecialDayStatus","description":"How a date-specific exception replaces regular opening hours."},"MerchantQuoteOfferRead":{"properties":{"id":{"type":"string","title":"Id","description":"Offer identifier. Pass it as a line’s `quote_offer_id` to buy exactly this alternative.","examples":["om_agqo_5e8b"]},"catalog_item_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Catalog Item Id","description":"Catalog item this offer prices, when catalog-backed."},"catalog_variant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Catalog Variant Id","description":"Resolved catalog variant this offer prices."},"booking_snapshot":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/QuantityBookingSnapshot"},{"$ref":"#/components/schemas/AppointmentBookingSnapshot"},{"$ref":"#/components/schemas/ScheduledClassBookingSnapshot"},{"$ref":"#/components/schemas/StayBookingSnapshot"}],"discriminator":{"propertyName":"type","mapping":{"appointment":"#/components/schemas/AppointmentBookingSnapshot","quantity":"#/components/schemas/QuantityBookingSnapshot","scheduled_class":"#/components/schemas/ScheduledClassBookingSnapshot","stay":"#/components/schemas/StayBookingSnapshot"}}},{"type":"null"}],"title":"Booking Snapshot","description":"Exact booking selection, or null for quantity inventory."},"pricing_model":{"$ref":"#/components/schemas/AgenticPricingModel","description":"How the total derives from the rate for this offer."},"unit_count":{"type":"integer","title":"Unit Count","description":"Billable units the total covers — nights, seats, or sessions."},"unit_amount_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unit Amount Cents","description":"Rate per billable unit, in minor units. Null when the merchant priced the offer as a whole."},"total_amount_cents":{"type":"integer","title":"Total Amount Cents","description":"Authoritative final payable amount in currency minor units."},"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"}],"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":{"items":{"$ref":"#/components/schemas/PriceSubtotal"},"type":"array","title":"Subtotals","description":"Merchant-authored ordered price ledger. It contains exactly one subtotal and final total; tax and fee lines may repeat."},"availability_status":{"$ref":"#/components/schemas/QuoteOfferAvailabilityStatus","description":"Availability assertion for this exact offer."},"available_quantity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Available Quantity","description":"Units currently available for this offer, when quantity is known."},"fulfillment":{"$ref":"#/components/schemas/PublicQuoteFulfillmentRead","description":"Exactly one fulfillment choice resolved for this offer."},"merchant_offer_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchant Offer Reference","description":"Merchant-authored reference for support and reconciliation."},"expires_at":{"type":"string","format":"date-time","title":"Expires At","description":"Deadline after which this offer must be refreshed before purchase."},"superseded_by_offer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Superseded By Offer Id","description":"Set on a refreshed offer; purchase the successor instead."},"promotion":{"anyOf":[{"$ref":"#/components/schemas/MerchantAppliedPromotionRead"},{"type":"null"}],"description":"Promotion claim used to price this offer, including the merchant-only campaign identifier."}},"type":"object","required":["id","pricing_model","unit_count","total_amount_cents","currency","tax_treatment","subtotals","availability_status","fulfillment","expires_at"],"title":"MerchantQuoteOfferRead","description":"Seller quote offer with its merchant-visible claim and campaign details."},"MerchantRead":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Merchant display name; falls back to the normalized domain when no label is known."},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"Normalized merchant domain string for this merchant, not a protocol-qualified URL."},"icon_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Image Url","description":"Renderable merchant icon image URL, when available."}},"additionalProperties":false,"type":"object","title":"MerchantRead","description":"Display-ready merchant identity returned on purchase-intent reads."},"MerchantRequirementCode":{"type":"string","enum":["destination","delivery","quote_responder","order_responder","quote_response","order_response"],"title":"MerchantRequirementCode","description":"Stable merchant setup steps shared by REST, MCP, CLI, and dashboard."},"MerchantSetupRequirement":{"properties":{"code":{"$ref":"#/components/schemas/MerchantRequirementCode"},"status":{"$ref":"#/components/schemas/ReadinessStatus"},"title":{"type":"string","title":"Title"},"message":{"type":"string","title":"Message"},"destination_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destination Id"}},"type":"object","required":["code","status","title","message"],"title":"MerchantSetupRequirement","description":"One actionable setup requirement, never a buyer checkout field."},"ModeValue":{"type":"string","enum":["test","live"],"title":"ModeValue","description":"Persisted mode for records scoped to test vs live data."},"MppAggregateService":{"properties":{"additional_fields":{"additionalProperties":true,"type":"object","title":"Additional Fields","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."},"id":{"type":"string","title":"Id","description":"Directory-unique identifier for the service.","examples":["openmerchant.coffee-cart"]},"name":{"type":"string","title":"Name","description":"Display name for the service.","examples":["Coffee Cart"]},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"Marketing or landing URL. Not necessarily callable.","examples":["https://coffee-cart.example.com"]},"serviceUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serviceurl","description":"Base URL every endpoint path is resolved against. Preferred over `url` for making calls.","examples":["https://api.mpp.openmerchant.dev/coffee-cart"]},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"What the service sells or does."},"categories":{"items":{"type":"string"},"type":"array","title":"Categories","description":"Directory taxonomy the service is listed under.","examples":[["commerce","marketplace"]]},"integration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Integration","description":"How the service is integrated with the directory operator."},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","description":"Free-form labels used for discovery filtering.","examples":[["coffee","pickup"]]},"status":{"$ref":"#/components/schemas/MppServiceStatus","description":"Operational status. Unknown when the publisher omitted it or sent a value this reader does not recognize.","default":"unknown"},"docs":{"$ref":"#/components/schemas/MppDocs","description":"Documentation links advertised for the service."},"methods":{"additionalProperties":{"$ref":"#/components/schemas/MppMethodSupport"},"type":"object","title":"Methods","description":"Supported payment methods, keyed by rail name (e.g. `stripe`), each declaring the intents and assets it accepts."},"realm":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Realm","description":"Authentication realm quoted back in the `Payment` challenge; it participates in the credential HMAC."},"provider":{"$ref":"#/components/schemas/MppProvider","description":"Organization operating the service."},"endpoints":{"items":{"$ref":"#/components/schemas/MppEndpoint"},"type":"array","title":"Endpoints","description":"Callable endpoints, each with its own payment terms."},"x-openmerchant-merchants":{"items":{"$ref":"#/components/schemas/MppPublishedMerchant"},"type":"array","title":"X-Openmerchant-Merchants","description":"Canonical references for merchants with listed custom operations."}},"additionalProperties":true,"type":"object","required":["id","name"],"title":"MppAggregateService","description":"Platform manifest with an index of its publicly listed API providers."},"MppCatalogEndpointRead":{"properties":{"method":{"$ref":"#/components/schemas/MppHttpMethod"},"path":{"type":"string","maxLength":2048,"minLength":1,"title":"Path"},"url":{"type":"string","maxLength":2048,"minLength":1,"title":"Url"},"has_path_parameters":{"type":"boolean","title":"Has Path Parameters"}},"additionalProperties":false,"type":"object","required":["method","path","url","has_path_parameters"],"title":"MppCatalogEndpointRead","description":"Resolved MPP endpoint attached to a service listing."},"MppCatalogListingRead-Input":{"properties":{"id":{"type":"string","title":"Id"},"protocol":{"type":"string","const":"mpp","title":"Protocol","default":"mpp"},"sources":{"items":{"$ref":"#/components/schemas/CatalogSourceKind"},"type":"array","minItems":1,"title":"Sources"},"publication_status":{"$ref":"#/components/schemas/CatalogPublicationStatus"},"url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Url"},"purchasable":{"type":"boolean","title":"Purchasable"},"payment_methods":{"items":{"$ref":"#/components/schemas/CatalogPaymentMethodRead-Input"},"type":"array","title":"Payment Methods"},"service_id":{"type":"string","title":"Service Id"},"service_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Service Url"},"docs_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Docs Url"},"realm":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Realm"},"endpoint":{"$ref":"#/components/schemas/MppCatalogEndpointRead"},"request_requirements":{"items":{"$ref":"#/components/schemas/CatalogRequestRequirementRead"},"type":"array","title":"Request Requirements"}},"additionalProperties":false,"type":"object","required":["id","sources","publication_status","purchasable","service_id","endpoint"],"title":"MppCatalogListingRead","description":"MPP-specific listing returned through the shared catalog interface."},"MppCatalogListingRead-Output":{"properties":{"id":{"type":"string","title":"Id"},"protocol":{"type":"string","const":"mpp","title":"Protocol","default":"mpp"},"sources":{"items":{"$ref":"#/components/schemas/CatalogSourceKind"},"type":"array","minItems":1,"title":"Sources"},"publication_status":{"$ref":"#/components/schemas/CatalogPublicationStatus"},"url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Url"},"purchasable":{"type":"boolean","title":"Purchasable"},"payment_methods":{"items":{"$ref":"#/components/schemas/CatalogPaymentMethodRead-Output"},"type":"array","title":"Payment Methods"},"service_id":{"type":"string","title":"Service Id"},"service_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Service Url"},"docs_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Docs Url"},"realm":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Realm"},"endpoint":{"$ref":"#/components/schemas/MppCatalogEndpointRead"},"request_requirements":{"items":{"$ref":"#/components/schemas/CatalogRequestRequirementRead"},"type":"array","title":"Request Requirements"}},"additionalProperties":false,"type":"object","required":["id","sources","publication_status","purchasable","service_id","endpoint"],"title":"MppCatalogListingRead","description":"MPP-specific listing returned through the shared catalog interface."},"MppDocs":{"properties":{"additional_fields":{"additionalProperties":true,"type":"object","title":"Additional Fields","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."},"homepage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Homepage","description":"Human-facing landing page for the service.","examples":["https://openmerchant.dev"]},"llmsTxt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Llmstxt","description":"URL of the service's llms.txt, for agent-readable orientation.","examples":["https://openmerchant.dev/llms.txt"]},"apiReference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Apireference","description":"URL of the interactive or generated API reference.","examples":["https://openmerchant.dev/docs/api"]}},"additionalProperties":true,"type":"object","title":"MppDocs","description":"Documentation links advertised for an MPP service."},"MppEndpoint":{"properties":{"additional_fields":{"additionalProperties":true,"type":"object","title":"Additional Fields","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."},"method":{"$ref":"#/components/schemas/MppHttpMethod","description":"HTTP method to call the endpoint with."},"path":{"type":"string","title":"Path","description":"Path relative to the service base URL, possibly templated.","examples":["/purchases","/catalog/{itemId}"]},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"What the endpoint does, in the publisher's own words."},"payment":{"anyOf":[{"$ref":"#/components/schemas/MppEndpointPayment"},{"type":"null"}],"description":"Payment terms for calling it; null when the endpoint is free."}},"additionalProperties":true,"type":"object","required":["method","path"],"title":"MppEndpoint","description":"One callable endpoint advertised in the MPP Directory."},"MppEndpointPayment":{"properties":{"additional_fields":{"additionalProperties":true,"type":"object","title":"Additional Fields","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."},"intent":{"anyOf":[{"$ref":"#/components/schemas/MppPaymentIntent"},{"type":"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"}],"description":"Rail the payment settles over. Null when unrecognized."},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency","description":"ISO-4217 currency the advertised amount is in.","examples":["usd"]},"decimals":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Decimals","description":"Minor-unit exponent for `amount` (2 for cent-denominated fiat)."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Buyer-facing explanation of what the charge is for.","examples":["Order total, charged at purchase"]},"amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Amount","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"]},"max":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Max","description":"Maximum dynamic charge as an integer minor-unit string; absent means uncapped."},"amountHint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Amounthint","description":"Human-readable indication of a dynamic price range.","examples":["varies by order total"]},"dynamic":{"type":"boolean","title":"Dynamic","description":"The amount is computed per request rather than fixed; expect a 402 challenge carrying the real total.","default":false},"unitType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unittype","description":"What one billable unit is, when the price is per unit.","examples":["order"]}},"additionalProperties":true,"type":"object","title":"MppEndpointPayment","description":"Payment metadata attached to one MPP service endpoint."},"MppHttpMethod":{"type":"string","enum":["GET","POST","PATCH","PUT","DELETE"],"title":"MppHttpMethod","description":"HTTP methods supported by MPP directory endpoint entries."},"MppMethodSupport":{"properties":{"additional_fields":{"additionalProperties":true,"type":"object","title":"Additional Fields","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."},"intents":{"items":{"$ref":"#/components/schemas/MppPaymentIntent"},"type":"array","title":"Intents","description":"Payment intents this method can satisfy. Values the reader does not recognize are dropped rather than failing the entry."},"assets":{"items":{"type":"string"},"type":"array","title":"Assets","description":"Settlement assets the method accepts.","examples":[["usd"]]}},"additionalProperties":true,"type":"object","title":"MppMethodSupport","description":"Payment intents and assets supported by a service payment method."},"MppPaymentIntent":{"type":"string","enum":["charge","session"],"title":"MppPaymentIntent","description":"MPP payment intent identifiers used by service endpoints."},"MppPaymentMethod":{"type":"string","enum":["stripe","tempo"],"title":"MppPaymentMethod","description":"Payment method identifiers advertised by MPP services."},"MppProvider":{"properties":{"additional_fields":{"additionalProperties":true,"type":"object","title":"Additional Fields","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."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Organization operating the service.","examples":["OpenMerchant"]},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"Canonical site for that organization.","examples":["https://openmerchant.dev"]}},"additionalProperties":true,"type":"object","title":"MppProvider","description":"Provider identity advertised for an MPP service."},"MppPublishedMerchant":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"service_url":{"type":"string","title":"Service Url"},"openapi_url":{"type":"string","title":"Openapi Url"},"manifest_url":{"type":"string","title":"Manifest Url"},"mcp_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mcp Url"},"mcp_oauth_resource":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mcp Oauth Resource","description":"Canonical MCP OAuth resource, without local mode query selectors."},"oauth_resource":{"type":"string","title":"Oauth Resource","description":"Canonical OAuth resource for HTTP operations."},"authorization_server_metadata_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization Server Metadata Url"}},"additionalProperties":false,"type":"object","required":["slug","name","service_url","openapi_url","manifest_url","oauth_resource"],"title":"MppPublishedMerchant","description":"Canonical merchant links accompanying aggregate custom API operations."},"MppServiceStatus":{"type":"string","enum":["active","inactive","unknown"],"title":"MppServiceStatus","description":"Operational status values exposed by the MPP Directory."},"NotificationAttemptOutcome":{"type":"string","enum":["delivered","retrying","failed"],"title":"NotificationAttemptOutcome","description":"Outcome of one outbound webhook HTTP attempt."},"NotificationChannel":{"type":"string","enum":["webhook"],"title":"NotificationChannel","description":"Delivery channel implemented by an account notification destination."},"NotificationDeliveryAttemptRead":{"properties":{"id":{"type":"string","title":"Id"},"attempt_number":{"type":"integer","title":"Attempt Number"},"outcome":{"$ref":"#/components/schemas/NotificationAttemptOutcome"},"started_at":{"type":"string","format":"date-time","title":"Started At"},"completed_at":{"type":"string","format":"date-time","title":"Completed At"},"duration_ms":{"type":"integer","title":"Duration Ms"},"response_status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Status Code"},"response_excerpt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Excerpt"},"error_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Type"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"signing_secret_prefix":{"type":"string","title":"Signing Secret Prefix"}},"type":"object","required":["id","attempt_number","outcome","started_at","completed_at","duration_ms","signing_secret_prefix"],"title":"NotificationDeliveryAttemptRead","description":"One HTTP attempt made for a notification delivery run."},"NotificationDeliveryKind":{"type":"string","enum":["automatic","manual_replay","test"],"title":"NotificationDeliveryKind","description":"Reason a delivery run was created."},"NotificationDeliveryRead":{"properties":{"id":{"type":"string","title":"Id"},"event_id":{"type":"string","title":"Event Id"},"destination_id":{"type":"string","title":"Destination Id"},"destination_name":{"type":"string","title":"Destination Name"},"kind":{"$ref":"#/components/schemas/NotificationDeliveryKind"},"delivery_status":{"$ref":"#/components/schemas/AgenticMerchantWebhookDeliveryStatus"},"attempts":{"type":"integer","title":"Attempts"},"delivered_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Delivered At"},"last_error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error Message"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"attempt_rows":{"items":{"$ref":"#/components/schemas/NotificationDeliveryAttemptRead"},"type":"array","title":"Attempt Rows"}},"type":"object","required":["id","event_id","destination_id","destination_name","kind","delivery_status","attempts","created_at"],"title":"NotificationDeliveryRead","description":"One destination-specific delivery run and its attempts."},"NotificationDestinationCreate":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Description"},"channel":{"$ref":"#/components/schemas/NotificationChannel","default":"webhook"},"responds_to_quotes":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Responds To Quotes","description":"Authorizes quote responses. When omitted, the first eligible destination for the merchant is enabled automatically."},"event_types":{"items":{"$ref":"#/components/schemas/AgenticMerchantWebhookEventType"},"type":"array","minItems":1,"title":"Event Types"},"webhook":{"$ref":"#/components/schemas/NotificationWebhookCreate"}},"additionalProperties":false,"type":"object","required":["name","event_types","webhook"],"title":"NotificationDestinationCreate","description":"Create one merchant-owned notification destination."},"NotificationDestinationHealth":{"type":"string","enum":["untested","healthy","failing"],"title":"NotificationDestinationHealth","description":"Health inferred from the most recent completed delivery."},"NotificationDestinationListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/NotificationDestinationRead"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"NotificationDestinationListResponse","description":"All destinations for the current account and mode."},"NotificationDestinationMutationResponse":{"properties":{"destination":{"$ref":"#/components/schemas/NotificationDestinationRead"},"secret":{"anyOf":[{"$ref":"#/components/schemas/NotificationSecretReveal"},{"type":"null"}]}},"type":"object","required":["destination"],"title":"NotificationDestinationMutationResponse","description":"Destination state plus an optional newly minted plaintext secret."},"NotificationDestinationRead":{"properties":{"id":{"type":"string","title":"Id"},"merchant_id":{"type":"string","title":"Merchant Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"channel":{"$ref":"#/components/schemas/NotificationChannel"},"responds_to_quotes":{"type":"boolean","title":"Responds To Quotes"},"responds_to_orders":{"type":"boolean","title":"Responds To Orders"},"revision":{"type":"integer","title":"Revision"},"status":{"$ref":"#/components/schemas/NotificationDestinationStatus"},"health":{"$ref":"#/components/schemas/NotificationDestinationHealth"},"event_types":{"items":{"$ref":"#/components/schemas/AgenticMerchantWebhookEventType"},"type":"array","title":"Event Types"},"webhook":{"$ref":"#/components/schemas/NotificationWebhookRead"},"is_sample":{"type":"boolean","title":"Is Sample"},"auto_respond_enabled":{"type":"boolean","title":"Auto Respond Enabled"},"last_success_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Success At"},"last_failure_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Failure At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","merchant_id","name","channel","responds_to_quotes","responds_to_orders","revision","status","health","event_types","webhook","is_sample","auto_respond_enabled","created_at","updated_at"],"title":"NotificationDestinationRead","description":"Full dashboard read shape for one notification destination."},"NotificationDestinationStatus":{"type":"string","enum":["active","disabled"],"title":"NotificationDestinationStatus","description":"Operator-controlled lifecycle for a notification destination."},"NotificationDestinationUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Description"},"responds_to_quotes":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Responds To Quotes"},"auto_respond_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Auto Respond Enabled","description":"Toggle the built-in sample auto-responder. Accepted only for the sample destination, and only in test mode."},"event_types":{"anyOf":[{"items":{"$ref":"#/components/schemas/AgenticMerchantWebhookEventType"},"type":"array","minItems":1},{"type":"null"}],"title":"Event Types"},"webhook":{"anyOf":[{"$ref":"#/components/schemas/NotificationWebhookCreate"},{"type":"null"}]}},"additionalProperties":false,"type":"object","title":"NotificationDestinationUpdate","description":"Partial update for destination metadata, subscriptions, and endpoint URL."},"NotificationEventDetail":{"properties":{"id":{"type":"string","title":"Id"},"merchant_id":{"type":"string","title":"Merchant Id"},"order_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Id"},"quote_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quote Id"},"event_type":{"$ref":"#/components/schemas/AgenticMerchantWebhookEventType"},"aggregate_status":{"anyOf":[{"$ref":"#/components/schemas/AgenticMerchantWebhookDeliveryStatus"},{"type":"null"}]},"delivery_count":{"type":"integer","title":"Delivery Count"},"delivered_count":{"type":"integer","minimum":0.0,"title":"Delivered Count","description":"Destinations whose latest run for this event reached delivered. Read with delivery_count as \"N of M arrived\".","default":0},"created_at":{"type":"string","format":"date-time","title":"Created At"},"payload_json":{"type":"string","title":"Payload Json"},"deliveries":{"items":{"$ref":"#/components/schemas/NotificationDeliveryRead"},"type":"array","title":"Deliveries"}},"type":"object","required":["id","merchant_id","event_type","delivery_count","created_at","payload_json","deliveries"],"title":"NotificationEventDetail","description":"Event inspector payload and destination delivery history."},"NotificationEventListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/NotificationEventRead"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"NotificationEventListResponse","description":"One server-paginated page of marketplace events."},"NotificationEventRead":{"properties":{"id":{"type":"string","title":"Id"},"merchant_id":{"type":"string","title":"Merchant Id"},"order_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Id"},"quote_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quote Id"},"event_type":{"$ref":"#/components/schemas/AgenticMerchantWebhookEventType"},"aggregate_status":{"anyOf":[{"$ref":"#/components/schemas/AgenticMerchantWebhookDeliveryStatus"},{"type":"null"}]},"delivery_count":{"type":"integer","title":"Delivery Count"},"delivered_count":{"type":"integer","minimum":0.0,"title":"Delivered Count","description":"Destinations whose latest run for this event reached delivered. Read with delivery_count as \"N of M arrived\".","default":0},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","merchant_id","event_type","delivery_count","created_at"],"title":"NotificationEventRead","description":"Event list row with aggregate delivery status."},"NotificationSecretReveal":{"properties":{"destination_id":{"type":"string","title":"Destination Id"},"secret":{"type":"string","title":"Secret"},"secret_prefix":{"type":"string","title":"Secret Prefix"},"grace_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Grace Expires At"}},"type":"object","required":["destination_id","secret","secret_prefix"],"title":"NotificationSecretReveal","description":"Plaintext webhook signing secret returned only by explicit actions."},"NotificationTestResponse":{"properties":{"event":{"$ref":"#/components/schemas/NotificationEventRead"},"delivery":{"$ref":"#/components/schemas/NotificationDeliveryRead"}},"type":"object","required":["event","delivery"],"title":"NotificationTestResponse","description":"Persisted test event and its immediate delivery result."},"NotificationWebhookCreate":{"properties":{"endpoint_url":{"type":"string","maxLength":1024,"minLength":1,"title":"Endpoint Url"}},"additionalProperties":false,"type":"object","required":["endpoint_url"],"title":"NotificationWebhookCreate","description":"Webhook-specific configuration nested in destination mutations."},"NotificationWebhookRead":{"properties":{"endpoint_url":{"type":"string","title":"Endpoint Url"},"secret_prefix":{"type":"string","title":"Secret Prefix"},"grace_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Grace Expires At"}},"type":"object","required":["endpoint_url","secret_prefix"],"title":"NotificationWebhookRead","description":"Safe webhook configuration returned to the dashboard."},"OnboardingLinkCreateRequest":{"properties":{"use_case":{"$ref":"#/components/schemas/OnboardingLinkUseCaseConfig"},"allowed_sections":{"anyOf":[{"items":{"$ref":"#/components/schemas/OnboardingLinkUpdateSection"},"type":"array","minItems":1},{"type":"null"}],"title":"Allowed Sections","description":"account_update only: which profile sections the customer may edit on the hosted page. Omit to allow every section. Rejected for account_onboarding links."},"profile":{"$ref":"#/components/schemas/OnboardingLinkProfileSpec","description":"Profile id (for updates) plus locked shaping fields."},"refresh_url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Refresh Url","description":"URL the hosted page redirects to when the link is no longer usable."},"return_url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Return Url","description":"URL the hosted page redirects to on successful completion."}},"additionalProperties":false,"type":"object","required":["use_case"],"title":"OnboardingLinkCreateRequest","description":"Body for ``POST /v1/onboarding_links``.\n\nAll profile-shaping fields live under ``profile``. Omit it entirely\nfor the simplest ``account_onboarding`` flow with no caller-locked\nfields."},"OnboardingLinkIssuingSpec":{"properties":{"requested":{"type":"boolean","title":"Requested","description":"Whether the hosted flow should collect KYC + payment details for issuing.","default":false}},"additionalProperties":false,"type":"object","title":"OnboardingLinkIssuingSpec","description":"Issuing capability request nested inside the ``profile`` envelope."},"OnboardingLinkProfileSpec":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"Existing profile to bind this link to. Omit for new profiles."},"profile_type":{"anyOf":[{"$ref":"#/components/schemas/ProfileType"},{"type":"null"}],"description":"Locked profile type — consumer or business."},"country":{"anyOf":[{"$ref":"#/components/schemas/CountryCode"},{"type":"null"}],"description":"Locked ISO-3166-1 alpha-2 country code."},"issuing":{"$ref":"#/components/schemas/OnboardingLinkIssuingSpec","description":"Issuing capability request for the materialized profile."}},"additionalProperties":false,"type":"object","title":"OnboardingLinkProfileSpec","description":"Profile-shaping fields the caller wants stamped on the link.\n\n``id`` selects the profile the link is bound to:\n\n- For ``account_onboarding``, ``id`` MUST be omitted — the server\n  reserves a fresh profile id and bakes it into the link URL. The\n  ``profiles`` row materializes lazily on the user's first hosted-form\n  step.\n- For ``account_update``, ``id`` MUST reference an existing profile\n  owned by the API key's user.\n\nThe remaining fields (``profile_type``, ``country``,\n``issuing.requested``) are LOCKED: rendered read-only in the hosted\nform and stamped onto the materialized profile as initial column\nvalues. They must also match the existing profile when ``id`` is\nsupplied."},"OnboardingLinkRead":{"properties":{"id":{"type":"string","title":"Id"},"object":{"type":"string","const":"onboarding_link","title":"Object","default":"onboarding_link"},"use_case":{"$ref":"#/components/schemas/OnboardingLinkUseCaseConfig"},"profile":{"$ref":"#/components/schemas/OnboardingLinkReadProfile"},"status":{"$ref":"#/components/schemas/OnboardingLinkStatus"},"url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Url","description":"User-facing URL — present only on the create response."},"allowed_sections":{"anyOf":[{"items":{"$ref":"#/components/schemas/OnboardingLinkUpdateSection"},"type":"array"},{"type":"null"}],"title":"Allowed Sections","description":"account_update only: sections the customer may edit (null = all)."},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"max_clicks":{"type":"integer","title":"Max Clicks"},"click_count":{"type":"integer","title":"Click Count"},"refresh_url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Refresh Url"},"return_url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Return Url"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","use_case","profile","status","expires_at","max_clicks","click_count","refresh_url","return_url","created_at"],"title":"OnboardingLinkRead","description":"Public read shape for an onboarding link."},"OnboardingLinkReadProfile":{"properties":{"id":{"type":"string","title":"Id","description":"Profile id this link is bound to (reserved or materialized)."},"materialized":{"type":"boolean","title":"Materialized","description":"Whether the underlying profiles row has been created yet."},"profile_type":{"anyOf":[{"$ref":"#/components/schemas/ProfileType"},{"type":"null"}]},"country":{"anyOf":[{"$ref":"#/components/schemas/CountryCode"},{"type":"null"}]},"issuing":{"$ref":"#/components/schemas/OnboardingLinkIssuingSpec"}},"type":"object","required":["id","materialized","profile_type","country","issuing"],"title":"OnboardingLinkReadProfile","description":"Profile envelope on the read shape.\n\n``id`` is always populated — for ``account_onboarding`` it is the\nreserved id baked into the link URL even before the ``profiles`` row\nmaterializes. ``materialized`` flips to ``True`` once the row exists."},"OnboardingLinkStatus":{"type":"string","enum":["created","opened","completed","expired","revoked"],"title":"OnboardingLinkStatus","description":"Lifecycle of a hosted-profile onboarding link."},"OnboardingLinkUpdateSection":{"type":"string","enum":["personal_details","payment_methods","preferences"],"title":"OnboardingLinkUpdateSection","description":"Profile sections an ``account_update`` link allows the customer to edit."},"OnboardingLinkUseCase":{"type":"string","enum":["account_onboarding","account_update"],"title":"OnboardingLinkUseCase","description":"Use case selector for an onboarding link.\n\nDrives which steps the hosted form renders and whether a fresh\n``profiles`` row gets created on the first user step."},"OnboardingLinkUseCaseConfig":{"properties":{"type":{"$ref":"#/components/schemas/OnboardingLinkUseCase","description":"Which hosted flow the link drives the user through."}},"additionalProperties":false,"type":"object","required":["type"],"title":"OnboardingLinkUseCaseConfig","description":"Discriminator selecting which hosted flow the link drives."},"PartySizeRule":{"properties":{"min":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Min","description":"Fewest people one line may cover.","default":1},"max":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Max","description":"Most people one line may cover.","default":1}},"additionalProperties":false,"type":"object","title":"PartySizeRule","description":"Inclusive bounds on how many people one line may cover."},"PaymentAssuranceData":{"properties":{"identifier":{"type":"string","maxLength":512,"minLength":1,"title":"Identifier","description":"Opaque cardholder or credential identifier returned by the browser verification ceremony."},"dfp_session_id":{"anyOf":[{"type":"string","maxLength":512,"minLength":1},{"type":"null"}],"title":"Dfp Session Id","description":"Optional device-fingerprinting session id returned by the browser verification ceremony."},"fido_assertion_data":{"$ref":"#/components/schemas/PaymentFidoAssertionData","description":"Passkey assertion data returned after the cardholder approves the payment instruction."},"additional_attributes":{"additionalProperties":true,"type":"object","title":"Additional Attributes","description":"Provider extension fields for the assurance payload."}},"additionalProperties":true,"type":"object","required":["identifier","fido_assertion_data"],"title":"PaymentAssuranceData","description":"Browser-held proof that a cardholder approved a payment instruction."},"PaymentFidoAssertionData":{"properties":{"code":{"type":"string","title":"Code","description":"Opaque assertion blob produced by the browser passkey or issuer verification ceremony. This value is sensitive and is redacted from request logs."},"additional_attributes":{"additionalProperties":true,"type":"object","title":"Additional Attributes","description":"Provider extension fields for the assertion payload."}},"additionalProperties":true,"type":"object","required":["code"],"title":"PaymentFidoAssertionData","description":"Passkey assertion data produced by the browser's credential ceremony."},"PaymentIntentsDisabledReason":{"type":"string","enum":["restricted_by_platform","production_livemode_access_required","billing_past_due","account_payment_method_required","profile_restricted","profile_archived","no_eligible_payment_method"],"title":"PaymentIntentsDisabledReason","description":"Primary reason the ``payment_intents`` capability is disabled for a scope.\n\nOne vocabulary shared by the account-scoped and profile-scoped\nevaluations so API consumers can switch on a single enum."},"PaymentVerificationChallengeRead":{"properties":{"status":{"$ref":"#/components/schemas/PaymentVerificationChallengeStatus","description":"Current challenge state for the browser ceremony."},"challenge_context":{"additionalProperties":true,"type":"object","title":"Challenge Context","description":"Opaque browser challenge context passed to the payment verification SDK. Clients should not inspect or persist this payload."},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At","description":"Optional provider-supplied expiration time for the challenge."}},"additionalProperties":false,"type":"object","required":["status"],"title":"PaymentVerificationChallengeRead","description":"Browser challenge data needed to collect payment verification proof."},"PaymentVerificationChallengeStatus":{"type":"string","enum":["passkey_required","redirect_required","verified"],"title":"PaymentVerificationChallengeStatus","description":"Lifecycle status for a browser payment verification challenge."},"PaymentVerificationInput":{"properties":{"assurance_data":{"anyOf":[{"$ref":"#/components/schemas/PaymentAssuranceData"},{"type":"null"}],"description":"Browser-held proof produced by a passkey or issuer approval ceremony. Submit this only on the approve call that should complete verification and resume execution."}},"additionalProperties":false,"type":"object","title":"PaymentVerificationInput","description":"Browser-held proof submitted to verify the scoped payment instruction."},"PlaceDataProvider":{"type":"string","enum":["foursquare"],"title":"PlaceDataProvider","description":"External place-data provider used to verify merchant locations."},"PolicyCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"is_default":{"type":"boolean","title":"Is Default","default":false},"currency_code":{"$ref":"#/components/schemas/CurrencyCode","default":"USD"},"initial_budget_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Initial Budget Cents"},"spending_limits":{"items":{"$ref":"#/components/schemas/PolicySpendingLimit"},"type":"array","maxItems":6,"title":"Spending Limits"},"approval_threshold_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Approval Threshold Cents"},"velocity_per_day_count":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Velocity Per Day Count"},"allowed_categories":{"items":{"type":"string","maxLength":100,"minLength":1},"type":"array","maxItems":100,"title":"Allowed Categories"},"blocked_categories":{"items":{"type":"string","maxLength":100,"minLength":1},"type":"array","maxItems":100,"title":"Blocked Categories"},"blocked_merchants":{"items":{"type":"string","maxLength":255,"minLength":1},"type":"array","maxItems":100,"title":"Blocked Merchants"},"allow_recurring":{"type":"boolean","title":"Allow Recurring","default":false}},"additionalProperties":false,"type":"object","required":["name"],"title":"PolicyCreate","description":"Body for ``POST /api/policies``: create a new reusable policy."},"PolicyLibrarySummary":{"properties":{"active_count":{"type":"integer","title":"Active Count"},"in_use_count":{"type":"integer","title":"In Use Count"},"unused_count":{"type":"integer","title":"Unused Count"},"archived_count":{"type":"integer","title":"Archived Count"},"bound_payment_method_total":{"type":"integer","title":"Bound Payment Method Total"},"default_policy_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Policy Name"}},"type":"object","required":["active_count","in_use_count","unused_count","archived_count","bound_payment_method_total"],"title":"PolicyLibrarySummary","description":"Stat-card counts over the user's FULL policy library (active + archived),\nso the cards and count chips stay stable while the table is filtered/paged."},"PolicyPatch":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default"},"currency_code":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}]},"change_note":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Change Note"},"initial_budget_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Initial Budget Cents"},"spending_limits":{"anyOf":[{"items":{"$ref":"#/components/schemas/PolicySpendingLimit"},"type":"array","maxItems":6},{"type":"null"}],"title":"Spending Limits"},"approval_threshold_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Approval Threshold Cents"},"velocity_per_day_count":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Velocity Per Day Count"},"allowed_categories":{"anyOf":[{"items":{"type":"string","maxLength":100,"minLength":1},"type":"array","maxItems":100},{"type":"null"}],"title":"Allowed Categories"},"blocked_categories":{"anyOf":[{"items":{"type":"string","maxLength":100,"minLength":1},"type":"array","maxItems":100},{"type":"null"}],"title":"Blocked Categories"},"blocked_merchants":{"anyOf":[{"items":{"type":"string","maxLength":255,"minLength":1},"type":"array","maxItems":100},{"type":"null"}],"title":"Blocked Merchants"},"allow_recurring":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Allow Recurring"}},"additionalProperties":false,"type":"object","title":"PolicyPatch","description":"Body for ``POST /api/policies/{id}``: partial update."},"PolicyRollbackBody":{"properties":{"target_version_number":{"type":"integer","minimum":1.0,"title":"Target Version Number"},"change_note":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Change Note"}},"type":"object","required":["target_version_number"],"title":"PolicyRollbackBody","description":"Body for ``POST /api/policies/{id}/rollback``: pick a historical version."},"PolicySpendingLimit":{"properties":{"interval":{"$ref":"#/components/schemas/PolicySpendingLimitInterval"},"amount":{"type":"integer","minimum":0.0,"title":"Amount"}},"additionalProperties":false,"type":"object","required":["interval","amount"],"title":"PolicySpendingLimit","description":"Interval-based spending cap exposed by policy APIs."},"PolicySpendingLimitInterval":{"type":"string","enum":["per_authorization","daily","weekly","monthly","yearly","all_time"],"title":"PolicySpendingLimitInterval","description":"Spending-limit intervals exposed by policy APIs."},"PolicyVersionListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PolicyVersionRead"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"PolicyVersionListResponse"},"PolicyVersionRead":{"properties":{"id":{"type":"string","title":"Id"},"policy_id":{"type":"string","title":"Policy Id"},"version_number":{"type":"integer","title":"Version Number"},"change_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Change Note"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"is_current":{"type":"boolean","title":"Is Current","default":false},"currency_code":{"$ref":"#/components/schemas/CurrencyCode"},"initial_budget_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Initial Budget Cents"},"spending_limits":{"items":{"$ref":"#/components/schemas/PolicySpendingLimit"},"type":"array","title":"Spending Limits"},"approval_threshold_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Approval Threshold Cents"},"velocity_per_day_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Velocity Per Day Count"},"allowed_categories":{"items":{"type":"string"},"type":"array","title":"Allowed Categories"},"blocked_categories":{"items":{"type":"string"},"type":"array","title":"Blocked Categories"},"blocked_merchants":{"items":{"type":"string"},"type":"array","title":"Blocked Merchants"},"allow_recurring":{"type":"boolean","title":"Allow Recurring"}},"type":"object","required":["id","policy_id","version_number","created_at","currency_code","initial_budget_cents","spending_limits","approval_threshold_cents","velocity_per_day_count","allowed_categories","blocked_categories","blocked_merchants","allow_recurring"],"title":"PolicyVersionRead","description":"Read shape for a single immutable ``PolicyVersion`` row."},"PostalAddressPayload":{"properties":{"line1":{"type":"string","maxLength":255,"minLength":1,"title":"Line1","description":"Primary street or delivery line."},"line2":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Line2","description":"Optional unit, suite, building, or secondary address line."},"city":{"type":"string","maxLength":120,"minLength":1,"title":"City","description":"Postal locality or city."},"region":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Region","description":"Country-specific state, province, or region."},"postal_code":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Postal Code","description":"Country-specific postal code, when the address has one."},"country":{"$ref":"#/components/schemas/CountryCode","description":"ISO 3166-1 alpha-2 country code."}},"additionalProperties":false,"type":"object","required":["line1","city","country"],"title":"PostalAddressPayload","description":"Country-aware postal address shared by location API surfaces."},"PriceSubtotal":{"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":{"type":"string","maxLength":500,"minLength":1,"title":"Description","description":"Buyer-facing label preserved verbatim and in order. Included tax or fees are disclosed here instead of emitted as a second amount."},"amount":{"type":"integer","title":"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."}},"additionalProperties":false,"type":"object","required":["type","description","amount"],"title":"PriceSubtotal","description":"One ordered, signed contribution to a final payable amount."},"ProfileAddressCreate":{"properties":{"is_default":{"type":"boolean","title":"Is Default","description":"Whether this address should become the profile default for its address type.","default":false},"label":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Label","description":"Optional human-readable label for the address (e.g. 'Home', 'HQ')."},"recipient_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Recipient Name","description":"Name of the person or business receiving items at this address."},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone","description":"Phone number in E.164 format, e.g. \"+14155551234\".","example":"+14155551234"},"line1":{"type":"string","maxLength":255,"title":"Line1","description":"Primary street address line (number and street)."},"line2":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Line2","description":"Optional secondary address line (apartment, suite, unit, etc.)."},"city":{"type":"string","maxLength":120,"title":"City","description":"City or locality."},"state":{"type":"string","maxLength":80,"title":"State","description":"State, province, or administrative region. ISO subdivision code when applicable."},"postal_code":{"type":"string","maxLength":32,"title":"Postal Code","description":"Postal or ZIP code."},"country":{"$ref":"#/components/schemas/CountryCode","description":"ISO 3166-1 alpha-2 country code; defaults to US when omitted.","default":"US"},"place_provider":{"anyOf":[{"$ref":"#/components/schemas/PlaceDataProvider"},{"type":"null"}],"description":"External place provider that suggested or verified this business address, when available."},"provider_place_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Provider Place Id","description":"Provider-native place id selected for this address, when available."},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"Existing address id for upsert; omit to create a new address."},"account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id","description":"Read-only account scope echoed by address reads; ignored on writes."},"mode":{"anyOf":[{"$ref":"#/components/schemas/ModeValue"},{"type":"null"}],"description":"Read-only mode echoed by address reads; ignored on writes."},"address_type":{"$ref":"#/components/schemas/ProfileAddressType","description":"Address category (e.g. shipping, billing) used by checkout to select an address."}},"additionalProperties":false,"type":"object","required":["line1","city","state","postal_code","address_type"],"title":"ProfileAddressCreate","description":"Request body for creating or upserting an address on a profile."},"ProfileAddressRead":{"properties":{"id":{"type":"string","title":"Id","description":"Stable address identifier (pr_addr_*)."},"account_id":{"type":"string","title":"Account Id","description":"Account that owns the profile this address belongs to."},"mode":{"$ref":"#/components/schemas/ModeValue","description":"Test/live data scope the address is stored under."},"address_type":{"$ref":"#/components/schemas/ProfileAddressType","description":"Address category (e.g. shipping, billing) used by checkout to select an address."},"is_default":{"type":"boolean","title":"Is Default","description":"Whether this address is the profile default for its address type."},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label","description":"Human-readable label for the address (e.g. 'Home', 'HQ'), when set."},"recipient_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recipient Name","description":"Name of the person or business receiving items at this address, when set."},"line1":{"type":"string","title":"Line1","description":"Primary street address line (number and street)."},"line2":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Line2","description":"Secondary address line (apartment, suite, unit, etc.), when present."},"city":{"type":"string","title":"City","description":"City or locality."},"state":{"type":"string","title":"State","description":"State, province, or administrative region. ISO subdivision code when applicable."},"postal_code":{"type":"string","title":"Postal Code","description":"Postal or ZIP code."},"country":{"$ref":"#/components/schemas/CountryCode","description":"ISO 3166-1 alpha-2 country code."},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone","description":"E.164 phone number associated with this address, when present."},"place_provider":{"anyOf":[{"$ref":"#/components/schemas/PlaceDataProvider"},{"type":"null"}],"description":"External place provider associated with this address, when available."},"provider_place_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Place Id","description":"Provider-native place id associated with this address, when available."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Timestamp when the address was first created."},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Timestamp of the most recent address update."}},"type":"object","required":["id","account_id","mode","address_type","is_default","line1","city","state","postal_code","country","created_at","updated_at"],"title":"ProfileAddressRead","description":"Serialized address attached to a profile."},"ProfileAddressType":{"type":"string","enum":["billing","shipping"],"title":"ProfileAddressType","description":"Purpose of an address attached to a profile."},"ProfileAuthAction":{"type":"string","enum":["profile_read","profile_update","address_manage","payment_method_manage","shopping_chat_use","purchase_manage"],"title":"ProfileAuthAction","description":"Profile-owner actions evaluated by the profile authorization service.\n\nThe initial release grants every action to active profiles. Keeping the\nvocabulary centralized makes a later account-owned restriction table an\nauthorization-service change rather than a token or route-contract change."},"ProfileAuthAuthenticatedRead":{"properties":{"session":{"$ref":"#/components/schemas/ProfileAuthSessionTokens"},"profile":{"$ref":"#/components/schemas/ProfileAuthProfileRead"},"session_kind":{"$ref":"#/components/schemas/ProfileAuthSessionKind","default":"owner"}},"type":"object","required":["session","profile"],"title":"ProfileAuthAuthenticatedRead","description":"Session credentials paired with the signed-in profile."},"ProfileAuthBusinessDetailsRead":{"properties":{"legal_entity_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Legal Entity Name"},"dba_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dba Name"},"business_structure":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Structure"},"industry_mcc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Mcc"},"ein_last4":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ein Last4"},"formation_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Formation State"},"formation_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Formation Date"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"}},"type":"object","title":"ProfileAuthBusinessDetailsRead","description":"Non-secret business identity fields visible to the profile owner."},"ProfileAuthCandidateCredentialState":{"type":"string","enum":["claimed","unclaimed"],"title":"ProfileAuthCandidateCredentialState","description":"Whether a candidate profile already has a password credential."},"ProfileAuthCandidateRead":{"properties":{"profile_id":{"type":"string","title":"Profile Id"},"display_name":{"type":"string","title":"Display Name"},"profile_type":{"$ref":"#/components/schemas/ProfileType"},"masked_phone":{"type":"string","title":"Masked Phone"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_activity_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Activity At"},"credential_state":{"$ref":"#/components/schemas/ProfileAuthCandidateCredentialState"}},"type":"object","required":["profile_id","display_name","profile_type","masked_phone","created_at","last_activity_at","credential_state"],"title":"ProfileAuthCandidateRead","description":"Safe profile chooser row disclosed only after email/password proof."},"ProfileAuthChallengeOutcome":{"type":"string","enum":["profile_selection_required","new_profile_required","profile_unavailable"],"title":"ProfileAuthChallengeOutcome","description":"Next UI step after a profile-auth email code is verified."},"ProfileAuthChallengePurpose":{"type":"string","enum":["signup","password_reset","email_change"],"title":"ProfileAuthChallengePurpose","description":"Why a profile owner must prove control of an email address."},"ProfileAuthChallengeStartRead":{"properties":{"challenge_id":{"type":"string","title":"Challenge Id"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["challenge_id","expires_at"],"title":"ProfileAuthChallengeStartRead","description":"Opaque challenge reference returned regardless of profile existence."},"ProfileAuthChallengeStartRequest":{"properties":{"email":{"type":"string","maxLength":255,"title":"Email","description":"Email address, e.g. \"user@example.com\".","example":"user@example.com"},"purpose":{"$ref":"#/components/schemas/ProfileAuthChallengePurpose"}},"additionalProperties":false,"type":"object","required":["email","purpose"],"title":"ProfileAuthChallengeStartRequest","description":"Start a signup or password-reset email challenge."},"ProfileAuthChallengeVerifiedRead":{"properties":{"verification_token":{"type":"string","title":"Verification Token"},"outcome":{"$ref":"#/components/schemas/ProfileAuthChallengeOutcome"},"candidates":{"items":{"$ref":"#/components/schemas/ProfileAuthCandidateRead"},"type":"array","title":"Candidates"}},"type":"object","required":["verification_token","outcome"],"title":"ProfileAuthChallengeVerifiedRead","description":"One-time verified continuation plus the next signup/reset step."},"ProfileAuthChallengeVerifyRequest":{"properties":{"code":{"type":"string","maxLength":6,"minLength":6,"pattern":"^\\d{6}$","title":"Code"}},"additionalProperties":false,"type":"object","required":["code"],"title":"ProfileAuthChallengeVerifyRequest","description":"Six-digit code submitted through the confidential merchant BFF."},"ProfileAuthEmailChangeCompleteRequest":{"properties":{"challenge_id":{"type":"string","maxLength":64,"title":"Challenge Id"},"code":{"type":"string","maxLength":6,"minLength":6,"pattern":"^\\d{6}$","title":"Code"}},"additionalProperties":false,"type":"object","required":["challenge_id","code"],"title":"ProfileAuthEmailChangeCompleteRequest","description":"Verify and apply a pending profile email replacement."},"ProfileAuthEmailChangeStartRequest":{"properties":{"email":{"type":"string","maxLength":255,"title":"Email","description":"Email address, e.g. \"user@example.com\".","example":"user@example.com"}},"additionalProperties":false,"type":"object","required":["email"],"title":"ProfileAuthEmailChangeStartRequest","description":"Request a verification code for a replacement profile email."},"ProfileAuthLoginRead":{"properties":{"status":{"$ref":"#/components/schemas/ProfileAuthLoginStatus"},"candidates":{"items":{"$ref":"#/components/schemas/ProfileAuthCandidateRead"},"type":"array","title":"Candidates"},"session":{"anyOf":[{"$ref":"#/components/schemas/ProfileAuthSessionTokens"},{"type":"null"}]},"profile":{"anyOf":[{"$ref":"#/components/schemas/ProfileAuthProfileRead"},{"type":"null"}]}},"type":"object","required":["status"],"title":"ProfileAuthLoginRead","description":"Authenticated session or a post-password duplicate chooser."},"ProfileAuthLoginRequest":{"properties":{"email":{"type":"string","maxLength":255,"title":"Email","description":"Email address, e.g. \"user@example.com\".","example":"user@example.com"},"password":{"type":"string","maxLength":1024,"minLength":1,"title":"Password"},"profile_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Profile Id"},"guest_access_token":{"anyOf":[{"type":"string","maxLength":4096,"minLength":16},{"type":"null"}],"title":"Guest Access Token","description":"Access token of the guest session this sign-in continues. Carries that guest profile's shopping chats onto the authenticated profile, exactly as signup does. Only applied once one profile is actually authenticated, never while duplicates are still being disambiguated."}},"additionalProperties":false,"type":"object","required":["email","password"],"title":"ProfileAuthLoginRequest","description":"Password login within the account selected by the merchant BFF."},"ProfileAuthLoginStatus":{"type":"string","enum":["authenticated","profile_selection_required"],"title":"ProfileAuthLoginStatus","description":"Result discriminator for password login."},"ProfileAuthLogoutRequest":{"properties":{"refresh_token":{"anyOf":[{"type":"string","maxLength":512,"minLength":32},{"type":"null"}],"title":"Refresh Token"}},"additionalProperties":false,"type":"object","title":"ProfileAuthLogoutRequest","description":"Revoke a profile refresh session when one is present."},"ProfileAuthMeRead":{"properties":{"merchant":{"$ref":"#/components/schemas/ProfileAuthMerchantRead"},"profile":{"$ref":"#/components/schemas/ProfileAuthProfileRead"},"actions":{"items":{"$ref":"#/components/schemas/ProfileAuthAction"},"type":"array","title":"Actions"},"session_kind":{"$ref":"#/components/schemas/ProfileAuthSessionKind"}},"type":"object","required":["merchant","profile","actions","session_kind"],"title":"ProfileAuthMeRead","description":"Current profile session, merchant identity, and effective actions."},"ProfileAuthMerchantRead":{"properties":{"name":{"type":"string","title":"Name"},"mode":{"$ref":"#/components/schemas/ModeValue"}},"type":"object","required":["name","mode"],"title":"ProfileAuthMerchantRead","description":"Browser-safe merchant identity derived from the server-side API key."},"ProfileAuthPasswordChangeRequest":{"properties":{"current_password":{"type":"string","maxLength":1024,"minLength":1,"title":"Current Password"},"new_password":{"type":"string","maxLength":1024,"minLength":1,"title":"New Password"}},"additionalProperties":false,"type":"object","required":["current_password","new_password"],"title":"ProfileAuthPasswordChangeRequest","description":"Change the current profile password and revoke all prior sessions."},"ProfileAuthPasswordResetRequest":{"properties":{"verification_token":{"type":"string","maxLength":512,"minLength":32,"title":"Verification Token"},"profile_id":{"type":"string","maxLength":64,"title":"Profile Id"},"new_password":{"type":"string","maxLength":1024,"minLength":1,"title":"New Password"}},"additionalProperties":false,"type":"object","required":["verification_token","profile_id","new_password"],"title":"ProfileAuthPasswordResetRequest","description":"Reset one selected profile credential after email verification."},"ProfileAuthProfilePatch":{"properties":{"first_name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Last Name"},"email":{"anyOf":[{"type":"string","maxLength":255,"description":"Email address, e.g. \"user@example.com\".","example":"user@example.com"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string","maxLength":64,"description":"Phone number in E.164 format, e.g. \"+14155551234\".","example":"+14155551234"},{"type":"null"}],"title":"Phone"},"dob":{"anyOf":[{"$ref":"#/components/schemas/Dob"},{"type":"null"}]},"legal_gender":{"anyOf":[{"$ref":"#/components/schemas/LegalGender"},{"type":"null"}]},"default_currency":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}]},"addresses":{"anyOf":[{"items":{"$ref":"#/components/schemas/ProfileAddressCreate"},"type":"array"},{"type":"null"}],"title":"Addresses"},"business_details":{"anyOf":[{"$ref":"#/components/schemas/BusinessDetailsPatch"},{"type":"null"}]}},"additionalProperties":false,"type":"object","title":"ProfileAuthProfilePatch","description":"Allowlisted profile-owner update; email has a dedicated verified flow."},"ProfileAuthProfileRead":{"properties":{"id":{"type":"string","title":"Id"},"profile_type":{"$ref":"#/components/schemas/ProfileType"},"status":{"$ref":"#/components/schemas/ProfileStatus"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"email":{"type":"string","title":"Email"},"phone":{"type":"string","title":"Phone"},"dob":{"anyOf":[{"$ref":"#/components/schemas/DobRead"},{"type":"null"}]},"legal_gender":{"anyOf":[{"$ref":"#/components/schemas/LegalGender"},{"type":"null"}]},"country":{"$ref":"#/components/schemas/CountryCode"},"default_currency":{"$ref":"#/components/schemas/CurrencyCode"},"addresses":{"items":{"$ref":"#/components/schemas/ProfileAddressRead"},"type":"array","title":"Addresses"},"business_details":{"anyOf":[{"$ref":"#/components/schemas/ProfileAuthBusinessDetailsRead"},{"type":"null"}]},"default_payment_method":{"anyOf":[{"$ref":"#/components/schemas/ProfileListItemPaymentMethod"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_activity_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Activity At"}},"type":"object","required":["id","profile_type","status","first_name","last_name","email","phone","dob","country","default_currency","created_at"],"title":"ProfileAuthProfileRead","description":"Allowlisted self-service profile projection."},"ProfileAuthRefreshRequest":{"properties":{"refresh_token":{"type":"string","maxLength":512,"minLength":32,"title":"Refresh Token"}},"additionalProperties":false,"type":"object","required":["refresh_token"],"title":"ProfileAuthRefreshRequest","description":"Rotate an opaque profile refresh token."},"ProfileAuthSessionKind":{"type":"string","enum":["owner","guest"],"title":"ProfileAuthSessionKind","description":"How a profile-scoped browser session was established.\n\n``OWNER`` sessions are backed by a verified password credential. ``GUEST``\nsessions are merchant-created, revocable sessions for one otherwise\nunclaimed profile; they never satisfy account-level authentication."},"ProfileAuthSessionTokens":{"properties":{"access_token":{"type":"string","title":"Access Token"},"refresh_token":{"type":"string","title":"Refresh Token"},"access_expires_at":{"type":"string","format":"date-time","title":"Access Expires At"},"refresh_expires_at":{"type":"string","format":"date-time","title":"Refresh Expires At"}},"type":"object","required":["access_token","refresh_token","access_expires_at","refresh_expires_at"],"title":"ProfileAuthSessionTokens","description":"Credentials returned only to a confidential merchant backend."},"ProfileAuthSignupKind":{"type":"string","enum":["claim_existing","create_profile"],"title":"ProfileAuthSignupKind","description":"How a verified signup challenge becomes an authenticated profile."},"ProfileAuthSignupRequest":{"properties":{"kind":{"$ref":"#/components/schemas/ProfileAuthSignupKind"},"verification_token":{"type":"string","maxLength":512,"minLength":32,"title":"Verification Token"},"password":{"type":"string","maxLength":1024,"minLength":1,"title":"Password"},"profile_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Profile Id"},"profile":{"anyOf":[{"$ref":"#/components/schemas/ProfileCreate"},{"type":"null"}]},"guest_access_token":{"anyOf":[{"type":"string","maxLength":4096,"minLength":16},{"type":"null"}],"title":"Guest Access Token","description":"Access token of the guest session this signup continues. When supplied and still live, the guest profile's shopping chats are carried over to the authenticated profile. A bare profile id is deliberately not accepted: possession of the token is what proves the caller owns the conversation being moved."}},"additionalProperties":false,"type":"object","required":["kind","verification_token","password"],"title":"ProfileAuthSignupRequest","description":"Complete a verified challenge by claiming or creating one profile."},"ProfileBeneficialOwnerCreate":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"Existing owner id for upsert; omit to create."},"first_name":{"type":"string","maxLength":255,"title":"First Name"},"last_name":{"type":"string","maxLength":255,"title":"Last Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"Email address, e.g. \"user@example.com\".","example":"user@example.com"},"title":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Title"},"ownership_percentage":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Ownership Percentage"},"dob":{"anyOf":[{"$ref":"#/components/schemas/Dob"},{"type":"null"}]},"country":{"anyOf":[{"$ref":"#/components/schemas/CountryCode"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["first_name","last_name"],"title":"ProfileBeneficialOwnerCreate","description":"Request body for creating or upserting a beneficial owner on a business profile."},"ProfileBillingAddress":{"properties":{"is_default":{"type":"boolean","title":"Is Default","description":"Whether this address should become the profile default for its address type.","default":false},"label":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Label","description":"Optional human-readable label for the address (e.g. 'Home', 'HQ')."},"recipient_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Recipient Name","description":"Name of the person or business receiving items at this address."},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone","description":"Phone number in E.164 format, e.g. \"+14155551234\".","example":"+14155551234"},"line1":{"type":"string","maxLength":255,"title":"Line1","description":"Primary street address line (number and street)."},"line2":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Line2","description":"Optional secondary address line (apartment, suite, unit, etc.)."},"city":{"type":"string","maxLength":120,"title":"City","description":"City or locality."},"state":{"type":"string","maxLength":80,"title":"State","description":"State, province, or administrative region. ISO subdivision code when applicable."},"postal_code":{"type":"string","maxLength":32,"title":"Postal Code","description":"Postal or ZIP code."},"country":{"$ref":"#/components/schemas/CountryCode","description":"ISO 3166-1 alpha-2 country code; defaults to US when omitted.","default":"US"},"place_provider":{"anyOf":[{"$ref":"#/components/schemas/PlaceDataProvider"},{"type":"null"}],"description":"External place provider that suggested or verified this business address, when available."},"provider_place_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Provider Place Id","description":"Provider-native place id selected for this address, when available."}},"additionalProperties":false,"type":"object","required":["line1","city","state","postal_code"],"title":"ProfileBillingAddress","description":"Billing address fields supplied inline while creating or updating a payment method."},"ProfileBudgetIntervalRead":{"properties":{"interval":{"$ref":"#/components/schemas/PolicySpendingLimitInterval"},"allowed_amount":{"type":"integer","minimum":0.0,"title":"Allowed Amount"},"remaining_amount":{"type":"integer","minimum":0.0,"title":"Remaining Amount"}},"additionalProperties":false,"type":"object","required":["interval","allowed_amount","remaining_amount"],"title":"ProfileBudgetIntervalRead","description":"Allowed and remaining profile budget for one configured policy interval."},"ProfileBudgetRead":{"properties":{"profile_id":{"type":"string","title":"Profile Id"},"policy_id":{"type":"string","title":"Policy Id"},"policy_version_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Policy Version Id"},"currency":{"$ref":"#/components/schemas/CurrencyCode"},"max_allowed_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Allowed Amount"},"max_allowed_per_transaction":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Allowed Per Transaction"},"max_allowed_by_interval":{"items":{"$ref":"#/components/schemas/ProfileBudgetIntervalRead"},"type":"array","title":"Max Allowed By Interval"},"policy_currency":{"$ref":"#/components/schemas/CurrencyCode"},"fx_bps_rate":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Fx Bps Rate"}},"additionalProperties":false,"type":"object","required":["profile_id","policy_id","currency","policy_currency"],"title":"ProfileBudgetRead","description":"Current policy budget headroom for a profile."},"ProfileCreate":{"properties":{"profile_type":{"$ref":"#/components/schemas/ProfileType"},"first_name":{"type":"string","maxLength":255,"title":"First Name"},"last_name":{"type":"string","maxLength":255,"title":"Last Name"},"email":{"type":"string","maxLength":255,"title":"Email","description":"Email address, e.g. \"user@example.com\".","example":"user@example.com"},"phone":{"type":"string","maxLength":64,"title":"Phone","description":"Phone number in E.164 format, e.g. \"+14155551234\".","example":"+14155551234"},"dob":{"$ref":"#/components/schemas/Dob"},"legal_gender":{"anyOf":[{"$ref":"#/components/schemas/LegalGender"},{"type":"null"}],"description":"Optional legal-document gender marker used for travel and identity workflows."},"country":{"$ref":"#/components/schemas/CountryCode"},"default_currency":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}],"description":"Optional default ISO 4217 currency; defaults from country when omitted."},"addresses":{"items":{"$ref":"#/components/schemas/ProfileAddressCreate"},"type":"array","title":"Addresses"},"payment_methods":{"items":{"$ref":"#/components/schemas/ProfilePaymentMethodCreate"},"type":"array","title":"Payment Methods"},"business_details":{"anyOf":[{"$ref":"#/components/schemas/BusinessDetailsCreate"},{"type":"null"}]},"issuing":{"$ref":"#/components/schemas/IssuingCapabilityRequest","description":"Profile-level Issuing capability request."},"issuing_documents":{"anyOf":[{"$ref":"#/components/schemas/ProfileIssuingDocumentsInput"},{"type":"null"}]},"accept_cardholder_terms":{"type":"boolean","title":"Accept Cardholder Terms","default":false},"metadata":{"additionalProperties":{"type":"string"},"type":"object","title":"Metadata"},"preferences":{"anyOf":[{"$ref":"#/components/schemas/ProfilePreferencesCreate"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["profile_type","first_name","last_name","email","phone","dob","country"],"title":"ProfileCreate","description":"Request body for creating a new end-customer profile."},"ProfileElementKeyRead":{"properties":{"publishable_key":{"type":"string","title":"Publishable Key"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["publishable_key","expires_at"],"title":"ProfileElementKeyRead","description":"Credential constrained to one profile, frame, and merchant embedder."},"ProfileElementKeyRequest":{"properties":{"publishable_key":{"type":"string","maxLength":512,"minLength":16,"title":"Publishable Key"},"origin":{"type":"string","maxLength":255,"minLength":1,"title":"Origin"}},"additionalProperties":false,"type":"object","required":["publishable_key","origin"],"title":"ProfileElementKeyRequest","description":"Server-only key exchange for one profile and merchant embed origin."},"ProfileFulfillmentPreferencesCreate":{"properties":{"method":{"anyOf":[{"$ref":"#/components/schemas/FulfillmentMethod"},{"type":"null"}],"description":"Default preferred fulfillment method for this profile."},"max_fee_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Fee Amount","description":"Default maximum shipping, delivery, or pickup fee amount in minor currency units."},"preferred_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Preferred Time","description":"Default timezone-aware delivery or pickup timestamp for future purchase intents."},"delivery_method":{"anyOf":[{"$ref":"#/components/schemas/DeliveryMethod"},{"type":"null"}],"description":"Default delivery handoff instruction for local delivery checkouts."}},"additionalProperties":false,"type":"object","title":"ProfileFulfillmentPreferencesCreate","description":"Fulfillment defaults supplied while creating profile preferences."},"ProfileIssuingDocumentUploadRef":{"properties":{"provider_file_id":{"type":"string","maxLength":255,"minLength":5,"title":"Provider File Id"},"filename":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Filename"},"content_type":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Content Type"},"file_size_bytes":{"anyOf":[{"type":"integer","maximum":10485760.0,"minimum":1.0},{"type":"null"}],"title":"File Size Bytes"}},"additionalProperties":false,"type":"object","required":["provider_file_id"],"title":"ProfileIssuingDocumentUploadRef","description":"Browser-uploaded Stripe file reference for a profile issuing document."},"ProfileIssuingDocumentsInput":{"properties":{"identity_document":{"anyOf":[{"$ref":"#/components/schemas/ProfileIssuingIdentityDocumentInput"},{"type":"null"}]}},"additionalProperties":false,"type":"object","title":"ProfileIssuingDocumentsInput","description":"Issuing document refs supplied with profile create/update."},"ProfileIssuingIdentityDocumentInput":{"properties":{"front":{"anyOf":[{"$ref":"#/components/schemas/ProfileIssuingDocumentUploadRef"},{"type":"null"}]},"back":{"anyOf":[{"$ref":"#/components/schemas/ProfileIssuingDocumentUploadRef"},{"type":"null"}]}},"additionalProperties":false,"type":"object","title":"ProfileIssuingIdentityDocumentInput","description":"Front/back identity document refs uploaded to Stripe Files."},"ProfileIssuingState":{"type":"string","enum":["not_requested","enabled","disabled"],"title":"ProfileIssuingState","description":"Consolidated profile issuing state used by profile list filters."},"ProfileListItemPaymentMethod":{"properties":{"card_brand":{"anyOf":[{"$ref":"#/components/schemas/CardBrand"},{"type":"null"}]},"card_last4":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Last4"}},"type":"object","title":"ProfileListItemPaymentMethod","description":"Default payment method summary (brand + last4) for a profile list row."},"ProfileListSummary":{"properties":{"total_profiles":{"type":"integer","title":"Total Profiles"},"consumer_count":{"type":"integer","title":"Consumer Count"},"business_count":{"type":"integer","title":"Business Count"},"active_count":{"type":"integer","title":"Active Count"},"restricted_count":{"type":"integer","title":"Restricted Count"},"archived_count":{"type":"integer","title":"Archived Count"}},"type":"object","required":["total_profiles","consumer_count","business_count","active_count","restricted_count","archived_count"],"title":"ProfileListSummary","description":"Aggregate stats for the profiles list header."},"ProfileLocalizationPreferencesCreate":{"properties":{"default_locale":{"anyOf":[{"$ref":"#/components/schemas/LocaleCode"},{"type":"null"}],"description":"Optional BCP 47 default locale for this profile."},"default_timezone":{"anyOf":[{"$ref":"#/components/schemas/TimeZone"},{"type":"null"}],"description":"Optional explicit default timezone; otherwise derived from browser context or ZIP."}},"additionalProperties":false,"type":"object","title":"ProfileLocalizationPreferencesCreate","description":"Localization defaults supplied while creating profile preferences."},"ProfileLocalizationPreferencesPatch":{"properties":{"default_locale":{"anyOf":[{"$ref":"#/components/schemas/LocaleCode"},{"type":"null"}],"description":"BCP 47 default locale for this profile."},"default_timezone":{"anyOf":[{"$ref":"#/components/schemas/TimeZone"},{"type":"null"}],"description":"Explicit default timezone override for this profile."}},"additionalProperties":false,"type":"object","title":"ProfileLocalizationPreferencesPatch","description":"Partial update for localization defaults on profile preferences."},"ProfileLocalizationPreferencesRead":{"properties":{"default_locale":{"$ref":"#/components/schemas/LocaleCode"},"default_timezone":{"$ref":"#/components/schemas/TimeZone"}},"type":"object","required":["default_locale","default_timezone"],"title":"ProfileLocalizationPreferencesRead","description":"Localization defaults returned with profile preferences."},"ProfileMerchantConnectionRead":{"properties":{"merchant":{"$ref":"#/components/schemas/MerchantRead","description":"Display-ready merchant identity for this connection."},"status":{"$ref":"#/components/schemas/BrowserAuthProfileStatus","description":"Lifecycle status of the merchant connection."},"is_active":{"type":"boolean","title":"Is Active","description":"True when the connection has authenticated browser state available for reuse."},"created":{"type":"string","format":"date-time","title":"Created","description":"Timestamp when the merchant connection was created."}},"type":"object","required":["merchant","status","is_active","created"],"title":"ProfileMerchantConnectionRead","description":"Metadata-only merchant browser-auth connection attached to a profile."},"ProfilePaymentMethodBillingAddressRef":{"properties":{"id":{"type":"string","maxLength":64,"title":"Id"}},"additionalProperties":false,"type":"object","required":["id"],"title":"ProfilePaymentMethodBillingAddressRef","description":"Existing profile billing address reference for payment-method resource APIs."},"ProfilePaymentMethodCardCreate":{"properties":{"kind":{"$ref":"#/components/schemas/CardPaymentMethodKind"},"vault_token_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Vault Token Id","description":"Card vault token id returned by the Elements iframe. In **test mode only**, you may pass a test-card identifier (e.g. `visa_auto_approved`) from the [test cards](#tag/test-cards) reference and the server will mint a real vault token from the registered PAN with expiry `01/30` and CVC `111`. Live-mode requests that send a test-card identifier are rejected with `test_card_identifier_not_allowed_in_live_mode`."},"cardholder_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Cardholder Name"},"initial_purchase_intent_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Initial Purchase Intent Id"},"agentic_credentials_enrollment_requested":{"type":"boolean","title":"Agentic Credentials Enrollment Requested","default":true},"agentic_terms_acknowledged":{"type":"boolean","title":"Agentic Terms Acknowledged","default":false}},"additionalProperties":false,"type":"object","required":["kind"],"title":"ProfilePaymentMethodCardCreate","description":"Card-specific create fields for profile payment-method resource APIs."},"ProfilePaymentMethodCardPatch":{"properties":{"cardholder_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Cardholder Name"}},"additionalProperties":false,"type":"object","title":"ProfilePaymentMethodCardPatch","description":"Mutable card-specific fields for profile payment-method update requests."},"ProfilePaymentMethodCreate":{"properties":{"type":{"$ref":"#/components/schemas/ProfilePaymentMethodType","description":"Payment method family. Only \"card\" is currently supported."},"label":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Label"},"policy_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Policy Id"},"is_default":{"type":"boolean","title":"Is Default","default":false},"billing_address":{"anyOf":[{"$ref":"#/components/schemas/ProfileBillingAddress"},{"$ref":"#/components/schemas/ProfilePaymentMethodBillingAddressRef"},{"type":"null"}],"title":"Billing Address"},"card":{"$ref":"#/components/schemas/ProfilePaymentMethodCardCreate"},"initial_budget":{"anyOf":[{"$ref":"#/components/schemas/InitialStandingBudgetRequest"},{"type":"null"}],"description":"Pre-configure a standing credentials allowance for this card."},"id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Id","description":"Existing payment method id for profile update upsert lists; omit to create a new method."}},"additionalProperties":false,"type":"object","required":["type","card"],"title":"ProfilePaymentMethodCreate","description":"Payment-method upsert item used by profile create and patch bulk arrays."},"ProfilePaymentMethodStandingAllowanceRead":{"properties":{"amount_cents":{"type":"integer","title":"Amount Cents","description":"Standing allowance amount in minor currency units."},"currency_code":{"$ref":"#/components/schemas/CurrencyCode","description":"ISO 4217 currency of the allowance amount."}},"type":"object","required":["amount_cents","currency_code"],"title":"ProfilePaymentMethodStandingAllowanceRead","description":"Current standing spending-allowance budget for a card.\n\nMirrors the card's active agentic-credentials standing instruction (the\nlatest open, unexpired one) so payment-method list UIs — the dashboard and\nthe hosted update-link payment-methods surface — can show the authorized\nbudget amount without a separate approvals query. ``None`` for cards with no\nstanding allowance (e.g. Stripe-issued virtual cards)."},"ProfilePaymentMethodType":{"type":"string","enum":["card"],"title":"ProfilePaymentMethodType","description":"Top-level profile payment method families accepted by resource APIs."},"ProfilePreferencesCreate":{"properties":{"localization":{"anyOf":[{"$ref":"#/components/schemas/ProfileLocalizationPreferencesCreate"},{"type":"null"}]},"fulfillment":{"anyOf":[{"$ref":"#/components/schemas/ProfileFulfillmentPreferencesCreate"},{"type":"null"}]},"travel":{"anyOf":[{"$ref":"#/components/schemas/ProfileTravelPreferencesWrite"},{"type":"null"}]}},"additionalProperties":false,"type":"object","title":"ProfilePreferencesCreate","description":"Profile-level preference defaults supplied while creating a profile."},"ProfileStatus":{"type":"string","enum":["active","restricted","archived"],"title":"ProfileStatus","description":"Lifecycle status of an end-customer profile."},"ProfileStripeSynchronizationRead":{"properties":{"link_id":{"type":"string","title":"Link Id"},"connection_id":{"type":"string","title":"Connection Id"},"source_stripe_account_id":{"type":"string","title":"Source Stripe Account Id"},"source_kind":{"$ref":"#/components/schemas/StripeCustomerSourceKind"},"stripe_customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Customer Id"},"stripe_customer_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Customer Account Id"},"state":{"$ref":"#/components/schemas/StripeCustomerProfileSyncState"},"connected":{"type":"boolean","title":"Connected"},"billing_address_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Address Id"},"shipping_address_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Shipping Address Id"},"last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Synced At"},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error"}},"type":"object","required":["link_id","connection_id","source_stripe_account_id","source_kind","state","connected"],"title":"ProfileStripeSynchronizationRead","description":"Secret-free Stripe source authority attached to an imported profile."},"ProfileTravelAirPreferencesRead":{"properties":{"seat_preference":{"anyOf":[{"$ref":"#/components/schemas/AirSeatPreference"},{"type":"null"}]},"cabin_preference":{"anyOf":[{"$ref":"#/components/schemas/AirCabinPreference"},{"type":"null"}]}},"type":"object","title":"ProfileTravelAirPreferencesRead","description":"Air-travel defaults returned with profile preferences."},"ProfileTravelAirPreferencesWrite":{"properties":{"seat_preference":{"anyOf":[{"$ref":"#/components/schemas/AirSeatPreference"},{"type":"null"}],"description":"Default seat-position preference for air bookings."},"cabin_preference":{"anyOf":[{"$ref":"#/components/schemas/AirCabinPreference"},{"type":"null"}],"description":"Default cabin-class preference for air bookings."}},"additionalProperties":false,"type":"object","title":"ProfileTravelAirPreferencesWrite","description":"Air-travel defaults supplied on profile preferences create/patch."},"ProfileTravelGroundPreferencesRead":{"properties":{"rental_car_class":{"anyOf":[{"$ref":"#/components/schemas/RentalCarClassPreference"},{"type":"null"}]},"rental_car_transmission":{"anyOf":[{"$ref":"#/components/schemas/RentalCarTransmissionPreference"},{"type":"null"}]},"rail_seat_preference":{"anyOf":[{"$ref":"#/components/schemas/RailSeatPreference"},{"type":"null"}]}},"type":"object","title":"ProfileTravelGroundPreferencesRead","description":"Ground-travel defaults returned with profile preferences."},"ProfileTravelGroundPreferencesWrite":{"properties":{"rental_car_class":{"anyOf":[{"$ref":"#/components/schemas/RentalCarClassPreference"},{"type":"null"}],"description":"Default rental-car class preference for travel bookings."},"rental_car_transmission":{"anyOf":[{"$ref":"#/components/schemas/RentalCarTransmissionPreference"},{"type":"null"}],"description":"Default rental-car transmission preference for travel bookings."},"rail_seat_preference":{"anyOf":[{"$ref":"#/components/schemas/RailSeatPreference"},{"type":"null"}],"description":"Default seat-position preference for rail bookings."}},"additionalProperties":false,"type":"object","title":"ProfileTravelGroundPreferencesWrite","description":"Ground-travel defaults supplied on profile preferences create/patch."},"ProfileTravelHotelPreferencesRead":{"properties":{"bed_preference":{"anyOf":[{"$ref":"#/components/schemas/HotelBedPreference"},{"type":"null"}]},"smoking_preference":{"anyOf":[{"$ref":"#/components/schemas/HotelSmokingPreference"},{"type":"null"}]}},"type":"object","title":"ProfileTravelHotelPreferencesRead","description":"Hotel defaults returned with profile preferences."},"ProfileTravelHotelPreferencesWrite":{"properties":{"bed_preference":{"anyOf":[{"$ref":"#/components/schemas/HotelBedPreference"},{"type":"null"}],"description":"Default bed setup preference for hotel bookings."},"smoking_preference":{"anyOf":[{"$ref":"#/components/schemas/HotelSmokingPreference"},{"type":"null"}],"description":"Default smoking-room preference for hotel bookings."}},"additionalProperties":false,"type":"object","title":"ProfileTravelHotelPreferencesWrite","description":"Hotel defaults supplied on profile preferences create/patch."},"ProfileTravelLoyaltyAccountUpsert":{"properties":{"id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Id","description":"Existing loyalty account id for update; omit to create a new account."},"program_type":{"$ref":"#/components/schemas/TravelLoyaltyProgramType","description":"Travel category this loyalty membership belongs to."},"program_code":{"$ref":"#/components/schemas/TravelLoyaltyProgramCode","description":"Known loyalty program code, or other for a caller-supplied program name.","default":"other"},"program_name":{"anyOf":[{"type":"string","maxLength":160},{"type":"null"}],"title":"Program Name","description":"Display name for custom programs; optional for known program codes."},"membership_number":{"type":"string","maxLength":128,"title":"Membership Number","description":"Membership or rewards number for the travel program."},"holder_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Holder Name","description":"Traveler name as registered with the loyalty program, when different."},"is_default":{"type":"boolean","title":"Is Default","description":"Whether this membership is the default for its travel program type.","default":false}},"additionalProperties":false,"type":"object","required":["program_type","membership_number"],"title":"ProfileTravelLoyaltyAccountUpsert","description":"Create or update one travel loyalty account nested under profile preferences."},"ProfileTravelPreferencesWrite":{"properties":{"known_traveler_number":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Known Traveler Number","description":"Known Traveler Number or TSA PreCheck identifier."},"redress_number":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Redress Number","description":"DHS redress control number."},"home_airport_code":{"anyOf":[{"type":"string","maxLength":3,"minLength":3},{"type":"null"}],"title":"Home Airport Code","description":"Home airport as a three-letter IATA-style code."},"preferred_airport_code":{"anyOf":[{"type":"string","maxLength":3,"minLength":3},{"type":"null"}],"title":"Preferred Airport Code","description":"Preferred departure airport as a three-letter IATA-style code."},"air":{"anyOf":[{"$ref":"#/components/schemas/ProfileTravelAirPreferencesWrite"},{"type":"null"}]},"hotel":{"anyOf":[{"$ref":"#/components/schemas/ProfileTravelHotelPreferencesWrite"},{"type":"null"}]},"ground":{"anyOf":[{"$ref":"#/components/schemas/ProfileTravelGroundPreferencesWrite"},{"type":"null"}]},"loyalty_accounts":{"anyOf":[{"items":{"$ref":"#/components/schemas/ProfileTravelLoyaltyAccountUpsert"},"type":"array"},{"type":"null"}],"title":"Loyalty Accounts","description":"Loyalty accounts to merge-create or merge-update; omission leaves accounts unchanged."},"loyalty_account_delete_ids":{"items":{"type":"string"},"type":"array","title":"Loyalty Account Delete Ids","description":"Existing profile travel loyalty account ids to delete explicitly."}},"additionalProperties":false,"type":"object","title":"ProfileTravelPreferencesWrite","description":"Travel preferences supplied while creating or patching profile preferences."},"ProfileType":{"type":"string","enum":["consumer","business"],"title":"ProfileType","description":"Whether the profile represents an individual or a company."},"PromotionArmRead":{"properties":{"kind":{"$ref":"#/components/schemas/PromotionDiscountKind"},"percent_bps":{"anyOf":[{"type":"integer","maximum":9999.0,"minimum":1.0},{"type":"null"}],"title":"Percent Bps"},"amount":{"anyOf":[{"type":"integer","maximum":2147483647.0,"minimum":1.0},{"type":"null"}],"title":"Amount"},"ttl_minutes":{"type":"integer","maximum":10080.0,"minimum":1.0,"title":"Ttl Minutes"},"weight":{"type":"integer","maximum":1000000.0,"minimum":1.0,"title":"Weight","default":1},"status":{"$ref":"#/components/schemas/PromotionArmStatus","default":"active"},"id":{"type":"string","title":"Id"},"position":{"type":"integer","title":"Position"},"learned_weight":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Learned Weight","description":"Odds the system learned for this arm from what buyers redeemed, out of 10,000. Set only on an `adaptive` promotion with enough decided offers; the draw uses `weight` until every active arm has one."},"weights_learned_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Weights Learned At","description":"When the learned odds were last recomputed."}},"additionalProperties":false,"type":"object","required":["kind","ttl_minutes","id","position"],"title":"PromotionArmRead","description":"One persisted arm, with the stable position offers are drawn by."},"PromotionArmStatus":{"type":"string","enum":["active","paused"],"title":"PromotionArmStatus","description":"Whether one arm may currently be drawn for a buyer."},"PromotionArmWrite":{"properties":{"kind":{"$ref":"#/components/schemas/PromotionDiscountKind"},"percent_bps":{"anyOf":[{"type":"integer","maximum":9999.0,"minimum":1.0},{"type":"null"}],"title":"Percent Bps"},"amount":{"anyOf":[{"type":"integer","maximum":2147483647.0,"minimum":1.0},{"type":"null"}],"title":"Amount"},"ttl_minutes":{"type":"integer","maximum":10080.0,"minimum":1.0,"title":"Ttl Minutes"},"weight":{"type":"integer","maximum":1000000.0,"minimum":1.0,"title":"Weight","default":1},"status":{"$ref":"#/components/schemas/PromotionArmStatus","default":"active"}},"additionalProperties":false,"type":"object","required":["kind","ttl_minutes"],"title":"PromotionArmWrite","description":"One offer a promotion may make: a discount, its window, and its weight."},"PromotionCounterStrategy":{"type":"string","enum":["accept_or_decline","counter_at_floor"],"title":"PromotionCounterStrategy","description":"What the native responder does with a price proposal below the floor."},"PromotionCreate":{"properties":{"name":{"type":"string","maxLength":120,"minLength":1,"title":"Name","description":"Name of the promotion. Buyers see it: it is the title shown in the catalog and on every quote, checkout, and order the promotion applies to."},"description":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Description","description":"Seller-only note about the promotion. Never shown to buyers."},"market_id":{"type":"string","maxLength":64,"minLength":1,"title":"Market Id"},"currency":{"$ref":"#/components/schemas/CurrencyCode"},"status":{"$ref":"#/components/schemas/PromotionStatus","default":"draft"},"visibility":{"$ref":"#/components/schemas/PromotionVisibility","default":"public"},"starts_at":{"type":"string","format":"date-time","title":"Starts At"},"ends_at":{"type":"string","format":"date-time","title":"Ends At"},"max_discount_amount":{"type":"integer","maximum":2147483647.0,"minimum":1.0,"title":"Max Discount Amount","default":10000},"floor_unit_amount":{"type":"integer","maximum":2147483647.0,"minimum":0.0,"title":"Floor Unit Amount","default":0},"max_redemptions":{"type":"integer","maximum":2147483647.0,"minimum":1.0,"title":"Max Redemptions","default":100},"max_total_discount_amount":{"type":"integer","maximum":2147483647.0,"minimum":1.0,"title":"Max Total Discount Amount","default":200000},"selection_policy":{"$ref":"#/components/schemas/PromotionSelectionPolicy","description":"How a buyer is drawn an arm. `weighted_random` always uses the arms' own `weight`. `adaptive` re-learns the odds hourly from what buyers actually redeemed, favouring the arm that earns most per offer, keeping every arm in the draw, and easing toward shallower arms when the discount budget is spent ahead of schedule. It learns odds for everyone; it never sets a price per buyer.","default":"weighted_random"},"draw_period_seconds":{"type":"integer","maximum":2147483647.0,"minimum":3600.0,"title":"Draw Period Seconds","default":86400},"offer_probability_bps":{"type":"integer","maximum":10000.0,"minimum":0.0,"title":"Offer Probability Bps","description":"Chance that an eligible identified buyer receives one active arm, in basis points. The remaining share is a sticky no-offer holdout. Anonymous buyers receive no offer when this is below 10,000.","default":10000},"eligibility":{"$ref":"#/components/schemas/PromotionEligibility","default":"anyone"},"required_identity":{"$ref":"#/components/schemas/PromotionRequiredIdentity","default":"none"},"per_identity_limit":{"anyOf":[{"type":"integer","maximum":2147483647.0,"minimum":1.0},{"type":"null"}],"title":"Per Identity Limit"},"per_identity_window_seconds":{"anyOf":[{"type":"integer","maximum":2147483647.0,"minimum":1.0},{"type":"null"}],"title":"Per Identity Window Seconds"},"issuance_limit_count":{"anyOf":[{"type":"integer","maximum":2147483647.0,"minimum":1.0},{"type":"null"}],"title":"Issuance Limit Count"},"issuance_limit_amount":{"anyOf":[{"type":"integer","maximum":2147483647.0,"minimum":1.0},{"type":"null"}],"title":"Issuance Limit Amount"},"issuance_window_seconds":{"anyOf":[{"type":"integer","maximum":2147483647.0,"minimum":1.0},{"type":"null"}],"title":"Issuance Window Seconds"},"negotiable":{"type":"boolean","title":"Negotiable","description":"Whether a buyer may propose a unit price when asking for a quote. When `floor_unit_amount` is set, it is the least a proposal can reach; otherwise the paid-item minimum applies. A proposal never restarts or extends an offer's deadline.","default":false},"counter_strategy":{"$ref":"#/components/schemas/PromotionCounterStrategy","description":"What a proposal below the floor gets. `accept_or_decline` leaves the offer where it was; `counter_at_floor` answers with the floor price, which tells the buyer what the floor is.","default":"accept_or_decline"},"max_negotiation_rounds":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"Max Negotiation Rounds","description":"Most price proposals one quote may make.","default":3},"target_mode":{"$ref":"#/components/schemas/PromotionTargetMode","description":"`include` applies only to matching targets; `exclude` applies to everything in the market except matching targets.","default":"include"},"targets":{"items":{"$ref":"#/components/schemas/PromotionTargetWrite"},"type":"array","maxItems":500,"title":"Targets"},"arms":{"items":{"$ref":"#/components/schemas/PromotionArmWrite"},"type":"array","maxItems":8,"minItems":1,"title":"Arms"}},"additionalProperties":false,"type":"object","required":["name","market_id","currency","starts_at","ends_at","arms"],"title":"PromotionCreate","description":"One seller campaign with its arms and targets."},"PromotionDiscountKind":{"type":"string","enum":["percent","amount_off","fixed_price"],"title":"PromotionDiscountKind","description":"How one promotion arm turns a regular unit price into an offer.\n\n``PERCENT`` takes basis points off the unit price, ``AMOUNT_OFF`` subtracts\nminor units from it, and ``FIXED_PRICE`` replaces it. Every kind resolves to\na per-unit discount, so a line discount is always that discount times the\nunits bought."},"PromotionEligibility":{"type":"string","enum":["anyone","first_time_customer"],"title":"PromotionEligibility","description":"Which buyers a promotion is meant for.\n\n``FIRST_TIME_CUSTOMER`` refuses any buyer whose verified customer, email,\nphone, or shipping address already appears on a paid order or an earlier\nredemption; ``ANYONE`` relies on the per-identity limit alone."},"PromotionPatch":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":120,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Description"},"market_id":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Market Id"},"currency":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}]},"status":{"anyOf":[{"$ref":"#/components/schemas/PromotionStatus"},{"type":"null"}]},"visibility":{"anyOf":[{"$ref":"#/components/schemas/PromotionVisibility"},{"type":"null"}]},"starts_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Starts At"},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At"},"max_discount_amount":{"anyOf":[{"type":"integer","maximum":2147483647.0,"minimum":1.0},{"type":"null"}],"title":"Max Discount Amount"},"floor_unit_amount":{"anyOf":[{"type":"integer","maximum":2147483647.0,"minimum":0.0},{"type":"null"}],"title":"Floor Unit Amount"},"max_redemptions":{"anyOf":[{"type":"integer","maximum":2147483647.0,"minimum":1.0},{"type":"null"}],"title":"Max Redemptions"},"max_total_discount_amount":{"anyOf":[{"type":"integer","maximum":2147483647.0,"minimum":1.0},{"type":"null"}],"title":"Max Total Discount Amount"},"selection_policy":{"anyOf":[{"$ref":"#/components/schemas/PromotionSelectionPolicy"},{"type":"null"}]},"draw_period_seconds":{"anyOf":[{"type":"integer","maximum":2147483647.0,"minimum":3600.0},{"type":"null"}],"title":"Draw Period Seconds"},"offer_probability_bps":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":0.0},{"type":"null"}],"title":"Offer Probability Bps"},"eligibility":{"anyOf":[{"$ref":"#/components/schemas/PromotionEligibility"},{"type":"null"}]},"required_identity":{"anyOf":[{"$ref":"#/components/schemas/PromotionRequiredIdentity"},{"type":"null"}]},"per_identity_limit":{"anyOf":[{"type":"integer","maximum":2147483647.0,"minimum":1.0},{"type":"null"}],"title":"Per Identity Limit"},"per_identity_window_seconds":{"anyOf":[{"type":"integer","maximum":2147483647.0,"minimum":1.0},{"type":"null"}],"title":"Per Identity Window Seconds"},"issuance_limit_count":{"anyOf":[{"type":"integer","maximum":2147483647.0,"minimum":1.0},{"type":"null"}],"title":"Issuance Limit Count"},"issuance_limit_amount":{"anyOf":[{"type":"integer","maximum":2147483647.0,"minimum":1.0},{"type":"null"}],"title":"Issuance Limit Amount"},"issuance_window_seconds":{"anyOf":[{"type":"integer","maximum":2147483647.0,"minimum":1.0},{"type":"null"}],"title":"Issuance Window Seconds"},"negotiable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Negotiable"},"counter_strategy":{"anyOf":[{"$ref":"#/components/schemas/PromotionCounterStrategy"},{"type":"null"}]},"max_negotiation_rounds":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Max Negotiation Rounds"},"target_mode":{"anyOf":[{"$ref":"#/components/schemas/PromotionTargetMode"},{"type":"null"}]},"arms":{"anyOf":[{"items":{"$ref":"#/components/schemas/PromotionArmWrite"},"type":"array","maxItems":8,"minItems":1},{"type":"null"}],"title":"Arms"},"targets":{"anyOf":[{"items":{"$ref":"#/components/schemas/PromotionTargetWrite"},"type":"array","maxItems":500},{"type":"null"}],"title":"Targets"}},"additionalProperties":false,"type":"object","title":"PromotionPatch","description":"Partial promotion update; a supplied ``arms`` or ``targets`` list replaces.\n\nRules that only make sense once merged with the persisted row (window\norder, identity and issuance pairing, the floor, activation readiness) are\nchecked in the service and surface as named errors. An explicit ``null``\nclears an optional cap or limit; it is refused on fields a promotion cannot\nlose."},"PromotionRequiredIdentity":{"type":"string","enum":["none","contact","verified_customer"],"title":"PromotionRequiredIdentity","description":"How much a buyer must reveal before a promotion is offered to them.\n\n``NONE`` allows anonymous requests, which only ever receive the shallowest\narm. ``CONTACT`` needs an email or phone. ``VERIFIED_CUSTOMER`` needs the\nmerchant's own customer sign-in."},"PromotionSelectionPolicy":{"type":"string","enum":["weighted_random","adaptive"],"title":"PromotionSelectionPolicy","description":"How an arm is chosen for a buyer who qualifies for a promotion.\n\n``WEIGHTED_RANDOM`` draws once per buyer per draw period from the seller's\nown arm weights and keeps that arm for the rest of the period, so an agent\ncannot re-quote its way to the deepest discount.\n\n``ADAPTIVE`` is the same draw with learned weights: the maintenance sweep\nre-weights the seller's arms from how their offers actually converted, with\na floor so no arm is starved of evidence and a brake when the discount\nbudget is being spent faster than the campaign clock. It learns one set of\nweights for everyone. It never learns a price for a particular buyer."},"PromotionStatus":{"type":"string","enum":["draft","active","paused","ended"],"title":"PromotionStatus","description":"Whether a seller promotion may currently price anything.\n\n``DRAFT`` is the authoring state: the seller is still arranging arms and\ntargets and nothing is offered. Only ``ACTIVE`` promotions inside their\n``starts_at``/``ends_at`` window are ever evaluated. ``PAUSED`` is a\nreversible stop; ``ENDED`` is terminal and keeps the row for the orders\nthat redeemed it."},"PromotionTargetKind":{"type":"string","enum":["all","item","variant","label"],"title":"PromotionTargetKind","description":"What one promotion target row names.\n\n``ALL`` is the catch-all and stands alone; the other kinds name exactly one\ncatalog item, catalog variant, or fulfillment label."},"PromotionTargetMode":{"type":"string","enum":["include","exclude"],"title":"PromotionTargetMode","description":"Whether named promotion targets are included or excluded."},"PromotionTargetWrite":{"properties":{"kind":{"$ref":"#/components/schemas/PromotionTargetKind"},"id":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Id"}},"additionalProperties":false,"type":"object","required":["kind"],"title":"PromotionTargetWrite","description":"One thing a promotion discounts: everything, an item, a variant, or a label."},"PromotionUsageRead":{"properties":{"redemptions_held":{"type":"integer","title":"Redemptions Held","description":"Redemptions reserved but not yet paid."},"redemptions_redeemed":{"type":"integer","title":"Redemptions Redeemed","description":"Redemptions paid for."},"discount_amount_held":{"type":"integer","title":"Discount Amount Held","description":"Discount reserved but not yet paid, in minor units."},"discount_amount_redeemed":{"type":"integer","title":"Discount Amount Redeemed","description":"Discount given on paid orders, in minor units."}},"additionalProperties":false,"type":"object","required":["redemptions_held","redemptions_redeemed","discount_amount_held","discount_amount_redeemed"],"title":"PromotionUsageRead","description":"A campaign's burn-down: what its caps are currently measured against.\n\nSeller-only. ``held`` is reserved by open checkouts and unpaid orders and\ncomes back if they lapse; ``redeemed`` was paid for and is spent for good.\nA cap is reached when held plus redeemed would exceed it."},"PromotionVisibility":{"type":"string","enum":["public","targeted"],"title":"PromotionVisibility","description":"Who may learn a promotion exists before asking for a price.\n\n``PUBLIC`` promotions are advertised in the catalog and applied\nautomatically at checkout. ``TARGETED`` promotions are never advertised: a\nbuyer reaches one only through a quote or a one-time code."},"PublicAppointmentBookingRead":{"properties":{"type":{"type":"string","const":"appointment","title":"Type","description":"Discriminator marking an appointment-bookable variant.","default":"appointment"},"timezone":{"type":"string","title":"Timezone","description":"IANA timezone the merchant authored this schedule in; every wall-clock rule above is evaluated in it.","examples":["America/Los_Angeles"]},"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":{"type":"integer","title":"Lead Time Minutes","description":"Minimum notice before a start becomes bookable."},"horizon_days":{"type":"integer","title":"Horizon Days","description":"How far ahead the calendar is open."},"resources":{"items":{"$ref":"#/components/schemas/ResourceRule"},"type":"array","title":"Resources","description":"Nameable resources a buyer may pin; empty when unnamed."}},"type":"object","required":["timezone","duration","party_size","lead_time_minutes","horizon_days"],"title":"PublicAppointmentBookingRead","description":"Buyer-visible appointment bounds; internal resources stay private."},"PublicApprovalAction":{"properties":{"actor":{"type":"string","title":"Actor","default":"human"},"approve":{"type":"boolean","title":"Approve","description":"When true, resume an approval blocked on payment credential verification.","default":false},"profile_payment_method_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Payment Method Id"},"temporary_cvc_token_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Temporary Cvc Token Id","description":"Single-use CVC vault token id returned by the Elements iframe. In **test mode only**, you may pass a test-CVC identifier (`cvc_3_digit` or `cvc_4_digit`) — see the [test cards](#tag/test-cards) reference — and the server will mint a real CVC vault token (`111` or `1111` respectively). Live-mode requests that send a test-CVC identifier are rejected with `test_card_identifier_not_allowed_in_live_mode`."},"agentic_credentials_preference":{"$ref":"#/components/schemas/AgenticCredentialsPreference","default":"prefer_with_fallback"},"payment_verification":{"anyOf":[{"$ref":"#/components/schemas/PaymentVerificationInput"},{"type":"null"}],"description":"Optional payment instruction verification proof. Include this with approve=true to verify the purchase intent's pending payment instruction and approve in one request."},"fulfillment_place_validation_override":{"type":"boolean","title":"Fulfillment Place Validation Override","description":"When true, explicitly confirms a local pickup/delivery place-validation warning and allows purchase execution to continue.","default":false}},"type":"object","title":"PublicApprovalAction","description":"Public projection of ``ApprovalAction``."},"PublicAttestationRecordRead":{"properties":{"date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Date"},"ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip"},"user_agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Agent"}},"type":"object","title":"PublicAttestationRecordRead","description":"Public projection of ``AttestationRecordRead``."},"PublicAuditTrailItem":{"properties":{"id":{"type":"string","title":"Id"},"profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Id"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"source":{"anyOf":[{"$ref":"#/components/schemas/PurchaseIntentSource"},{"type":"null"}]},"status":{"$ref":"#/components/schemas/PublicPurchaseIntentStatus"},"expected_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expected Amount"},"max_allowed_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Allowed Amount"},"currency_code":{"$ref":"#/components/schemas/CurrencyCode","default":"USD"},"items":{"items":{"$ref":"#/components/schemas/PublicPurchaseIntentItemRead"},"type":"array","title":"Items","description":"Requested item lines for this purchase intent."},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"timeline":{"items":{"$ref":"#/components/schemas/app__schemas__purchasing__purchase_intent__PurchaseTimelineEvent"},"type":"array","title":"Timeline"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["id","status","created_at"],"title":"PublicAuditTrailItem","description":"Public v1 audit-trail row for one purchase intent."},"PublicAuditTrailListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PublicAuditTrailItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"PublicAuditTrailListResponse","description":"Public v1 list response for purchase-intent audit rows."},"PublicBusinessDetailsRead":{"properties":{"legal_entity_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Legal Entity Name"},"dba_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dba Name"},"business_structure":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Structure"},"industry_mcc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Mcc"},"ein":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ein"},"formation_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Formation State"},"formation_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Formation Date"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"beneficial_owners":{"items":{"$ref":"#/components/schemas/PublicProfileBeneficialOwnerRead"},"type":"array","title":"Beneficial Owners"}},"type":"object","title":"PublicBusinessDetailsRead","description":"Public projection of ``BusinessDetailsRead``."},"PublicCapabilityRequirement":{"properties":{"field":{"type":"string","title":"Field","description":"Canonical dotted path into this API's objects that clears the requirement (``[]`` means any element of the collection), e.g. ``profile.payment_methods[].card.agentic_credentials_status``."},"label":{"type":"string","title":"Label","description":"Human-readable label for the missing requirement."}},"type":"object","required":["field","label"],"title":"PublicCapabilityRequirement","description":"Public projection of ``CapabilityRequirement``."},"PublicCatalogInventoryPatch":{"properties":{"quantity":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Quantity"},"management":{"anyOf":[{"$ref":"#/components/schemas/AgenticInventoryManagementMode"},{"type":"null"}],"description":"Retained per-item provenance value. Null clears it; effective management remains merchant-level."},"scope":{"anyOf":[{"$ref":"#/components/schemas/AgenticInventoryScope"},{"type":"null"}]}},"additionalProperties":false,"type":"object","title":"PublicCatalogInventoryPatch","description":"Member-level item inventory patch.\n\n``quantity: null`` clears the tracked quantity and ``management: null``\nclears the retained per-item provenance value. Scope is non-null when\nsupplied."},"PublicCatalogInventoryRead":{"properties":{"quantity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quantity"},"management":{"anyOf":[{"$ref":"#/components/schemas/AgenticInventoryManagementMode"},{"type":"null"}],"description":"Retained per-item provenance value; null when none is stored."},"effective_management":{"$ref":"#/components/schemas/AgenticInventoryManagementMode","description":"Merchant-level inventory authority used by order behavior."},"scope":{"$ref":"#/components/schemas/AgenticInventoryScope"},"rolled_up_quantity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rolled Up Quantity"}},"type":"object","required":["effective_management","scope"],"title":"PublicCatalogInventoryRead","description":"Item stock configuration plus merchant-resolved and aggregated values."},"PublicCatalogInventoryWrite":{"properties":{"quantity":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Quantity"},"management":{"anyOf":[{"$ref":"#/components/schemas/AgenticInventoryManagementMode"},{"type":"null"}],"description":"Retained per-item provenance value. Null clears it; effective management is decided by the merchant-level setting."},"scope":{"$ref":"#/components/schemas/AgenticInventoryScope","default":"item"}},"additionalProperties":false,"type":"object","title":"PublicCatalogInventoryWrite","description":"Item-level stock quantity, retained owner value, and aggregation scope."},"PublicCatalogItemCreate":{"properties":{"item_type":{"$ref":"#/components/schemas/PublicCatalogItemType","description":"The product, service, or travel-booking category."},"status":{"$ref":"#/components/schemas/AgenticCatalogItemStatus","default":"active"},"sku":{"anyOf":[{"type":"string","maxLength":120,"minLength":1},{"type":"null"}],"title":"Sku"},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Description"},"stripe_connected_account_id":{"anyOf":[{"type":"string","maxLength":255,"pattern":"^acct_[A-Za-z0-9]+$"},{"type":"null"}],"title":"Stripe Connected Account Id","description":"Optional BYO Stripe seller account verified live through its platform."},"product_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Product Url"},"prices":{"items":{"$ref":"#/components/schemas/CatalogItemPriceWrite"},"type":"array","title":"Prices","description":"Binding default-variant prices by merchant market."},"translations":{"items":{"$ref":"#/components/schemas/CatalogTranslationWrite"},"type":"array","title":"Translations"},"pricing_model":{"$ref":"#/components/schemas/AgenticPricingModel","description":"How the default variant rate expands into an order-line amount."},"is_available":{"type":"boolean","title":"Is Available","description":"Whether the item and its default rate can be purchased."},"inventory":{"$ref":"#/components/schemas/PublicCatalogInventoryWrite"},"media":{"items":{"$ref":"#/components/schemas/AgenticCatalogMediaWrite"},"type":"array","maxItems":250,"title":"Media"},"fulfillment_options":{"items":{"$ref":"#/components/schemas/AgenticCatalogFulfillmentOptionWrite"},"type":"array","maxItems":5,"minItems":1,"title":"Fulfillment Options","description":"Every fulfillment mode the item supports, including mode-specific configuration. The first entry is the primary mode."},"requirements":{"$ref":"#/components/schemas/PublicCatalogRequirementsWrite","description":"Buyer data requirements inherited by every variant."},"attributes":{"additionalProperties":{"type":"string"},"type":"object","title":"Attributes"},"external_reference":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"External Reference"},"booking_config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/AppointmentBookingConfig-Input"},{"$ref":"#/components/schemas/ScheduledClassBookingConfig-Input"},{"$ref":"#/components/schemas/StayBookingConfig"}],"discriminator":{"propertyName":"type","mapping":{"appointment":"#/components/schemas/AppointmentBookingConfig-Input","scheduled_class":"#/components/schemas/ScheduledClassBookingConfig-Input","stay":"#/components/schemas/StayBookingConfig"}}},{"type":"null"}],"title":"Booking Config","description":"Typed booking rules for the default variant. Its discriminator selects the booking family; null represents a quantity listing."},"variants":{"anyOf":[{"items":{"$ref":"#/components/schemas/PublicCatalogVariantWrite"},"type":"array","maxItems":2000,"minItems":1},{"type":"null"}],"title":"Variants"},"variant_options":{"items":{"$ref":"#/components/schemas/AgenticCatalogOptionWrite"},"type":"array","maxItems":20,"title":"Variant Options","description":"Finite option axes such as Color and Size. Every active variant must select exactly one value from each configured axis."},"generate_variants_from_options":{"type":"boolean","title":"Generate Variants From Options","description":"On initial creation, generate one variant for every Cartesian product of variant_options. Cannot be combined with variants.","default":false},"customizations":{"items":{"$ref":"#/components/schemas/PublicCustomizationGroupWrite"},"type":"array","maxItems":50,"title":"Customizations"}},"additionalProperties":false,"type":"object","required":["item_type","name","prices","pricing_model","is_available","fulfillment_options"],"title":"PublicCatalogItemCreate","description":"Body for ``POST /v1/merchant/catalog``."},"PublicCatalogItemPatch":{"properties":{"item_type":{"anyOf":[{"$ref":"#/components/schemas/PublicCatalogItemType"},{"type":"null"}]},"status":{"anyOf":[{"$ref":"#/components/schemas/AgenticCatalogItemStatus"},{"type":"null"}]},"sku":{"anyOf":[{"type":"string","maxLength":120,"minLength":1},{"type":"null"}],"title":"Sku"},"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Description"},"stripe_connected_account_id":{"anyOf":[{"type":"string","maxLength":255,"pattern":"^acct_[A-Za-z0-9]+$"},{"type":"null"}],"title":"Stripe Connected Account Id","description":"Omission leaves the route unchanged; explicit null clears the seller."},"product_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Product Url"},"prices":{"anyOf":[{"items":{"$ref":"#/components/schemas/CatalogItemPriceWrite"},"type":"array"},{"type":"null"}],"title":"Prices"},"translations":{"anyOf":[{"items":{"$ref":"#/components/schemas/CatalogTranslationWrite"},"type":"array"},{"type":"null"}],"title":"Translations"},"pricing_model":{"anyOf":[{"$ref":"#/components/schemas/AgenticPricingModel"},{"type":"null"}]},"is_available":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Available"},"inventory":{"anyOf":[{"$ref":"#/components/schemas/PublicCatalogInventoryPatch"},{"type":"null"}]},"media":{"anyOf":[{"items":{"$ref":"#/components/schemas/AgenticCatalogMediaWrite"},"type":"array","maxItems":250},{"type":"null"}],"title":"Media"},"fulfillment_options":{"anyOf":[{"items":{"$ref":"#/components/schemas/AgenticCatalogFulfillmentOptionWrite"},"type":"array","maxItems":5,"minItems":1},{"type":"null"}],"title":"Fulfillment Options","description":"Complete replacement for every supported fulfillment mode and its mode-specific configuration."},"requirements":{"anyOf":[{"$ref":"#/components/schemas/PublicCatalogRequirementsPatch"},{"type":"null"}],"description":"Item-level buyer requirements applied to every variant."},"attributes":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Attributes"},"external_reference":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"External Reference"},"booking_config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/AppointmentBookingConfig-Input"},{"$ref":"#/components/schemas/ScheduledClassBookingConfig-Input"},{"$ref":"#/components/schemas/StayBookingConfig"}],"discriminator":{"propertyName":"type","mapping":{"appointment":"#/components/schemas/AppointmentBookingConfig-Input","scheduled_class":"#/components/schemas/ScheduledClassBookingConfig-Input","stay":"#/components/schemas/StayBookingConfig"}}},{"type":"null"}],"title":"Booking Config","description":"Replacement booking rules for the default variant. Send null to turn a bookable default variant back into a quantity listing."},"variants":{"anyOf":[{"items":{"$ref":"#/components/schemas/PublicCatalogVariantWrite"},"type":"array","maxItems":2000,"minItems":1},{"type":"null"}],"title":"Variants"},"variant_options":{"anyOf":[{"items":{"$ref":"#/components/schemas/AgenticCatalogOptionWrite"},"type":"array","maxItems":20},{"type":"null"}],"title":"Variant Options","description":"Complete replacement for the finite option axes. Supply the full variants list in the same request so every selection remains valid."},"customizations":{"anyOf":[{"items":{"$ref":"#/components/schemas/PublicCustomizationGroupWrite"},"type":"array","maxItems":50},{"type":"null"}],"title":"Customizations"}},"additionalProperties":false,"type":"object","title":"PublicCatalogItemPatch","description":"Partial update body for ``POST /v1/merchant/catalog/{item_id}``."},"PublicCatalogItemRead":{"properties":{"id":{"type":"string","title":"Id"},"merchant_id":{"type":"string","title":"Merchant Id"},"item_type":{"$ref":"#/components/schemas/PublicCatalogItemType"},"status":{"$ref":"#/components/schemas/AgenticCatalogItemStatus"},"sku":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sku"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"connected_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connected Account Id","description":"Connected account assigned to this item; null preserves direct BYO settlement."},"base_name":{"type":"string","title":"Base Name"},"base_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Description"},"product_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Url"},"market":{"type":"string","title":"Market"},"locale":{"$ref":"#/components/schemas/LocaleCode"},"prices":{"items":{"$ref":"#/components/schemas/CatalogItemPriceRead"},"type":"array","title":"Prices"},"translations":{"items":{"$ref":"#/components/schemas/CatalogTranslationRead"},"type":"array","title":"Translations"},"pricing_model":{"$ref":"#/components/schemas/AgenticPricingModel"},"is_available":{"type":"boolean","title":"Is Available"},"inventory":{"$ref":"#/components/schemas/PublicCatalogInventoryRead"},"media":{"items":{"$ref":"#/components/schemas/PublicCatalogMediaRead"},"type":"array","title":"Media"},"fulfillment_options":{"items":{"$ref":"#/components/schemas/AgenticCatalogFulfillmentOptionRead"},"type":"array","title":"Fulfillment Options"},"requirements":{"$ref":"#/components/schemas/PublicCatalogRequirementsRead","description":"Item-level buyer requirements shared by every variant."},"attributes":{"additionalProperties":{"type":"string"},"type":"object","title":"Attributes"},"external_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Reference"},"booking_config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/AppointmentBookingConfig-Output"},{"$ref":"#/components/schemas/ScheduledClassBookingConfig-Output"},{"$ref":"#/components/schemas/StayBookingConfig"}],"discriminator":{"propertyName":"type","mapping":{"appointment":"#/components/schemas/AppointmentBookingConfig-Output","scheduled_class":"#/components/schemas/ScheduledClassBookingConfig-Output","stay":"#/components/schemas/StayBookingConfig"}}},{"type":"null"}],"title":"Booking Config","description":"Typed booking rules inherited from the default variant."},"variants":{"items":{"$ref":"#/components/schemas/PublicCatalogVariantRead"},"type":"array","title":"Variants"},"variant_options":{"items":{"$ref":"#/components/schemas/AgenticCatalogOptionRead"},"type":"array","title":"Variant Options","description":"Finite option axes used by the item variants."},"customizations":{"items":{"$ref":"#/components/schemas/PublicCustomizationGroupRead"},"type":"array","title":"Customizations"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","merchant_id","item_type","status","name","base_name","market","locale","pricing_model","is_available","inventory","requirements","created_at","updated_at"],"title":"PublicCatalogItemRead","description":"Rich catalog-item response for public v1 management operations."},"PublicCatalogItemType":{"type":"string","enum":["product","service","travel_booking"],"title":"PublicCatalogItemType","description":"Catalog item categories manageable through the public v1 API."},"PublicCatalogMediaRead":{"properties":{"id":{"type":"string","title":"Id","description":"Stable identifier for this catalog media association.","examples":["om_agcm_4c1a"]},"source_url":{"type":"string","title":"Source Url","description":"Absolute HTTP(S) URL of the published image.","examples":["https://merchant.example/images/espresso.jpg"]},"role":{"$ref":"#/components/schemas/CatalogMediaRole","description":"How the image is used within the item or variant gallery."},"alt_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alt Text","description":"Accessible alternative text for the image, when supplied.","examples":["A ceramic cup filled with espresso"]},"display_order":{"type":"integer","title":"Display Order","description":"Zero-based relative ordering of the image within its gallery."}},"type":"object","required":["id","source_url","role","display_order"],"title":"PublicCatalogMediaRead","description":"Public ordered media without the internal reusable-cache identifier."},"PublicCatalogRequirementsPatch":{"properties":{"fulfillment_address":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Fulfillment Address"},"customer_email":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Customer Email"},"customer_phone":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Customer Phone"},"customer_name":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Customer Name"},"date_of_birth":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Date Of Birth"},"scheduling":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Scheduling"},"booking_window":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Booking Window"}},"additionalProperties":false,"type":"object","title":"PublicCatalogRequirementsPatch","description":"Member-level patch for item-owned buyer information requirements."},"PublicCatalogRequirementsRead":{"properties":{"fulfillment_address":{"type":"boolean","title":"Fulfillment Address","description":"An order must carry a fulfillment address before it can be placed."},"customer_email":{"type":"boolean","title":"Customer Email","description":"An order must carry a buyer email address."},"customer_phone":{"type":"boolean","title":"Customer Phone","description":"An order must carry a buyer phone number."},"customer_name":{"type":"boolean","title":"Customer Name","description":"An order must name the person the order is for."},"date_of_birth":{"type":"boolean","title":"Date Of Birth","description":"An order must carry the buyer's structured date of birth."},"scheduling":{"type":"boolean","title":"Scheduling","description":"An order must pick an appointment or class occurrence — the listing cannot be bought without a scheduled time."},"booking_window":{"type":"boolean","title":"Booking Window","description":"An order must carry a start/end window, as a stay or a per-night / per-day listing does."}},"type":"object","required":["fulfillment_address","customer_email","customer_phone","customer_name","date_of_birth","scheduling","booking_window"],"title":"PublicCatalogRequirementsRead","description":"Complete buyer information requirements returned by public v1."},"PublicCatalogRequirementsWrite":{"properties":{"fulfillment_address":{"type":"boolean","title":"Fulfillment Address","default":true},"customer_email":{"type":"boolean","title":"Customer Email","default":false},"customer_phone":{"type":"boolean","title":"Customer Phone","default":false},"customer_name":{"type":"boolean","title":"Customer Name","default":false},"date_of_birth":{"type":"boolean","title":"Date Of Birth","default":false},"scheduling":{"type":"boolean","title":"Scheduling","default":false},"booking_window":{"type":"boolean","title":"Booking Window","default":false}},"additionalProperties":false,"type":"object","title":"PublicCatalogRequirementsWrite","description":"Buyer information requirements accepted on an item write."},"PublicCatalogVariantCreate":{"properties":{"is_default":{"type":"boolean","title":"Is Default","default":false},"display_order":{"type":"integer","minimum":0.0,"title":"Display Order","default":0},"sku":{"anyOf":[{"type":"string","maxLength":120,"minLength":1},{"type":"null"}],"title":"Sku"},"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Description"},"variant_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Variant Url"},"media":{"items":{"$ref":"#/components/schemas/AgenticCatalogMediaWrite"},"type":"array","maxItems":250,"title":"Media"},"prices":{"items":{"$ref":"#/components/schemas/CatalogVariantPriceWrite"},"type":"array","title":"Prices","description":"Binding prices and availability overrides by merchant market."},"translations":{"items":{"$ref":"#/components/schemas/CatalogTranslationWrite"},"type":"array","title":"Translations"},"pricing_model":{"$ref":"#/components/schemas/AgenticPricingModel","description":"How the variant rate expands into an order-line amount."},"is_available":{"type":"boolean","title":"Is Available","description":"Whether this variant can currently be purchased."},"inventory":{"$ref":"#/components/schemas/PublicCatalogVariantInventoryWrite"},"external_reference":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"External Reference"},"booking_type":{"$ref":"#/components/schemas/BookingType","default":"quantity"},"booking_config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/AppointmentBookingConfig-Input"},{"$ref":"#/components/schemas/ScheduledClassBookingConfig-Input"},{"$ref":"#/components/schemas/StayBookingConfig"}],"discriminator":{"propertyName":"type","mapping":{"appointment":"#/components/schemas/AppointmentBookingConfig-Input","scheduled_class":"#/components/schemas/ScheduledClassBookingConfig-Input","stay":"#/components/schemas/StayBookingConfig"}}},{"type":"null"}],"title":"Booking Config"},"option_selections":{"items":{"$ref":"#/components/schemas/AgenticCatalogVariantOptionSelectionWrite"},"type":"array","maxItems":20,"title":"Option Selections"}},"additionalProperties":false,"type":"object","required":["prices","pricing_model","is_available"],"title":"PublicCatalogVariantCreate","description":"Body for creating one variant beneath an existing catalog item."},"PublicCatalogVariantInventoryRead":{"properties":{"quantity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quantity","description":"Units of this variant on hand. Null means the merchant does not track a finite count, which is not the same as zero."}},"type":"object","title":"PublicCatalogVariantInventoryRead","description":"Quantity stock returned for one finite variant."},"PublicCatalogVariantInventoryWrite":{"properties":{"quantity":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Quantity"}},"additionalProperties":false,"type":"object","title":"PublicCatalogVariantInventoryWrite","description":"Quantity stock tracked on a finite variant."},"PublicCatalogVariantPatch":{"properties":{"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default"},"display_order":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Display Order"},"sku":{"anyOf":[{"type":"string","maxLength":120,"minLength":1},{"type":"null"}],"title":"Sku"},"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Description"},"variant_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Variant Url"},"media":{"anyOf":[{"items":{"$ref":"#/components/schemas/AgenticCatalogMediaWrite"},"type":"array","maxItems":250},{"type":"null"}],"title":"Media"},"prices":{"anyOf":[{"items":{"$ref":"#/components/schemas/CatalogVariantPriceWrite"},"type":"array"},{"type":"null"}],"title":"Prices"},"translations":{"anyOf":[{"items":{"$ref":"#/components/schemas/CatalogTranslationWrite"},"type":"array"},{"type":"null"}],"title":"Translations"},"pricing_model":{"anyOf":[{"$ref":"#/components/schemas/AgenticPricingModel"},{"type":"null"}]},"is_available":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Available"},"inventory":{"anyOf":[{"$ref":"#/components/schemas/PublicCatalogVariantInventoryWrite"},{"type":"null"}]},"external_reference":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"External Reference"},"booking_type":{"anyOf":[{"$ref":"#/components/schemas/BookingType"},{"type":"null"}]},"booking_config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/AppointmentBookingConfig-Input"},{"$ref":"#/components/schemas/ScheduledClassBookingConfig-Input"},{"$ref":"#/components/schemas/StayBookingConfig"}],"discriminator":{"propertyName":"type","mapping":{"appointment":"#/components/schemas/AppointmentBookingConfig-Input","scheduled_class":"#/components/schemas/ScheduledClassBookingConfig-Input","stay":"#/components/schemas/StayBookingConfig"}}},{"type":"null"}],"title":"Booking Config"},"option_selections":{"anyOf":[{"items":{"$ref":"#/components/schemas/AgenticCatalogVariantOptionSelectionWrite"},"type":"array","maxItems":20},{"type":"null"}],"title":"Option Selections"}},"additionalProperties":false,"type":"object","title":"PublicCatalogVariantPatch","description":"Partial update body for one public finite variant."},"PublicCatalogVariantRead":{"properties":{"id":{"type":"string","title":"Id"},"is_default":{"type":"boolean","title":"Is Default"},"display_order":{"type":"integer","title":"Display Order"},"sku":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sku"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"base_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Name"},"base_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Description"},"variant_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Url"},"media":{"items":{"$ref":"#/components/schemas/PublicCatalogMediaRead"},"type":"array","title":"Media"},"prices":{"items":{"$ref":"#/components/schemas/CatalogVariantPriceRead"},"type":"array","title":"Prices"},"translations":{"items":{"$ref":"#/components/schemas/CatalogTranslationRead"},"type":"array","title":"Translations"},"pricing_model":{"$ref":"#/components/schemas/AgenticPricingModel"},"is_available":{"type":"boolean","title":"Is Available"},"inventory":{"$ref":"#/components/schemas/PublicCatalogVariantInventoryRead"},"external_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Reference"},"booking_type":{"$ref":"#/components/schemas/BookingType"},"booking_config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/AppointmentBookingConfig-Output"},{"$ref":"#/components/schemas/ScheduledClassBookingConfig-Output"},{"$ref":"#/components/schemas/StayBookingConfig"}],"discriminator":{"propertyName":"type","mapping":{"appointment":"#/components/schemas/AppointmentBookingConfig-Output","scheduled_class":"#/components/schemas/ScheduledClassBookingConfig-Output","stay":"#/components/schemas/StayBookingConfig"}}},{"type":"null"}],"title":"Booking Config"},"option_selections":{"items":{"$ref":"#/components/schemas/AgenticCatalogVariantOptionSelectionRead"},"type":"array","title":"Option Selections"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","is_default","display_order","pricing_model","is_available","inventory","booking_type","created_at","updated_at"],"title":"PublicCatalogVariantRead","description":"Public finite-variant projection without provider operational fields."},"PublicCatalogVariantWrite":{"properties":{"is_default":{"type":"boolean","title":"Is Default","default":false},"display_order":{"type":"integer","minimum":0.0,"title":"Display Order","default":0},"sku":{"anyOf":[{"type":"string","maxLength":120,"minLength":1},{"type":"null"}],"title":"Sku"},"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Description"},"variant_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Variant Url"},"media":{"items":{"$ref":"#/components/schemas/AgenticCatalogMediaWrite"},"type":"array","maxItems":250,"title":"Media"},"prices":{"items":{"$ref":"#/components/schemas/CatalogVariantPriceWrite"},"type":"array","title":"Prices","description":"Binding prices and availability overrides by merchant market."},"translations":{"items":{"$ref":"#/components/schemas/CatalogTranslationWrite"},"type":"array","title":"Translations"},"pricing_model":{"$ref":"#/components/schemas/AgenticPricingModel","description":"How the variant rate expands into an order-line amount."},"is_available":{"type":"boolean","title":"Is Available","description":"Whether this variant can currently be purchased."},"inventory":{"$ref":"#/components/schemas/PublicCatalogVariantInventoryWrite"},"external_reference":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"External Reference"},"booking_type":{"$ref":"#/components/schemas/BookingType","default":"quantity"},"booking_config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/AppointmentBookingConfig-Input"},{"$ref":"#/components/schemas/ScheduledClassBookingConfig-Input"},{"$ref":"#/components/schemas/StayBookingConfig"}],"discriminator":{"propertyName":"type","mapping":{"appointment":"#/components/schemas/AppointmentBookingConfig-Input","scheduled_class":"#/components/schemas/ScheduledClassBookingConfig-Input","stay":"#/components/schemas/StayBookingConfig"}}},{"type":"null"}],"title":"Booking Config"},"option_selections":{"items":{"$ref":"#/components/schemas/AgenticCatalogVariantOptionSelectionWrite"},"type":"array","maxItems":20,"title":"Option Selections"},"id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Id"},"client_key":{"anyOf":[{"type":"string","maxLength":320,"minLength":1},{"type":"null"}],"title":"Client Key"}},"additionalProperties":false,"type":"object","required":["prices","pricing_model","is_available"],"title":"PublicCatalogVariantWrite","description":"Create/replace shape used inside an item aggregate write."},"PublicCustomizationChoiceRead":{"properties":{"id":{"type":"string","title":"Id"},"label":{"type":"string","title":"Label"},"delta_amount":{"type":"integer","title":"Delta Amount"},"currency":{"$ref":"#/components/schemas/CurrencyCode"},"prices":{"items":{"$ref":"#/components/schemas/CustomizationChoicePriceRead"},"type":"array","title":"Prices"},"pricing_basis":{"$ref":"#/components/schemas/AgenticCustomizationPricingBasis"},"min_quantity":{"type":"integer","title":"Min Quantity"},"max_quantity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Quantity"},"default_quantity":{"type":"integer","title":"Default Quantity"},"is_available":{"type":"boolean","title":"Is Available"},"display_order":{"type":"integer","title":"Display Order"}},"type":"object","required":["id","label","delta_amount","currency","pricing_basis","min_quantity","default_quantity","is_available","display_order"],"title":"PublicCustomizationChoiceRead","description":"Resolved customization delta plus the complete market delta matrix."},"PublicCustomizationChoiceWrite":{"properties":{"id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Id"},"label":{"type":"string","maxLength":120,"minLength":1,"title":"Label"},"prices":{"items":{"$ref":"#/components/schemas/CustomizationChoicePriceWrite"},"type":"array","title":"Prices"},"pricing_basis":{"$ref":"#/components/schemas/AgenticCustomizationPricingBasis","default":"per_item"},"min_quantity":{"type":"integer","minimum":0.0,"title":"Min Quantity","default":0},"max_quantity":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Quantity"},"default_quantity":{"type":"integer","minimum":0.0,"title":"Default Quantity","default":0},"is_available":{"type":"boolean","title":"Is Available","default":true},"display_order":{"type":"integer","minimum":0.0,"title":"Display Order","default":0}},"additionalProperties":false,"type":"object","required":["label"],"title":"PublicCustomizationChoiceWrite","description":"Public customization choice with deltas authored per market."},"PublicCustomizationGroupRead":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"selection_mode":{"$ref":"#/components/schemas/AgenticCustomizationSelectionMode"},"min_total_quantity":{"type":"integer","title":"Min Total Quantity"},"max_total_quantity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Total Quantity"},"display_order":{"type":"integer","title":"Display Order"},"choices":{"items":{"$ref":"#/components/schemas/PublicCustomizationChoiceRead"},"type":"array","title":"Choices"},"applicable_variant_ids":{"items":{"type":"string"},"type":"array","title":"Applicable Variant Ids"}},"type":"object","required":["id","name","selection_mode","min_total_quantity","display_order","choices"],"title":"PublicCustomizationGroupRead","description":"Public customization group with market-aware choices."},"PublicCustomizationGroupWrite":{"properties":{"id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Id"},"name":{"type":"string","maxLength":120,"minLength":1,"title":"Name"},"selection_mode":{"$ref":"#/components/schemas/AgenticCustomizationSelectionMode"},"min_total_quantity":{"type":"integer","minimum":0.0,"title":"Min Total Quantity","default":0},"max_total_quantity":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Total Quantity"},"display_order":{"type":"integer","minimum":0.0,"title":"Display Order","default":0},"choices":{"items":{"$ref":"#/components/schemas/PublicCustomizationChoiceWrite"},"type":"array","maxItems":100,"minItems":1,"title":"Choices"},"applicable_variant_ids":{"items":{"type":"string"},"type":"array","maxItems":2000,"title":"Applicable Variant Ids"},"applicable_variant_skus":{"items":{"type":"string"},"type":"array","maxItems":2000,"title":"Applicable Variant Skus"},"applicable_variant_keys":{"items":{"type":"string"},"type":"array","maxItems":2000,"title":"Applicable Variant Keys"}},"additionalProperties":false,"type":"object","required":["name","selection_mode","choices"],"title":"PublicCustomizationGroupWrite","description":"Public customization group and complete market-priced choice set."},"PublicFulfillmentServiceRead":{"properties":{"rate_card_id":{"type":"string","title":"Rate Card Id","description":"Stable id of the service, quotable as `rate_card_id`.","examples":["om_agrc_9f21"]},"title":{"type":"string","title":"Title","description":"Buyer-facing service name.","examples":["FedEx Ground"]},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Merchant's own copy for the service, when it has any."},"amount_from":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Amount From","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]},"currency":{"$ref":"#/components/schemas/CurrencyCode","description":"ISO-4217 currency `amount_from` is expressed in."},"min_transit_days":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Min Transit Days","description":"Fastest published transit time in days, when published."},"max_transit_days":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Transit Days","description":"Slowest published transit time in days, when published."}},"additionalProperties":false,"type":"object","required":["rate_card_id","title","currency"],"title":"PublicFulfillmentServiceRead","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."},"PublicInitialStandingBudgetRequest":{"properties":{"amount_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Amount Cents","description":"Budget amount in minor currency units. Required to create the allowance."},"currency_code":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}],"description":"ISO 4217 currency for the allowance; defaults to USD when omitted."},"description":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Description","description":"Shown to the cardholder during passkey verification."},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At","description":"Optional instruction expiry."}},"type":"object","title":"PublicInitialStandingBudgetRequest","description":"Public projection of ``InitialStandingBudgetRequest``."},"PublicIssuingCapabilityRead":{"properties":{"requested":{"type":"boolean","title":"Requested","description":"Whether this capability is requested for the profile."},"enabled":{"type":"boolean","title":"Enabled","description":"Whether this capability can currently be used."},"requirements":{"items":{"$ref":"#/components/schemas/PublicCapabilityRequirement"},"type":"array","title":"Requirements","description":"Missing requirements that must be satisfied before the capability can be enabled."}},"type":"object","required":["requested","enabled"],"title":"PublicIssuingCapabilityRead","description":"Public projection of ``IssuingCapabilityRead``."},"PublicMerchantLocationRead":{"properties":{"id":{"type":"string","title":"Id","description":"Stable canonical business-location identifier."},"version_id":{"type":"string","title":"Version Id","description":"Current immutable descriptive-version identifier."},"version_number":{"type":"integer","minimum":1.0,"title":"Version Number","description":"Current monotonic descriptive-version number."},"name":{"type":"string","title":"Name","description":"Current seller-facing location name."},"address":{"$ref":"#/components/schemas/PostalAddressPayload","description":"Current public postal address for this location."},"latitude":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Latitude","description":"Optional WGS84 latitude."},"longitude":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Longitude","description":"Optional WGS84 longitude."},"timezone":{"$ref":"#/components/schemas/TimeZone","description":"IANA timezone governing local hours."},"contact_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Phone","description":"Optional public telephone number."},"market_codes":{"items":{"type":"string"},"type":"array","title":"Market Codes","description":"Merchant markets in which this location is eligible."},"opening_hours":{"anyOf":[{"$ref":"#/components/schemas/LocationHoursScheduleRead"},{"type":"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":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Transition At","description":"Next UTC open/closed transition, when it can be determined."}},"additionalProperties":false,"type":"object","required":["id","version_id","version_number","name","address","timezone","market_codes","current_open_state"],"title":"PublicMerchantLocationRead","description":"Public location projection with no provider identities or private metadata."},"PublicMerchantRead":{"properties":{"id":{"type":"string","title":"Id"},"slug":{"type":"string","title":"Slug"},"display_name":{"type":"string","title":"Display Name"},"mode":{"$ref":"#/components/schemas/ModeValue"},"status":{"$ref":"#/components/schemas/AgenticMerchantStatus"},"requirements":{"items":{"$ref":"#/components/schemas/MerchantSetupRequirement"},"type":"array","title":"Requirements"},"blockers":{"items":{"$ref":"#/components/schemas/MerchantSetupRequirement"},"type":"array","title":"Blockers"},"latest_integration_checks":{"items":{"$ref":"#/components/schemas/MerchantIntegrationCheckRead"},"type":"array","title":"Latest Integration Checks"},"publication_readiness":{"$ref":"#/components/schemas/GeneralPublicationReadinessRead"}},"type":"object","required":["id","slug","display_name","mode","status","requirements","blockers","latest_integration_checks","publication_readiness"],"title":"PublicMerchantRead","description":"Secret-free merchant identity and passive setup/readiness projection."},"PublicMppBuyerRequest":{"properties":{"first_name":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"First Name","description":"Buyer first name, used for fulfillment contact only."},"last_name":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Last Name","description":"Buyer last name, used for fulfillment contact only."},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","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.","examples":["buyer@example.com"],"example":"user@example.com"},"phone_number":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Phone Number","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"]},"dob":{"anyOf":[{"$ref":"#/components/schemas/BuyerDob"},{"type":"null"}],"description":"Buyer date of birth in structured day/month/year form."}},"additionalProperties":false,"type":"object","title":"PublicMppBuyerRequest","description":"Buyer contact capture shared by public MPP purchase and quote calls."},"PublicMppCustomizationChoiceRequest":{"properties":{"choice_id":{"type":"string","maxLength":64,"title":"Choice Id","description":"The published choice being selected.","examples":["om_agcc_oat"]},"quantity":{"type":"integer","maximum":1000.0,"minimum":0.0,"title":"Quantity","description":"How many of the choice to apply. Zero explicitly declines a choice the group would otherwise default in.","default":1}},"additionalProperties":false,"type":"object","required":["choice_id"],"title":"PublicMppCustomizationChoiceRequest","description":"One requested customization choice and quantity."},"PublicMppCustomizationGroupRequest":{"properties":{"group_id":{"type":"string","maxLength":64,"title":"Group Id","description":"The published customization group these selections belong to.","examples":["om_agcg_milk"]},"choices":{"items":{"$ref":"#/components/schemas/PublicMppCustomizationChoiceRequest"},"type":"array","maxItems":100,"title":"Choices","description":"Selections within the group; an empty list declines it entirely."}},"additionalProperties":false,"type":"object","required":["group_id"],"title":"PublicMppCustomizationGroupRequest","description":"Selections supplied for one dynamic customization group."},"PublicMppCustomizationSelectionRead":{"properties":{"group_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id","description":"Group the selection came from, when it is still published.","examples":["om_agcg_milk"]},"choice_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Choice Id","description":"Choice that was selected, when it is still published.","examples":["om_agcc_oat"]},"group_name":{"type":"string","title":"Group Name","description":"Group name snapshotted at purchase, so later edits cannot rewrite it.","examples":["Milk"]},"choice_label":{"type":"string","title":"Choice Label","description":"Choice label snapshotted at purchase.","examples":["Oat milk"]},"quantity":{"type":"integer","title":"Quantity","description":"How many of the choice were applied."},"price_delta_cents":{"type":"integer","title":"Price Delta Cents","description":"Per-unit price effect of the choice, in minor units."},"pricing_basis":{"$ref":"#/components/schemas/AgenticCustomizationPricingBasis","description":"Whether the delta applied per line or per selected unit."},"amount_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Amount Cents","description":"Total contribution of this selection to the line, in minor units."}},"type":"object","required":["group_name","choice_label","quantity","price_delta_cents","pricing_basis"],"title":"PublicMppCustomizationSelectionRead","description":"One customization selection snapshotted on an order or quote."},"PublicMppLocationDestination":{"properties":{"id":{"type":"string","title":"Id","description":"Canonical merchant store identifier.","examples":["store_pdx_01"]},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Optional display name; canonical merchant data remains authoritative."},"address":{"anyOf":[{"$ref":"#/components/schemas/UcpPostalAddress"},{"type":"null"}],"description":"Where the store is, for buyer orientation."}},"additionalProperties":false,"type":"object","required":["id"],"title":"PublicMppLocationDestination","description":"Canonical merchant location selector; display details are optional hints."},"PublicMppQuoteCreateRequest":{"properties":{"catalog_item_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Catalog Item Id","description":"Catalog item to quote. Provide it alone for the default variant, or with catalog_variant_id to pin an exact variant."},"catalog_variant_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Catalog Variant Id","description":"Exact catalog variant to quote. It may be supplied alone or alongside catalog_item_id."},"quantity":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Quantity","description":"How many units to quote.","default":1},"market":{"anyOf":[{"type":"string","maxLength":32,"minLength":1},{"type":"null"}],"title":"Market","description":"Explicit merchant market to use for catalog pricing."},"currency":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}],"description":"Buyer presentment currency. Omission uses native pricing; a different currency creates a binding Stripe FX Quote."},"booking":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/QuantityBookingRequest"},{"$ref":"#/components/schemas/AppointmentBookingRequest"},{"$ref":"#/components/schemas/ScheduledClassBookingRequest"},{"$ref":"#/components/schemas/StayBookingRequest"}],"discriminator":{"propertyName":"type","mapping":{"appointment":"#/components/schemas/AppointmentBookingRequest","quantity":"#/components/schemas/QuantityBookingRequest","scheduled_class":"#/components/schemas/ScheduledClassBookingRequest","stay":"#/components/schemas/StayBookingRequest"}}},{"type":"null"}],"title":"Booking","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."},"customizations":{"items":{"$ref":"#/components/schemas/PublicMppCustomizationGroupRequest"},"type":"array","maxItems":50,"title":"Customizations","description":"Requested customization choices. Resolved identifiers, descriptions, quantities, and price deltas are bound to every resulting offer."},"context":{"anyOf":[{"$ref":"#/components/schemas/QuoteContextHint"},{"type":"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"}],"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":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Message","description":"Free-form note retained for the merchant. It is never forwarded to inventory pricing and cannot affect a binding offer."},"price_proposal":{"anyOf":[{"$ref":"#/components/schemas/QuotePriceProposal"},{"type":"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"}],"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."}},"additionalProperties":false,"type":"object","title":"PublicMppQuoteCreateRequest","description":"Body for ``POST /mpp/{slug}/quotes`` (price on request or booking)."},"PublicMppQuoteFulfillmentRequest":{"properties":{"type":{"$ref":"#/components/schemas/AgenticFulfillmentType","description":"Fulfillment mode for every item."},"destinations":{"items":{"anyOf":[{"$ref":"#/components/schemas/PublicMppLocationDestination"},{"$ref":"#/components/schemas/UcpShippingDestination"}]},"type":"array","maxItems":1,"title":"Destinations","description":"At most one destination, implicitly selected for the entire order."},"option_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Option Id","description":"Published catalog fulfillment option to quote."},"rate_card_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Rate Card Id","description":"Published fulfillment service to quote."}},"additionalProperties":false,"type":"object","required":["type"],"title":"PublicMppQuoteFulfillmentRequest","description":"Order-wide quote fulfillment with optional published service constraints."},"PublicMppQuoteItemRead":{"properties":{"sku":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sku","description":"SKU of the listing the quote covers.","examples":["ESP-1-L"]},"name":{"type":"string","title":"Name","description":"Listing name snapshotted when the quote was raised — authoritative even if the catalog later changes.","examples":["Espresso — Large"]},"catalog_item_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Catalog Item Id","description":"Catalog item the quote covers.","examples":["om_agci_4c1a"]},"variant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Id","description":"Exact variant the quote covers.","examples":["om_agcv_9d10"]},"variant_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Name","description":"Variant name snapshotted when the quote was raised.","examples":["Large"]},"variant_options":{"items":{"$ref":"#/components/schemas/PublicMppVariantOptionRead"},"type":"array","title":"Variant Options","description":"Option axis / value pairs identifying that variant."},"customizations":{"items":{"$ref":"#/components/schemas/PublicMppCustomizationSelectionRead"},"type":"array","title":"Customizations","description":"Customization selections captured with the quote request."}},"type":"object","required":["name"],"title":"PublicMppQuoteItemRead","description":"The listing a quote was requested for (snapshot)."},"PublicMppQuoteMessageRead":{"properties":{"code":{"type":"string","title":"Code","description":"Machine-readable note code.","examples":["price_changed","booking_unavailable"]},"message":{"type":"string","title":"Message","description":"Human-readable explanation of the same note."},"offer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Offer Id","description":"The offer the note is about, when it targets one.","examples":["om_agqo_5e8b"]},"previous_total_amount_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Previous Total Amount Cents","description":"For `price_changed`: what the total was before the refresh, in minor units."}},"type":"object","required":["code","message"],"title":"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."},"PublicMppQuoteOfferRead":{"properties":{"id":{"type":"string","title":"Id","description":"Offer identifier. Pass it as a line’s `quote_offer_id` to buy exactly this alternative.","examples":["om_agqo_5e8b"]},"catalog_item_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Catalog Item Id","description":"Catalog item this offer prices, when catalog-backed."},"catalog_variant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Catalog Variant Id","description":"Resolved catalog variant this offer prices."},"booking_snapshot":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/QuantityBookingSnapshot"},{"$ref":"#/components/schemas/AppointmentBookingSnapshot"},{"$ref":"#/components/schemas/ScheduledClassBookingSnapshot"},{"$ref":"#/components/schemas/StayBookingSnapshot"}],"discriminator":{"propertyName":"type","mapping":{"appointment":"#/components/schemas/AppointmentBookingSnapshot","quantity":"#/components/schemas/QuantityBookingSnapshot","scheduled_class":"#/components/schemas/ScheduledClassBookingSnapshot","stay":"#/components/schemas/StayBookingSnapshot"}}},{"type":"null"}],"title":"Booking Snapshot","description":"Exact booking selection, or null for quantity inventory."},"pricing_model":{"$ref":"#/components/schemas/AgenticPricingModel","description":"How the total derives from the rate for this offer."},"unit_count":{"type":"integer","title":"Unit Count","description":"Billable units the total covers — nights, seats, or sessions."},"unit_amount_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unit Amount Cents","description":"Rate per billable unit, in minor units. Null when the merchant priced the offer as a whole."},"total_amount_cents":{"type":"integer","title":"Total Amount Cents","description":"Authoritative final payable amount in currency minor units."},"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"}],"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":{"items":{"$ref":"#/components/schemas/PriceSubtotal"},"type":"array","title":"Subtotals","description":"Merchant-authored ordered price ledger. It contains exactly one subtotal and final total; tax and fee lines may repeat."},"availability_status":{"$ref":"#/components/schemas/QuoteOfferAvailabilityStatus","description":"Availability assertion for this exact offer."},"available_quantity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Available Quantity","description":"Units currently available for this offer, when quantity is known."},"fulfillment":{"$ref":"#/components/schemas/PublicQuoteFulfillmentRead","description":"Exactly one fulfillment choice resolved for this offer."},"merchant_offer_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchant Offer Reference","description":"Merchant-authored reference for support and reconciliation."},"expires_at":{"type":"string","format":"date-time","title":"Expires At","description":"Deadline after which this offer must be refreshed before purchase."},"superseded_by_offer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Superseded By Offer Id","description":"Set on a refreshed offer; purchase the successor instead."},"promotion":{"anyOf":[{"$ref":"#/components/schemas/AppliedPromotionRead"},{"type":"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."}},"type":"object","required":["id","pricing_model","unit_count","total_amount_cents","currency","tax_treatment","subtotals","availability_status","fulfillment","expires_at"],"title":"PublicMppQuoteOfferRead","description":"One exact, priced, expiring buyer-visible alternative beneath a quote."},"PublicMppVariantOptionRead":{"properties":{"option_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Option Id","description":"Identifier of the option axis, when the merchant publishes one.","examples":["om_agco_size"]},"option_name":{"type":"string","title":"Option Name","description":"Buyer-facing name of the option axis.","examples":["Size"]},"value_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value Id","description":"Identifier of the selected value on that axis.","examples":["om_agov_large"]},"value_label":{"type":"string","title":"Value Label","description":"Buyer-facing label of the selected value.","examples":["Large"]}},"type":"object","required":["option_name","value_label"],"title":"PublicMppVariantOptionRead","description":"One finite option selection identifying a catalog variant."},"PublicPaymentIntentsCapabilityRead":{"properties":{"requested":{"type":"boolean","title":"Requested","description":"Always true — payment_intents is on by default and cannot be un-requested.","default":true},"enabled":{"type":"boolean","title":"Enabled","description":"Whether this capability can currently be used."},"requirements":{"items":{"$ref":"#/components/schemas/PublicCapabilityRequirement"},"type":"array","title":"Requirements","description":"Missing requirements that must be satisfied before the capability can be enabled."},"disabled_reason":{"anyOf":[{"$ref":"#/components/schemas/PaymentIntentsDisabledReason"},{"type":"null"}],"description":"Primary reason the capability is disabled, when it is."}},"type":"object","required":["enabled"],"title":"PublicPaymentIntentsCapabilityRead","description":"Public projection of ``PaymentIntentsCapabilityRead``."},"PublicPolicyLibraryListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PublicPolicyLibraryRead"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","default":0},"summary":{"anyOf":[{"$ref":"#/components/schemas/PolicyLibrarySummary"},{"type":"null"}]}},"type":"object","required":["items"],"title":"PublicPolicyLibraryListResponse","description":"Public projection of ``PolicyLibraryListResponse``."},"PublicPolicyLibraryRead":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_default":{"type":"boolean","title":"Is Default"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Archived At"},"currency_code":{"$ref":"#/components/schemas/CurrencyCode"},"current_version_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Version Id"},"current_version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Version Number"},"initial_budget_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Initial Budget Cents"},"spending_limits":{"items":{"$ref":"#/components/schemas/PolicySpendingLimit"},"type":"array","title":"Spending Limits"},"approval_threshold_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Approval Threshold Cents"},"velocity_per_day_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Velocity Per Day Count"},"allowed_categories":{"items":{"type":"string"},"type":"array","title":"Allowed Categories"},"blocked_categories":{"items":{"type":"string"},"type":"array","title":"Blocked Categories"},"blocked_merchants":{"items":{"type":"string"},"type":"array","title":"Blocked Merchants"},"allow_recurring":{"type":"boolean","title":"Allow Recurring"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","is_default","currency_code","initial_budget_cents","spending_limits","approval_threshold_cents","velocity_per_day_count","allowed_categories","blocked_categories","blocked_merchants","allow_recurring","created_at","updated_at"],"title":"PublicPolicyLibraryRead","description":"Public projection of ``PolicyLibraryRead``."},"PublicProfileAddressRead":{"properties":{"id":{"type":"string","title":"Id","description":"Stable address identifier (pr_addr_*)."},"address_type":{"$ref":"#/components/schemas/ProfileAddressType","description":"Address category (e.g. shipping, billing) used by checkout to select an address."},"is_default":{"type":"boolean","title":"Is Default","description":"Whether this address is the profile default for its address type."},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label","description":"Human-readable label for the address (e.g. 'Home', 'HQ'), when set."},"recipient_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recipient Name","description":"Name of the person or business receiving items at this address, when set."},"line1":{"type":"string","title":"Line1","description":"Primary street address line (number and street)."},"line2":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Line2","description":"Secondary address line (apartment, suite, unit, etc.), when present."},"city":{"type":"string","title":"City","description":"City or locality."},"state":{"type":"string","title":"State","description":"State, province, or administrative region. ISO subdivision code when applicable."},"postal_code":{"type":"string","title":"Postal Code","description":"Postal or ZIP code."},"country":{"$ref":"#/components/schemas/CountryCode","description":"ISO 3166-1 alpha-2 country code."},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone","description":"E.164 phone number associated with this address, when present."},"place_provider":{"anyOf":[{"$ref":"#/components/schemas/PlaceDataProvider"},{"type":"null"}],"description":"External place provider associated with this address, when available."},"provider_place_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Place Id","description":"Provider-native place id associated with this address, when available."}},"type":"object","required":["id","address_type","is_default","line1","city","state","postal_code","country"],"title":"PublicProfileAddressRead","description":"Public projection of ``ProfileAddressRead``."},"PublicProfileAttestationsRead":{"properties":{"terms_of_service":{"$ref":"#/components/schemas/PublicTermsOfServiceAttestationsRead"}},"type":"object","required":["terms_of_service"],"title":"PublicProfileAttestationsRead","description":"Public projection of ``ProfileAttestationsRead``."},"PublicProfileBeneficialOwnerRead":{"properties":{"id":{"type":"string","title":"Id"},"account_id":{"type":"string","title":"Account Id"},"mode":{"$ref":"#/components/schemas/ModeValue"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"ownership_percentage":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ownership Percentage"},"dob":{"anyOf":[{"$ref":"#/components/schemas/DobRead"},{"type":"null"}]},"country":{"anyOf":[{"$ref":"#/components/schemas/CountryCode"},{"type":"null"}]}},"type":"object","required":["id","account_id","mode","first_name","last_name"],"title":"PublicProfileBeneficialOwnerRead","description":"Public projection of ``ProfileBeneficialOwnerRead``."},"PublicProfileCapabilitiesRead":{"properties":{"payment_intents":{"$ref":"#/components/schemas/PublicPaymentIntentsCapabilityRead","description":"Whether this profile can create purchase intents."},"issuing":{"$ref":"#/components/schemas/PublicIssuingCapabilityRead","description":"Profile-level Issuing (cardholder) capability state."}},"type":"object","required":["payment_intents","issuing"],"title":"PublicProfileCapabilitiesRead","description":"Public projection of ``ProfileCapabilitiesRead``."},"PublicProfileCreate":{"properties":{"profile_type":{"$ref":"#/components/schemas/ProfileType"},"first_name":{"type":"string","maxLength":255,"title":"First Name"},"last_name":{"type":"string","maxLength":255,"title":"Last Name"},"email":{"type":"string","maxLength":255,"title":"Email","description":"Email address, e.g. \"user@example.com\".","example":"user@example.com"},"phone":{"type":"string","maxLength":64,"title":"Phone","description":"Phone number in E.164 format, e.g. \"+14155551234\".","example":"+14155551234"},"dob":{"$ref":"#/components/schemas/Dob"},"legal_gender":{"anyOf":[{"$ref":"#/components/schemas/LegalGender"},{"type":"null"}],"description":"Optional legal-document gender marker used for travel and identity workflows."},"country":{"$ref":"#/components/schemas/CountryCode"},"default_currency":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}],"description":"Optional default ISO 4217 currency; defaults from country when omitted."},"addresses":{"items":{"$ref":"#/components/schemas/ProfileAddressCreate"},"type":"array","title":"Addresses"},"payment_methods":{"items":{"$ref":"#/components/schemas/PublicProfilePaymentMethodCreate"},"type":"array","title":"Payment Methods"},"business_details":{"anyOf":[{"$ref":"#/components/schemas/BusinessDetailsCreate"},{"type":"null"}]},"issuing":{"$ref":"#/components/schemas/IssuingCapabilityRequest","description":"Profile-level Issuing capability request."},"accept_cardholder_terms":{"type":"boolean","title":"Accept Cardholder Terms","default":false},"metadata":{"additionalProperties":{"type":"string"},"type":"object","title":"Metadata"},"preferences":{"anyOf":[{"$ref":"#/components/schemas/PublicProfilePreferencesCreate"},{"type":"null"}]}},"type":"object","required":["profile_type","first_name","last_name","email","phone","dob","country"],"title":"PublicProfileCreate","description":"Public projection of ``ProfileCreate``."},"PublicProfileFulfillmentPreferencesCreate":{"properties":{"method":{"anyOf":[{"$ref":"#/components/schemas/FulfillmentMethod"},{"type":"null"}],"description":"Default preferred fulfillment method for this profile."},"max_fee_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Fee Amount","description":"Default maximum shipping, delivery, or pickup fee amount in minor currency units."},"delivery_method":{"anyOf":[{"$ref":"#/components/schemas/DeliveryMethod"},{"type":"null"}],"description":"Default delivery handoff instruction for local delivery checkouts."}},"type":"object","title":"PublicProfileFulfillmentPreferencesCreate","description":"Public projection of ``ProfileFulfillmentPreferencesCreate``."},"PublicProfileFulfillmentPreferencesPatch":{"properties":{"method":{"anyOf":[{"$ref":"#/components/schemas/FulfillmentMethod"},{"type":"null"}],"description":"Default preferred fulfillment method for this profile."},"max_fee_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Fee Amount","description":"Default maximum shipping, delivery, or pickup fee amount in minor currency units."},"delivery_method":{"anyOf":[{"$ref":"#/components/schemas/DeliveryMethod"},{"type":"null"}],"description":"Default delivery handoff instruction for local delivery checkouts."}},"type":"object","title":"PublicProfileFulfillmentPreferencesPatch","description":"Public projection of ``ProfileFulfillmentPreferencesPatch``."},"PublicProfileFulfillmentPreferencesRead":{"properties":{"method":{"anyOf":[{"$ref":"#/components/schemas/FulfillmentMethod"},{"type":"null"}]},"max_fee_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Fee Amount"},"delivery_method":{"anyOf":[{"$ref":"#/components/schemas/DeliveryMethod"},{"type":"null"}]}},"type":"object","title":"PublicProfileFulfillmentPreferencesRead","description":"Public projection of ``ProfileFulfillmentPreferencesRead``."},"PublicProfileListItem":{"properties":{"id":{"type":"string","title":"Id"},"profile_type":{"$ref":"#/components/schemas/ProfileType"},"status":{"$ref":"#/components/schemas/ProfileStatus"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"default_payment_method":{"anyOf":[{"$ref":"#/components/schemas/ProfileListItemPaymentMethod"},{"type":"null"}]},"business_details":{"anyOf":[{"$ref":"#/components/schemas/BusinessDetailsListItem"},{"type":"null"}]},"email":{"type":"string","title":"Email"},"phone":{"type":"string","title":"Phone"},"legal_gender":{"anyOf":[{"$ref":"#/components/schemas/LegalGender"},{"type":"null"}]},"country":{"$ref":"#/components/schemas/CountryCode"},"default_currency":{"$ref":"#/components/schemas/CurrencyCode"},"preferences":{"$ref":"#/components/schemas/PublicProfilePreferencesRead"},"capabilities":{"$ref":"#/components/schemas/PublicProfileCapabilitiesRead"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"last_activity_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Activity At"},"stripe_sync":{"anyOf":[{"$ref":"#/components/schemas/ProfileStripeSynchronizationRead"},{"type":"null"}]},"merchant_connections":{"items":{"$ref":"#/components/schemas/ProfileMerchantConnectionRead"},"type":"array","title":"Merchant Connections","description":"Metadata-only merchant browser-auth connections owned by this profile. "}},"type":"object","required":["id","profile_type","status","first_name","last_name","email","phone","country","default_currency","preferences","capabilities","created_at","updated_at"],"title":"PublicProfileListItem","description":"Public projection of ``ProfileListItem``."},"PublicProfileListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PublicProfileListItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"summary":{"$ref":"#/components/schemas/ProfileListSummary"}},"type":"object","required":["items","total","summary"],"title":"PublicProfileListResponse","description":"Public projection of ``ProfileListResponse``."},"PublicProfilePatch":{"properties":{"profile_type":{"anyOf":[{"$ref":"#/components/schemas/ProfileType"},{"type":"null"}]},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"Email address, e.g. \"user@example.com\".","example":"user@example.com"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone","description":"Phone number in E.164 format, e.g. \"+14155551234\".","example":"+14155551234"},"dob":{"anyOf":[{"$ref":"#/components/schemas/Dob"},{"type":"null"}]},"legal_gender":{"anyOf":[{"$ref":"#/components/schemas/LegalGender"},{"type":"null"}],"description":"Optional legal-document gender marker used for travel and identity workflows."},"default_currency":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}]},"addresses":{"anyOf":[{"items":{"$ref":"#/components/schemas/ProfileAddressCreate"},"type":"array"},{"type":"null"}],"title":"Addresses"},"payment_methods":{"anyOf":[{"items":{"$ref":"#/components/schemas/PublicProfilePaymentMethodCreate"},"type":"array"},{"type":"null"}],"title":"Payment Methods"},"business_details":{"anyOf":[{"$ref":"#/components/schemas/BusinessDetailsPatch"},{"type":"null"}]},"issuing":{"anyOf":[{"$ref":"#/components/schemas/IssuingCapabilityRequest"},{"type":"null"}],"description":"Profile-level Issuing capability request."},"metadata":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Metadata"},"preferences":{"anyOf":[{"$ref":"#/components/schemas/PublicProfilePreferencesPatch"},{"type":"null"}]}},"type":"object","title":"PublicProfilePatch","description":"Public projection of ``ProfilePatch``."},"PublicProfilePaymentMethodCardRead":{"properties":{"kind":{"$ref":"#/components/schemas/CardPaymentMethodKind","description":"Whether this card is an existing vaulted card or issued card."},"initial_purchase_intent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Initial Purchase Intent Id"},"is_issued":{"type":"boolean","title":"Is Issued","description":"True when this payment method is an issued card; false for BYO cards."},"card_brand":{"anyOf":[{"$ref":"#/components/schemas/CardBrand"},{"type":"null"}]},"card_last4":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Last4"},"card_exp_month":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Card Exp Month"},"card_exp_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Card Exp Year"},"cardholder_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cardholder Name"},"agentic_credentials_status":{"$ref":"#/components/schemas/AgenticCredentialsStatus","description":"Public summary state for Agentic Credentials readiness on this card."}},"type":"object","required":["kind","is_issued","agentic_credentials_status"],"title":"PublicProfilePaymentMethodCardRead","description":"Public projection of ``ProfilePaymentMethodCardRead``."},"PublicProfilePaymentMethodCreate":{"properties":{"type":{"$ref":"#/components/schemas/ProfilePaymentMethodType","description":"Payment method family. Only \"card\" is currently supported."},"label":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Label"},"is_default":{"type":"boolean","title":"Is Default","default":false},"billing_address":{"anyOf":[{"$ref":"#/components/schemas/ProfileBillingAddress"},{"$ref":"#/components/schemas/ProfilePaymentMethodBillingAddressRef"},{"type":"null"}],"title":"Billing Address"},"card":{"$ref":"#/components/schemas/ProfilePaymentMethodCardCreate"},"initial_budget":{"anyOf":[{"$ref":"#/components/schemas/PublicInitialStandingBudgetRequest"},{"type":"null"}],"description":"Pre-configure a standing credentials allowance for this card."},"id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Id","description":"Existing payment method id for profile update upsert lists; omit to create a new method."}},"type":"object","required":["type","card"],"title":"PublicProfilePaymentMethodCreate","description":"Public projection of ``ProfilePaymentMethodCreate``."},"PublicProfilePaymentMethodCreateRequest":{"properties":{"type":{"$ref":"#/components/schemas/ProfilePaymentMethodType","description":"Payment method family. Only \"card\" is currently supported."},"label":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Label"},"is_default":{"type":"boolean","title":"Is Default","default":false},"billing_address":{"anyOf":[{"$ref":"#/components/schemas/ProfileBillingAddress"},{"$ref":"#/components/schemas/ProfilePaymentMethodBillingAddressRef"},{"type":"null"}],"title":"Billing Address"},"card":{"$ref":"#/components/schemas/ProfilePaymentMethodCardCreate"},"initial_budget":{"anyOf":[{"$ref":"#/components/schemas/PublicInitialStandingBudgetRequest"},{"type":"null"}],"description":"Pre-configure a standing credentials allowance for this card."}},"type":"object","required":["type","card"],"title":"PublicProfilePaymentMethodCreateRequest","description":"Public projection of ``ProfilePaymentMethodCreateRequest``."},"PublicProfilePaymentMethodListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PublicProfilePaymentMethodRead"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"PublicProfilePaymentMethodListResponse","description":"Public projection of ``ProfilePaymentMethodListResponse``."},"PublicProfilePaymentMethodPatchRequest":{"properties":{"label":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Label"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default"},"billing_address":{"anyOf":[{"$ref":"#/components/schemas/ProfileBillingAddress"},{"$ref":"#/components/schemas/ProfilePaymentMethodBillingAddressRef"},{"type":"null"}],"title":"Billing Address"},"card":{"anyOf":[{"$ref":"#/components/schemas/ProfilePaymentMethodCardPatch"},{"type":"null"}]}},"type":"object","title":"PublicProfilePaymentMethodPatchRequest","description":"Public projection of ``ProfilePaymentMethodPatchRequest``."},"PublicProfilePaymentMethodRead":{"properties":{"id":{"type":"string","title":"Id"},"type":{"$ref":"#/components/schemas/ProfilePaymentMethodType","default":"card"},"billing_address_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Address Id"},"is_default":{"type":"boolean","title":"Is Default"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"card":{"$ref":"#/components/schemas/PublicProfilePaymentMethodCardRead"},"standing_allowance":{"anyOf":[{"$ref":"#/components/schemas/ProfilePaymentMethodStandingAllowanceRead"},{"type":"null"}]}},"type":"object","required":["id","is_default","card"],"title":"PublicProfilePaymentMethodRead","description":"Public projection of ``ProfilePaymentMethodRead``."},"PublicProfilePreferencesCreate":{"properties":{"localization":{"anyOf":[{"$ref":"#/components/schemas/ProfileLocalizationPreferencesCreate"},{"type":"null"}]},"fulfillment":{"anyOf":[{"$ref":"#/components/schemas/PublicProfileFulfillmentPreferencesCreate"},{"type":"null"}]},"travel":{"anyOf":[{"$ref":"#/components/schemas/ProfileTravelPreferencesWrite"},{"type":"null"}]}},"type":"object","title":"PublicProfilePreferencesCreate","description":"Public projection of ``ProfilePreferencesCreate``."},"PublicProfilePreferencesPatch":{"properties":{"localization":{"anyOf":[{"$ref":"#/components/schemas/ProfileLocalizationPreferencesPatch"},{"type":"null"}]},"fulfillment":{"anyOf":[{"$ref":"#/components/schemas/PublicProfileFulfillmentPreferencesPatch"},{"type":"null"}]},"travel":{"anyOf":[{"$ref":"#/components/schemas/ProfileTravelPreferencesWrite"},{"type":"null"}]}},"type":"object","title":"PublicProfilePreferencesPatch","description":"Public projection of ``ProfilePreferencesPatch``."},"PublicProfilePreferencesRead":{"properties":{"localization":{"$ref":"#/components/schemas/ProfileLocalizationPreferencesRead"},"fulfillment":{"$ref":"#/components/schemas/PublicProfileFulfillmentPreferencesRead"},"travel":{"$ref":"#/components/schemas/PublicProfileTravelPreferencesRead"}},"type":"object","required":["localization","fulfillment"],"title":"PublicProfilePreferencesRead","description":"Public projection of ``ProfilePreferencesRead``."},"PublicProfileRead":{"properties":{"id":{"type":"string","title":"Id"},"mode":{"$ref":"#/components/schemas/ModeValue"},"profile_type":{"$ref":"#/components/schemas/ProfileType"},"status":{"$ref":"#/components/schemas/ProfileStatus"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"email":{"type":"string","title":"Email"},"phone":{"type":"string","title":"Phone"},"dob":{"anyOf":[{"$ref":"#/components/schemas/DobRead"},{"type":"null"}]},"legal_gender":{"anyOf":[{"$ref":"#/components/schemas/LegalGender"},{"type":"null"}]},"country":{"$ref":"#/components/schemas/CountryCode"},"default_currency":{"$ref":"#/components/schemas/CurrencyCode"},"addresses":{"items":{"$ref":"#/components/schemas/PublicProfileAddressRead"},"type":"array","title":"Addresses"},"payment_methods":{"items":{"$ref":"#/components/schemas/PublicProfilePaymentMethodRead"},"type":"array","title":"Payment Methods"},"business_details":{"anyOf":[{"$ref":"#/components/schemas/PublicBusinessDetailsRead"},{"type":"null"}]},"capabilities":{"$ref":"#/components/schemas/PublicProfileCapabilitiesRead"},"attestations":{"$ref":"#/components/schemas/PublicProfileAttestationsRead"},"metadata":{"additionalProperties":{"type":"string"},"type":"object","title":"Metadata"},"restrict_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Restrict Reason"},"restricted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Restricted At"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Archived At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"last_activity_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Activity At"},"preferences":{"$ref":"#/components/schemas/PublicProfilePreferencesRead"},"stripe_sync":{"anyOf":[{"$ref":"#/components/schemas/ProfileStripeSynchronizationRead"},{"type":"null"}]},"merchant_connections":{"items":{"$ref":"#/components/schemas/ProfileMerchantConnectionRead"},"type":"array","title":"Merchant Connections","description":"Metadata-only merchant browser-auth connections owned by this profile. "}},"type":"object","required":["id","mode","profile_type","status","first_name","last_name","email","phone","country","default_currency","capabilities","attestations","created_at","updated_at","preferences"],"title":"PublicProfileRead","description":"Public projection of ``ProfileRead``."},"PublicProfileTravelLoyaltyAccountRead":{"properties":{"id":{"type":"string","title":"Id"},"program_type":{"$ref":"#/components/schemas/TravelLoyaltyProgramType"},"program_code":{"$ref":"#/components/schemas/TravelLoyaltyProgramCode"},"program_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Program Name"},"membership_number":{"type":"string","title":"Membership Number","x-pii-redaction":"secret"},"holder_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Holder Name"},"is_default":{"type":"boolean","title":"Is Default","default":false}},"type":"object","required":["id","program_type","program_code","membership_number"],"title":"PublicProfileTravelLoyaltyAccountRead","description":"Public projection of ``ProfileTravelLoyaltyAccountRead``."},"PublicProfileTravelPreferencesRead":{"properties":{"known_traveler_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Known Traveler Number","x-pii-redaction":"secret"},"redress_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Redress Number","x-pii-redaction":"secret"},"home_airport_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Home Airport Code"},"preferred_airport_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preferred Airport Code"},"air":{"$ref":"#/components/schemas/ProfileTravelAirPreferencesRead"},"hotel":{"$ref":"#/components/schemas/ProfileTravelHotelPreferencesRead"},"ground":{"$ref":"#/components/schemas/ProfileTravelGroundPreferencesRead"},"loyalty_accounts":{"items":{"$ref":"#/components/schemas/PublicProfileTravelLoyaltyAccountRead"},"type":"array","title":"Loyalty Accounts"}},"type":"object","required":["air","hotel","ground"],"title":"PublicProfileTravelPreferencesRead","description":"Public projection of ``ProfileTravelPreferencesRead``."},"PublicPurchaseIntentCartErrorRead":{"properties":{"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message","description":"Latest cart attempt error message, when available."},"failure_reason":{"anyOf":[{"$ref":"#/components/schemas/app__integrations__browser__browser_clients__types__PurchaseFailureReason"},{"type":"null"}],"description":"Machine-readable latest cart attempt failure reason, when available."}},"type":"object","title":"PublicPurchaseIntentCartErrorRead","description":"Public v1 error details for the latest attempt on one cart."},"PublicPurchaseIntentCartRead":{"properties":{"id":{"type":"string","title":"Id","description":"Stable cart execution identifier."},"status":{"$ref":"#/components/schemas/PurchaseCartExecutionStatus","description":"Lifecycle status for this cart."},"attempt_number":{"type":"integer","title":"Attempt Number","description":"One-based latest attempt number for this cart.","default":1},"max_attempts":{"type":"integer","title":"Max Attempts","description":"Maximum total attempts allowed for this cart.","default":3},"can_retry":{"type":"boolean","title":"Can Retry","description":"Whether this cart can currently be retried.","default":false},"can_cancel":{"type":"boolean","title":"Can Cancel","description":"Whether this cart can currently be cancelled.","default":false},"error":{"anyOf":[{"$ref":"#/components/schemas/PublicPurchaseIntentCartErrorRead"},{"type":"null"}],"description":"Latest cart attempt error details, when available."},"merchant":{"anyOf":[{"$ref":"#/components/schemas/MerchantRead"},{"type":"null"}],"description":"Display-ready merchant identity for this cart, when available."},"merchant_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchant Domain","description":"Normalized merchant domain for this cart, when available."},"expected_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expected Amount","description":"Expected cart amount in minor currency units."},"expected_fulfillment_fee_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Fulfillment Fee Amount","description":"Approved expected shipping, delivery, or pickup fee for this cart."},"expected_tax_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Tax Amount","description":"Approved expected tax attributable only to this cart."},"expected_total_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Total Amount","description":"Complete approved expected checkout total for this cart."},"max_allowed_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Allowed Amount","description":"Maximum allowed cart amount in minor currency units."},"actual_amount":{"type":"integer","minimum":0.0,"title":"Actual Amount","description":"Sum of successful transactions for this cart, in minor currency units.","default":0},"is_synthetic":{"type":"boolean","title":"Is Synthetic","description":"Whether this cart completed as a test simulation without a merchant order.","default":false},"synthetic_source":{"anyOf":[{"$ref":"#/components/schemas/SyntheticRecordSource"},{"type":"null"}],"description":"Typed source of the synthetic cart completion, when present."},"currency_code":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"string"},{"type":"null"}],"title":"Currency Code","description":"Currency for cart amounts."},"protocol":{"anyOf":[{"$ref":"#/components/schemas/PurchaseProtocol"},{"type":"null"}],"description":"Coarse protocol used by the latest purchase attempt, when modeled."},"checkout_path":{"anyOf":[{"$ref":"#/components/schemas/PurchaseCheckoutPath"},{"type":"null"}],"description":"Planned browser, UCP, UCP-plus-browser, or MPP checkout path for the latest attempt."},"purchase_provider":{"anyOf":[{"$ref":"#/components/schemas/PurchaseProvider"},{"type":"null"}],"description":"Concrete provider or completion path used by the latest purchase attempt."},"order_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Id","description":"Merchant or provider order id, when available."},"transaction_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transaction Id","description":"Transaction row created for this cart, when captured."},"timeline":{"items":{"$ref":"#/components/schemas/app__schemas__purchasing__purchase_attempt__PurchaseTimelineEvent"},"type":"array","title":"Timeline","description":"Public checkout progress for the latest attempt, including native UCP, browser, and mixed-protocol steps."},"subtotals":{"items":{"$ref":"#/components/schemas/PurchaseIntentCartSubtotal"},"type":"array","title":"Subtotals","description":"Current cart snapshot subtotals flattened onto the cart."},"mismatch_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mismatch Reason","description":"Current cart snapshot mismatch reason, when verification found one."},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["id","status","created_at","updated_at"],"title":"PublicPurchaseIntentCartRead","description":"Flattened public v1 view of one merchant cart execution."},"PublicPurchaseIntentCreate":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PublicPurchaseIntentItemCreate"},"type":"array","minItems":1,"title":"Items","description":"One or more requested item lines."},"preferences":{"anyOf":[{"$ref":"#/components/schemas/PurchaseIntentPreferences"},{"type":"null"}],"description":"Optional purchase preferences and budget hints."},"profile_id":{"type":"string","maxLength":64,"minLength":1,"title":"Profile Id","description":"End-customer profile this purchase is made on behalf of."},"policy_id":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Policy Id","description":"Explicit policy to evaluate against. When omitted the account default policy is used."},"currency_code":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}],"description":"Optional ISO 4217 currency for this purchase intent; omitted defaults from the profile."},"profile_payment_method_id":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Profile Payment Method Id","description":"Saved profile payment method to use. When omitted, the profile default is used."},"idempotency_key":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Idempotency Key","description":"Client key for safe retries."}},"additionalProperties":false,"type":"object","required":["items","profile_id"],"title":"PublicPurchaseIntentCreate","description":"Public v1 API request for creating a purchase intent."},"PublicPurchaseIntentExpand":{"type":"string","enum":["carts","items","payment_action"],"title":"PublicPurchaseIntentExpand","description":"Public v1 purchase-intent response sections callers may expand."},"PublicPurchaseIntentItemCreate":{"properties":{"url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Url","description":"Product URL to purchase. Required unless ``quote_offer_id`` identifies the line."},"catalog_item_id":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Catalog Item Id","description":"Hosted catalog item to purchase. URL is optional; omitting catalog_variant_id selects the item default variant."},"catalog_variant_id":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Catalog Variant Id","description":"Hosted catalog variant to purchase. It may be supplied without catalog_item_id because the server validates and infers its parent."},"quote_offer_id":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Quote Offer Id","description":"Merchant-priced quote offer to buy (``om_agqo_…``), from a quote's ``offers`` array. Buys exactly that alternative — the booked slot or rate plan the offer resolved to — using its authoritative total rather than a price re-derived from the listing. The server resolves the URL, merchant, amount, and currency from the offer, so ``url`` may be omitted."},"expected_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Amount","description":"Expected unit price in minor currency units, used for cart validation."},"quantity":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Quantity","description":"Number of units. Omit to default to ``1``."},"variant_attributes":{"additionalProperties":{"type":"string","maxLength":255,"minLength":1},"propertyNames":{"maxLength":80,"minLength":1},"type":"object","title":"Variant Attributes"},"variant_groups":{"items":{"$ref":"#/components/schemas/PurchaseVariantGroupSnapshot-Input"},"type":"array","title":"Variant Groups","description":"Rich variant option groups known for this item. Additive companion to variant_attributes."},"title":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Title","description":"Caller-provided display label for the line item. When omitted the server derives a generic label from the URL host."},"addressing_mode":{"anyOf":[{"$ref":"#/components/schemas/ItemAddressingMode"},{"type":"null"}],"description":"How this item's URL identifies the item. Omit to let the server resolve it (per-merchant registry, then URL path shape, then default product_url). Set explicitly to \"merchant_surface\" when the URL is an ordering surface (menu/category/configurator) and the item is identified by title + variant_attributes rather than the URL, or \"product_url\" when the URL is the product page."},"image_url":{"anyOf":[{"type":"string","maxLength":2048,"minLength":1},{"type":"null"}],"title":"Image Url","description":"Optional product image URL associated with this line item."}},"additionalProperties":false,"type":"object","title":"PublicPurchaseIntentItemCreate","description":"Public v1 item input for **creating** a purchase intent line.\n\nCreate is add-only: every entry adds a new line, so there is no ``id``\nand no ``remove``. A line is identified either by ``url`` or, when the\nbuyer committed to a merchant-priced alternative, by ``quote_offer_id``."},"PublicPurchaseIntentItemRead":{"properties":{"id":{"type":"string","title":"Id"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"catalog_item_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Catalog Item Id","description":"Resolved hosted catalog item id; null for non-catalog lines."},"catalog_variant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Catalog Variant Id","description":"Resolved hosted catalog variant id, including the server-selected default when the create request omitted it."},"quote_offer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quote Offer Id","description":"Merchant-priced quote offer this line commits to, when the buyer chose a quoted alternative (a booking slot or rate plan). Null on ordinary URL-addressed lines."},"quoted_pricing":{"anyOf":[{"$ref":"#/components/schemas/PurchaseIntentQuotedPricingRead"},{"type":"null"}],"description":"Selected quote price, ordered breakdown, expiry, and promotion; null when this line was not created from a quote offer."},"quantity":{"type":"integer","title":"Quantity","default":1},"expected_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expected Amount"},"expected_currency":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}]},"observed_total_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Observed Total Amount","description":"Observed line total (listed unit price × quantity) from the latest final product-page snapshot, in minor currency units. Null until the item has been observed with all variants/customizations selected."},"max_allowed_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Allowed Amount","description":"Per-item max allowed amount (expected + tax + authorization buffer) in minor currency units; the product-page price gate ceiling."},"availability":{"$ref":"#/components/schemas/ItemAvailability","description":"Stock availability from the latest product-page snapshot; ``unknown`` until the item has been observed.","default":"unknown"},"price_exceeded":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Price Exceeded","description":"Whether the latest product-page observation tripped the per-item price gate. Null until the item has been observed."},"variant_attributes":{"additionalProperties":{"type":"string"},"type":"object","title":"Variant Attributes"},"variant_groups":{"items":{"$ref":"#/components/schemas/PurchaseVariantGroupSnapshot-Output"},"type":"array","title":"Variant Groups","description":"Rich variant option groups known for this item."},"selected_variant_attributes":{"items":{"$ref":"#/components/schemas/PurchaseSelectedVariantAttributeSnapshot"},"type":"array","title":"Selected Variant Attributes","description":"Selected-only rich variant attributes for display and LLM summaries."},"merchant":{"anyOf":[{"$ref":"#/components/schemas/MerchantRead"},{"type":"null"}],"description":"Display-ready merchant identity for this item, when available."},"merchant_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchant Domain","description":"Normalized merchant domain for this item, when available."},"cart_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cart Id","description":"Planned merchant cart this item is batched into (items from the same merchant share a cart). Null until carts are planned."},"status":{"type":"string","title":"Status"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Item title for this line. Product-page snapshot titles take precedence when available; the caller-supplied title is the fallback."},"image_urls":{"items":{"type":"string"},"type":"array","title":"Image Urls","description":"Product image URLs for this line: product-page snapshot images first when available, followed by the caller-supplied image, de-duplicated."},"cached_images":{"items":{"anyOf":[{"$ref":"#/components/schemas/CachedImageRead"},{"type":"null"}]},"type":"array","title":"Cached Images","description":"Parallel cache lookup for image_urls; clients prefer cached_images[i].proxy_url when present."},"primary_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Image Url","description":"Hero image URL for this item, or null when no image is known."},"primary_cached_image":{"anyOf":[{"$ref":"#/components/schemas/CachedImageRead"},{"type":"null"}],"description":"Cached image row for primary_image_url, or null when not cached."},"match_status":{"anyOf":[{"$ref":"#/components/schemas/CartLineMatchStatus"},{"type":"null"}],"description":"Observed cart match status for this item, when available."},"warning":{"anyOf":[{"$ref":"#/components/schemas/PublicPurchaseIntentItemWarning"},{"type":"null"}],"description":"Non-blocking create-time warning for this item, set when a recent cached snapshot reports it out of stock or priced above the expected amount. Null otherwise and on all later reads."}},"type":"object","required":["id","status"],"title":"PublicPurchaseIntentItemRead","description":"Public v1 API view of a requested purchase-intent item.\n\nThe product-page observation is consolidated onto the item itself, so the\nitem is the single object a caller reads: ``observed_total_amount`` /\n``availability`` / ``price_exceeded`` come from the latest snapshot, display\nfields (``title`` / ``image_urls``) prefer product-page snapshots and fall\nback to the caller's input, and ``cart_id`` links the item to its planned merchant cart.\n``expected_amount`` is always the caller's input; ``observed_total_amount``\nis always the final snapshot price and remains null for provisional variant\nobservations."},"PublicPurchaseIntentItemUpdate":{"properties":{"url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Url","description":"Product URL for a NEW line — required when ``id`` is omitted. Must NOT be supplied when ``id`` is present: a line's URL is immutable, so changing it means removing the line and adding a new one."},"expected_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Amount","description":"Expected unit price in minor currency units, used for cart validation."},"quantity":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Quantity","description":"Number of units. Omit to default to ``1`` when adding a line."},"variant_attributes":{"additionalProperties":{"type":"string","maxLength":255,"minLength":1},"propertyNames":{"maxLength":80,"minLength":1},"type":"object","title":"Variant Attributes","description":"Variant selectors such as size or color for product pages without variant-specific URLs."},"variant_groups":{"items":{"$ref":"#/components/schemas/PurchaseVariantGroupSnapshot-Input"},"type":"array","title":"Variant Groups","description":"Rich variant option groups known for this item. Includes all known values, selected values, requirement metadata, and price/quantity metadata where known. Additive companion to variant_attributes."},"addressing_mode":{"anyOf":[{"$ref":"#/components/schemas/ItemAddressingMode"},{"type":"null"}]},"quote_offer_id":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Quote Offer Id"},"id":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Id","description":"Existing purchase intent item id (``pr_pii_…``) to edit or remove. Omit to ADD a new line — pair with ``url``."},"remove":{"type":"boolean","title":"Remove","description":"When true, remove the targeted line. Requires ``id``.","default":false}},"type":"object","title":"PublicPurchaseIntentItemUpdate","description":"Public projection of ``PurchaseIntentItemUpdate``."},"PublicPurchaseIntentItemWarning":{"properties":{"code":{"$ref":"#/components/schemas/PurchaseIntentItemWarningCode","description":"Machine-readable warning code (out of stock / price exceeds expected)."},"message":{"type":"string","title":"Message","description":"Human-readable warning summary."}},"type":"object","required":["code","message"],"title":"PublicPurchaseIntentItemWarning","description":"Slim public projection of a per-item create-time cache warning.\n\nThe full :class:`PurchaseIntentItemWarningRead` carries the cached\nobservation (url / observed + expected unit price / availability /\ncaptured-at), but all of that is either already on the public item itself\n(``url`` / ``expected_amount`` / ``observed_total_amount`` /\n``availability``) or baked into ``message``, so the public surface exposes\nonly the machine code and the human summary."},"PublicPurchaseIntentLinkListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PublicPurchaseIntentLinkRead"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"PublicPurchaseIntentLinkListResponse","description":"Public projection of ``PurchaseIntentLinkListResponse``."},"PublicPurchaseIntentLinkRead":{"properties":{"id":{"type":"string","title":"Id"},"object":{"type":"string","const":"purchase_intent_link","title":"Object","default":"purchase_intent_link"},"purchase_intent_id":{"type":"string","title":"Purchase Intent Id"},"status":{"$ref":"#/components/schemas/PurchaseIntentLinkStatus"},"url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Url","description":"User-facing URL — present only on the create response."},"allowed_actions":{"anyOf":[{"items":{"$ref":"#/components/schemas/PurchaseIntentLinkAction"},"type":"array"},{"type":"null"}],"title":"Allowed Actions","description":"Recipient action scope (null = all actions)."},"return_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Return Url"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"max_clicks":{"type":"integer","title":"Max Clicks"},"click_count":{"type":"integer","title":"Click Count"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","purchase_intent_id","status","expires_at","max_clicks","click_count","created_at"],"title":"PublicPurchaseIntentLinkRead","description":"Public projection of ``PurchaseIntentLinkRead``."},"PublicPurchaseIntentPaymentActionRead":{"properties":{"kind":{"$ref":"#/components/schemas/app__enums__PurchaseIntentPaymentActionKind","description":"Action the caller must complete before checkout execution can create a purchase attempt."},"message":{"anyOf":[{"$ref":"#/components/schemas/PurchaseIntentPaymentActionMessage"},{"type":"string"}],"title":"Message","description":"Human-readable explanation of the required payment action."},"verification_challenge":{"anyOf":[{"$ref":"#/components/schemas/PaymentVerificationChallengeRead"},{"type":"null"}],"description":"Short-lived browser challenge for collecting payment_verification.assurance_data. If this is missing or expired, recreate it with the payment verification challenge endpoint."},"stripe_spt_authentication":{"anyOf":[{"$ref":"#/components/schemas/StripeSptAuthenticationRead"},{"type":"null"}],"description":"Stripe.js authentication input for a paused UCP or MPP Shared Payment Token."}},"type":"object","required":["kind","message"],"title":"PublicPurchaseIntentPaymentActionRead","description":"Public projection of ``PurchaseIntentPaymentActionRead``."},"PublicPurchaseIntentPollRead":{"properties":{"id":{"type":"string","title":"Id"},"object":{"type":"string","title":"Object","default":"purchase_intent"},"expected_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expected Amount","description":"Expected item amount plus requested tip and currently approved expected tax, in minor currency units."},"expected_tax_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Tax Amount","description":"Currently approved expected tax in minor currency units. This may differ from estimated_tax_cents after explicit reapproval."},"expected_total_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Total Amount","description":"Complete approved checkout expectation, including items, fulfillment, tip, and tax before the authorization buffer."},"item_subtotal_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Item Subtotal Cents","description":"Expected pre-tax item subtotal (sum of each line unit price × quantity) in minor currency units; null when no line has a known expected amount. Lets clients render the subtotal without re-summing item lines."},"observed_item_subtotal_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Observed Item Subtotal Cents","description":"Observed pre-tax item subtotal (sum of each line observed unit price × quantity from product-page snapshots) in minor currency units; null until every included line has been observed. Lets clients render actual subtotals without re-summing item lines."},"max_allowed_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Allowed Amount","description":"Expected item amount plus max fulfillment fee and authorization buffer, in minor currency units."},"actual_amount":{"type":"integer","minimum":0.0,"title":"Actual Amount","description":"Sum of successful transactions for this purchase intent, in minor currency units.","default":0},"currency_code":{"$ref":"#/components/schemas/CurrencyCode","default":"USD"},"preferences":{"$ref":"#/components/schemas/PurchaseIntentPreferencesRead","description":"Purchase preferences applied to this intent."},"estimated_tax_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Estimated Tax Cents","description":"Estimated tax portion of expected_amount, in minor currency units, when payment preflight has produced a tax estimate; null otherwise. Lets clients render the tax line without deriving it from expected_amount minus subtotal."},"status":{"$ref":"#/components/schemas/PublicPurchaseIntentStatus"},"failure_reason":{"anyOf":[{"$ref":"#/components/schemas/app__integrations__browser__browser_clients__types__PurchaseFailureReason"},{"type":"null"}],"description":"Machine-readable failure subtype when status is failed (e.g. a merchant-auth reason); null otherwise."},"policy_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Policy Id"},"profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Id"},"selected_approval_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Selected Approval Id"},"profile_payment_method_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Payment Method Id"},"items":{"items":{"$ref":"#/components/schemas/PublicPurchaseIntentItemRead"},"type":"array","title":"Items","description":"Requested item lines for this purchase intent."},"carts":{"items":{"$ref":"#/components/schemas/PublicPurchaseIntentCartRead"},"type":"array","title":"Carts","description":"Flattened merchant cart executions for this purchase intent."},"error":{"anyOf":[{"$ref":"#/components/schemas/PurchaseIntentErrorRead"},{"type":"null"}]},"payment_action":{"anyOf":[{"$ref":"#/components/schemas/PublicPurchaseIntentPaymentActionRead"},{"type":"null"}]},"idempotency_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency Key"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["id","status","created_at","updated_at"],"title":"PublicPurchaseIntentPollRead","description":"Public v1 API view of purchase-intent lifecycle state."},"PublicPurchaseIntentRetryRequest":{"properties":{"credential_ticket_id":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Credential Ticket Id","description":"One-time credential ticket id returned by the MerchantAuthHandoff element's defer_retry submit. When present, routes the retry through the credentialled resume-or-retry path; when absent, the no-credentials PI-wide retry path is used. Tickets are single-use and expire within minutes of being minted."},"otp_ticket_id":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Otp Ticket Id","description":"One-time OTP ticket id minted by an upstream OTP collection surface. When present, routes the retry through the OTP resume path (the paused PA is unpaused; the worker re-enqueues with the ticket so the orchestrator can fill the verification-code form). Mutually exclusive with ``credential_ticket_id`` — the two challenges arrive at different moments in real time and bundling stale OTPs with fresh credentials only confuses the resume path."},"cart_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cart Id","description":"Optional cart to apply the credential ticket to. Single-cart purchase intents never need it — whenever exactly one cart is blocked on merchant auth the server infers the target. Required only when more than one cart is simultaneously waiting on or failed for merchant auth (the 409 lists the candidate ids). Ignored when ``credential_ticket_id`` is absent."},"items":{"anyOf":[{"items":{"$ref":"#/components/schemas/PurchaseIntentRetryItemAmount"},"type":"array"},{"type":"null"}],"title":"Items","description":"New per-item expected amounts to accept before retrying (the accept-new-price flow after an item_price_exceeded failure). When present, the intent amounts are recomputed and a new approval is created covering the accepted amounts. Cannot be combined with credential_ticket_id."},"accepted_cart_snapshot":{"anyOf":[{"$ref":"#/components/schemas/PurchaseIntentRetryCartSnapshotAcceptance"},{"type":"null"}],"description":"Current checkout-observed snapshot to accept before retrying a checkout-total price change. The server reloads and validates the immutable snapshot and promotes its shipping, tax, and total."},"payment_verification":{"anyOf":[{"$ref":"#/components/schemas/PaymentVerificationInput"},{"type":"null"}],"description":"Optional payment instruction verification proof. After an item_price_exceeded failure on an agentic-credential card, a new payment instruction sized to the observed prices is parked awaiting cardholder verification - include the ceremony proof here (with the accepted item amounts) to verify it and retry in a single request. Cannot be combined with credential_ticket_id."},"fulfillment":{"anyOf":[{"$ref":"#/components/schemas/PurchaseIntentRetryFulfillment"},{"type":"null"}],"description":"New fulfillment method to apply before retrying — used to recover from a fulfillment_method_unavailable failure by switching to a method the merchant offers. Cannot be combined with credential_ticket_id."}},"additionalProperties":false,"type":"object","title":"PublicPurchaseIntentRetryRequest","description":"Body for the public ``POST /v1/purchase_intents/{id}/retry`` endpoint.\n\nThe body is optional. When omitted (or when ``credential_ticket_id`` is\nabsent) the endpoint behaves exactly as it always has: it walks every\nretryable cart and either resumes an auth-paused PA whose BAP is already\n``AUTHENTICATED`` or creates a new retry PA for a terminal failed cart.\n\nWhen ``credential_ticket_id`` is supplied the endpoint redeems the\none-time encrypted credential ticket minted earlier by the\nMerchantAuthHandoff element (``defer_retry`` submit) and dispatches to\nthe credentialled resume-or-retry path:\n\n- If the target cart's latest PA is ``AWAITING_MERCHANT_AUTH`` the same\n  PA is reset back to runnable and the worker re-enqueued — the agent\n  signs in inside the existing checkout session.\n- If the target cart's latest PA is a merchant-auth failure or\n  ``CANCELLED`` a brand-new PA is created from scratch.\n\nRaw merchant credentials are never accepted on this endpoint — the\nMerchantAuthHandoff element is the only surface that collects them.\nTickets are one-time and short-lived: redemption destroys the ticket\n(a replay returns 410), and a ticket minted for a different purchase\nintent is rejected (409) and burned.\n\nThe optional ``cart_id`` disambiguates a multi-cart PI. Single-cart\npurchase intents never need it: whenever exactly one cart is blocked on\nmerchant auth the server infers the target (stale cancelled executions\ndo not count against the inference). Only a PI with several carts\nsimultaneously blocked on merchant auth requires an explicit ``cart_id``."},"PublicPurchaseIntentStatus":{"type":"string","enum":["created","awaiting_approval","approved","queued","in_progress","awaiting_payment_action","awaiting_merchant_auth","awaiting_merchant_otp","succeeded","partially_succeeded","failed","declined","cancelled"],"title":"PublicPurchaseIntentStatus","description":"Public v1 lifecycle states returned for purchase-intent responses.\n\nFailure subtyping is carried by ``failure_reason`` on the response (and\non ``error.failure_reason``) — merchant sign-in failures surface as\n``failed`` with a merchant-auth reason. A retryable approve failure\nsurfaces as ``awaiting_approval`` with ``approval_status=failed``."},"PublicPurchaseIntentUpdate":{"properties":{"approve":{"type":"boolean","title":"Approve","description":"When true, approve or resume a purchase intent blocked on payment credential verification.","default":false},"preferences":{"anyOf":[{"$ref":"#/components/schemas/PurchaseIntentPreferencesPatch"},{"type":"null"}],"description":"Optional preference updates applied before any approval action. Only allowed while the purchase intent has not yet been queued for execution."},"items":{"anyOf":[{"items":{"$ref":"#/components/schemas/PublicPurchaseIntentItemUpdate"},"type":"array"},{"type":"null"}],"title":"Items","description":"Optional per-line item updates. Entries without ``id`` add new lines (``url`` required); entries with ``id`` edit the matching line; entries with ``id`` plus ``remove: true`` or ``quantity: 0`` remove it. A line's ``url`` is immutable — changing it means removing the line and adding a new one. Only allowed while the purchase intent has not yet been queued for execution. Removing the last remaining item (with no new adds in the same batch) is rejected — cancel the purchase intent instead."}},"type":"object","title":"PublicPurchaseIntentUpdate","description":"Public projection of ``PurchaseIntentUpdate``."},"PublicQuoteFulfillmentRead":{"properties":{"type":{"$ref":"#/components/schemas/AgenticFulfillmentType","description":"Fulfillment mode the merchant priced for this offer."},"option_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Option Id","description":"Stable catalog option id selected for this offer, when published."},"location_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location Id","description":"Canonical business location priced by this offer."},"rate_card_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rate Card Id","description":"Published fulfillment service this offer priced, when the buyer constrained the quote to one.","examples":["om_agrc_9f21"]},"services":{"items":{"$ref":"#/components/schemas/PublicFulfillmentServiceRead"},"type":"array","title":"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."}},"additionalProperties":false,"type":"object","required":["type"],"title":"PublicQuoteFulfillmentRead","description":"Exactly one fulfillment choice resolved on an authoritative offer."},"PublicQuoteListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PublicQuoteRead"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","default":0}},"type":"object","required":["items"],"title":"PublicQuoteListResponse","description":"One filtered page of merchant quotes."},"PublicQuoteRead":{"properties":{"id":{"type":"string","title":"Id"},"merchant_id":{"type":"string","title":"Merchant Id"},"status":{"$ref":"#/components/schemas/AgenticQuoteStatus"},"catalog_item_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Catalog Item Id"},"catalog_variant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Catalog Variant Id"},"sku":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sku"},"name":{"type":"string","title":"Name"},"variant_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Name"},"item_type":{"$ref":"#/components/schemas/PublicCatalogItemType"},"fulfillment_type":{"$ref":"#/components/schemas/AgenticFulfillmentType"},"quantity":{"type":"integer","title":"Quantity"},"variant_options":{"items":{"$ref":"#/components/schemas/PublicMppVariantOptionRead"},"type":"array","title":"Variant Options"},"customizations":{"items":{"$ref":"#/components/schemas/PublicMppCustomizationSelectionRead"},"type":"array","title":"Customizations"},"booking":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/QuantityBookingRequest"},{"$ref":"#/components/schemas/AppointmentBookingRequest"},{"$ref":"#/components/schemas/ScheduledClassBookingRequest"},{"$ref":"#/components/schemas/StayBookingRequest"}],"discriminator":{"propertyName":"type","mapping":{"appointment":"#/components/schemas/AppointmentBookingRequest","quantity":"#/components/schemas/QuantityBookingRequest","scheduled_class":"#/components/schemas/ScheduledClassBookingRequest","stay":"#/components/schemas/StayBookingRequest"}}},{"type":"null"}],"title":"Booking","description":"The typed booking request this quote answers; null for non-bookable listings."},"customer_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Email"},"customer_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Phone"},"shipping":{"anyOf":[{"$ref":"#/components/schemas/PublicQuoteShippingRead"},{"type":"null"}]},"buyer_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Buyer Message"},"market":{"type":"string","title":"Market"},"currency":{"$ref":"#/components/schemas/CurrencyCode"},"offers":{"items":{"$ref":"#/components/schemas/MerchantQuoteOfferRead"},"type":"array","title":"Offers"},"messages":{"items":{"$ref":"#/components/schemas/PublicMppQuoteMessageRead"},"type":"array","title":"Messages"},"next":{"anyOf":[{"$ref":"#/components/schemas/QuoteNextAction"},{"type":"null"}]},"resolution_generation":{"type":"integer","minimum":1.0,"title":"Resolution Generation"},"quote_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quote Note"},"priced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Priced At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"declined_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Declined At"},"decline_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decline Note"},"consumed_order_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Consumed Order Id"},"consumed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Consumed At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","merchant_id","status","name","item_type","fulfillment_type","quantity","market","currency","resolution_generation","created_at","updated_at"],"title":"PublicQuoteRead","description":"Merchant-visible snapshot and lifecycle state for one quote."},"PublicQuoteShippingRead":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"line1":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Line1"},"line2":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Line2"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal Code"},"country":{"anyOf":[{"$ref":"#/components/schemas/CountryCode"},{"type":"null"}]}},"type":"object","title":"PublicQuoteShippingRead","description":"Ship-to address captured when the buyer requested a quote."},"PublicScheduledClassBookingRead":{"properties":{"type":{"type":"string","const":"scheduled_class","title":"Type","description":"Discriminator marking a class-bookable variant.","default":"scheduled_class"},"timezone":{"type":"string","title":"Timezone","description":"IANA timezone the merchant authored this schedule in; every wall-clock rule above is evaluated in it.","examples":["America/Los_Angeles"]},"party_size":{"$ref":"#/components/schemas/PartySizeRule","description":"How many seats one booking may reserve."}},"type":"object","required":["timezone","party_size"],"title":"PublicScheduledClassBookingRead","description":"Buyer-visible class bounds."},"PublicStandingBudgetCommandRequest":{"properties":{"action":{"$ref":"#/components/schemas/StandingBudgetAction","description":"Budget command to execute."},"amount_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Amount Cents","description":"Budget amount in minor currency units for create/amend actions."},"currency_code":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}],"description":"ISO 4217 currency for create actions; defaults to USD when omitted."},"description":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Description","description":"Shown to the cardholder during passkey verification."},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At","description":"Instruction expiry for create/amend actions."},"payment_verification":{"anyOf":[{"$ref":"#/components/schemas/StandingBudgetVerificationInput"},{"type":"null"}],"description":"Optional browser proof for action=verify. Omit this field after an SDK-direct ceremony; the backend will refresh provider status. When supplied, the provider payment instruction id is still derived from the payment method standing budget."}},"type":"object","required":["action"],"title":"PublicStandingBudgetCommandRequest","description":"Public projection of ``StandingBudgetCommandRequest``."},"PublicStandingBudgetRead":{"properties":{"id":{"type":"string","title":"Id"},"payment_method_id":{"type":"string","title":"Payment Method Id"},"status":{"$ref":"#/components/schemas/AgenticCredentialInstructionStatus"},"currency_code":{"$ref":"#/components/schemas/CurrencyCode"},"amount_cents":{"type":"integer","title":"Amount Cents"},"remaining_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Remaining Amount","description":"Binding-minimum remaining budget in minor currency units. When no policy snapshot is resolvable, this falls back to the instruction allowance minus recorded draws."},"is_drawable":{"type":"boolean","title":"Is Drawable","description":"True when this standing budget can back a credential draw right now: status is approved, internal approvals have cleared, the budget has not expired, and the remaining amount is positive."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"approved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Approved At"},"verification_challenge":{"anyOf":[{"$ref":"#/components/schemas/StandingBudgetVerificationChallengeRead"},{"type":"null"}],"description":"Initial browser verification challenge returned when a newly-created standing budget requires cardholder verification."},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","payment_method_id","status","currency_code","amount_cents","is_drawable","created_at"],"title":"PublicStandingBudgetRead","description":"Public projection of ``StandingBudgetRead``."},"PublicStayBookingRead":{"properties":{"type":{"type":"string","const":"stay","title":"Type","description":"Discriminator marking a stay-bookable variant.","default":"stay"},"timezone":{"type":"string","title":"Timezone","description":"IANA timezone the merchant authored this schedule in; every wall-clock rule above is evaluated in it.","examples":["America/Los_Angeles"]},"minimum_nights":{"type":"integer","title":"Minimum Nights","description":"Shortest stay the property accepts."},"maximum_nights":{"type":"integer","title":"Maximum Nights","description":"Longest stay the property accepts."},"maximum_rooms":{"type":"integer","title":"Maximum Rooms","description":"Most rooms one booking may reserve."},"max_guests_per_room":{"type":"integer","title":"Max Guests Per Room","description":"Occupancy ceiling per room, adults and children combined."}},"type":"object","required":["timezone","minimum_nights","maximum_nights","maximum_rooms","max_guests_per_room"],"title":"PublicStayBookingRead","description":"Buyer-visible stay bounds."},"PublicTermsOfServiceAttestationsRead":{"properties":{"account":{"anyOf":[{"$ref":"#/components/schemas/PublicAttestationRecordRead"},{"type":"null"}]}},"type":"object","title":"PublicTermsOfServiceAttestationsRead","description":"Public projection of ``TermsOfServiceAttestationsRead``."},"PublicV1MarketListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PublicV1MarketRead"},"type":"array","title":"Items"},"total":{"type":"integer","minimum":0.0,"title":"Total"}},"additionalProperties":false,"type":"object","required":["items","total"],"title":"PublicV1MarketListResponse","description":"Stable complete list of markets, in the published v1 shape."},"PublicV1MarketRead":{"properties":{"id":{"type":"string","title":"Id"},"merchant_id":{"type":"string","title":"Merchant Id"},"code":{"type":"string","title":"Code"},"currency":{"$ref":"#/components/schemas/CurrencyCode"},"is_default":{"type":"boolean","title":"Is Default"},"status":{"$ref":"#/components/schemas/MarketStatus"},"default_locale":{"$ref":"#/components/schemas/LocaleCode"},"locales":{"items":{"$ref":"#/components/schemas/LocaleCode"},"type":"array","title":"Locales"},"rules":{"items":{"$ref":"#/components/schemas/MarketRuleRead"},"type":"array","title":"Rules"},"variant_price_count":{"type":"integer","minimum":0.0,"title":"Variant Price Count"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"additionalProperties":false,"type":"object","required":["id","merchant_id","code","currency","is_default","status","default_locale","locales","rules","variant_price_count","created_at","updated_at"],"title":"PublicV1MarketRead","description":"Public API-key view of one market.\n\nThe published v1 contract, and deliberately the narrower of the two: it\ndescribes a merchant's own market configuration and nothing about how we\ncame to know it. :class:`MarketRead` extends this for the dashboard, so a\nfield added there is internal until it is added here on purpose."},"PublicV1PromotionListResponse":{"properties":{"promotions":{"items":{"$ref":"#/components/schemas/PublicV1PromotionRead"},"type":"array","title":"Promotions"},"total":{"type":"integer","title":"Total"}},"additionalProperties":false,"type":"object","required":["promotions","total"],"title":"PublicV1PromotionListResponse","description":"One server-paginated page of promotions for the public v1 API."},"PublicV1PromotionRead":{"properties":{"name":{"type":"string","maxLength":120,"minLength":1,"title":"Name","description":"Name of the promotion. Buyers see it: it is the title shown in the catalog and on every quote, checkout, and order the promotion applies to."},"description":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Description","description":"Seller-only note about the promotion. Never shown to buyers."},"market_id":{"type":"string","maxLength":64,"minLength":1,"title":"Market Id"},"currency":{"$ref":"#/components/schemas/CurrencyCode"},"status":{"$ref":"#/components/schemas/PromotionStatus","default":"draft"},"visibility":{"$ref":"#/components/schemas/PromotionVisibility","default":"public"},"starts_at":{"type":"string","format":"date-time","title":"Starts At"},"ends_at":{"type":"string","format":"date-time","title":"Ends At"},"max_discount_amount":{"type":"integer","maximum":2147483647.0,"minimum":1.0,"title":"Max Discount Amount","default":10000},"floor_unit_amount":{"type":"integer","maximum":2147483647.0,"minimum":0.0,"title":"Floor Unit Amount","default":0},"max_redemptions":{"type":"integer","maximum":2147483647.0,"minimum":1.0,"title":"Max Redemptions","default":100},"max_total_discount_amount":{"type":"integer","maximum":2147483647.0,"minimum":1.0,"title":"Max Total Discount Amount","default":200000},"selection_policy":{"$ref":"#/components/schemas/PromotionSelectionPolicy","description":"How a buyer is drawn an arm. `weighted_random` always uses the arms' own `weight`. `adaptive` re-learns the odds hourly from what buyers actually redeemed, favouring the arm that earns most per offer, keeping every arm in the draw, and easing toward shallower arms when the discount budget is spent ahead of schedule. It learns odds for everyone; it never sets a price per buyer.","default":"weighted_random"},"draw_period_seconds":{"type":"integer","maximum":2147483647.0,"minimum":3600.0,"title":"Draw Period Seconds","default":86400},"offer_probability_bps":{"type":"integer","maximum":10000.0,"minimum":0.0,"title":"Offer Probability Bps","description":"Chance that an eligible identified buyer receives one active arm, in basis points. The remaining share is a sticky no-offer holdout. Anonymous buyers receive no offer when this is below 10,000.","default":10000},"eligibility":{"$ref":"#/components/schemas/PromotionEligibility","default":"anyone"},"required_identity":{"$ref":"#/components/schemas/PromotionRequiredIdentity","default":"none"},"per_identity_limit":{"anyOf":[{"type":"integer","maximum":2147483647.0,"minimum":1.0},{"type":"null"}],"title":"Per Identity Limit"},"per_identity_window_seconds":{"anyOf":[{"type":"integer","maximum":2147483647.0,"minimum":1.0},{"type":"null"}],"title":"Per Identity Window Seconds"},"issuance_limit_count":{"anyOf":[{"type":"integer","maximum":2147483647.0,"minimum":1.0},{"type":"null"}],"title":"Issuance Limit Count"},"issuance_limit_amount":{"anyOf":[{"type":"integer","maximum":2147483647.0,"minimum":1.0},{"type":"null"}],"title":"Issuance Limit Amount"},"issuance_window_seconds":{"anyOf":[{"type":"integer","maximum":2147483647.0,"minimum":1.0},{"type":"null"}],"title":"Issuance Window Seconds"},"negotiable":{"type":"boolean","title":"Negotiable","description":"Whether a buyer may propose a unit price when asking for a quote. When `floor_unit_amount` is set, it is the least a proposal can reach; otherwise the paid-item minimum applies. A proposal never restarts or extends an offer's deadline.","default":false},"counter_strategy":{"$ref":"#/components/schemas/PromotionCounterStrategy","description":"What a proposal below the floor gets. `accept_or_decline` leaves the offer where it was; `counter_at_floor` answers with the floor price, which tells the buyer what the floor is.","default":"accept_or_decline"},"max_negotiation_rounds":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"Max Negotiation Rounds","description":"Most price proposals one quote may make.","default":3},"target_mode":{"$ref":"#/components/schemas/PromotionTargetMode","description":"`include` applies only to matching targets; `exclude` applies to everything in the market except matching targets.","default":"include"},"targets":{"items":{"$ref":"#/components/schemas/PromotionTargetWrite"},"type":"array","maxItems":500,"title":"Targets"},"id":{"type":"string","title":"Id"},"arms":{"items":{"$ref":"#/components/schemas/PromotionArmRead"},"type":"array","title":"Arms"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"usage":{"$ref":"#/components/schemas/PromotionUsageRead","description":"How much of the campaign is reserved and spent right now."}},"additionalProperties":false,"type":"object","required":["name","market_id","currency","starts_at","ends_at","id","arms","created_at","updated_at","usage"],"title":"PublicV1PromotionRead","description":"A promotion as its owner configured it, returned by ``/v1/promotions``.\n\nA read reports what is stored, so none of the create body's cross-field\nrules run here."},"PublicV1QuoteCreateRequest":{"anyOf":[{"required":["catalog_item_id"]},{"required":["catalog_variant_id"]},{"required":["merchant_slug"]}],"properties":{"merchant_slug":{"anyOf":[{"type":"string","maxLength":120,"minLength":1,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,118}[a-z0-9])?$"},{"type":"null"}],"title":"Merchant Slug","description":"Merchant to request the quote from. Required when neither catalog_item_id nor catalog_variant_id is supplied; otherwise the catalog selection determines the merchant and this optional value must match it.","examples":["coffee-cart"]},"catalog_item_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Catalog Item Id","description":"Catalog item to quote. Provide it alone for the default variant, or with catalog_variant_id to pin an exact variant."},"catalog_variant_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Catalog Variant Id","description":"Exact catalog variant to quote. It may be supplied alone or alongside catalog_item_id."},"quantity":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Quantity","description":"How many units to quote.","default":1},"market":{"anyOf":[{"type":"string","maxLength":32,"minLength":1},{"type":"null"}],"title":"Market","description":"Explicit merchant market to use for catalog pricing."},"currency":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}],"description":"Buyer presentment currency. Omission uses native pricing; a different currency creates a binding Stripe FX Quote."},"booking":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/QuantityBookingRequest"},{"$ref":"#/components/schemas/AppointmentBookingRequest"},{"$ref":"#/components/schemas/ScheduledClassBookingRequest"},{"$ref":"#/components/schemas/StayBookingRequest"}],"discriminator":{"propertyName":"type","mapping":{"appointment":"#/components/schemas/AppointmentBookingRequest","quantity":"#/components/schemas/QuantityBookingRequest","scheduled_class":"#/components/schemas/ScheduledClassBookingRequest","stay":"#/components/schemas/StayBookingRequest"}}},{"type":"null"}],"title":"Booking","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."},"customizations":{"items":{"$ref":"#/components/schemas/PublicMppCustomizationGroupRequest"},"type":"array","maxItems":50,"title":"Customizations","description":"Requested customization choices. Resolved identifiers, descriptions, quantities, and price deltas are bound to every resulting offer."},"context":{"anyOf":[{"$ref":"#/components/schemas/QuoteContextHint"},{"type":"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"}],"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":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Message","description":"Free-form note retained for the merchant. It is never forwarded to inventory pricing and cannot affect a binding offer."},"price_proposal":{"anyOf":[{"$ref":"#/components/schemas/QuotePriceProposal"},{"type":"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"}],"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."}},"additionalProperties":false,"type":"object","title":"PublicV1QuoteCreateRequest","description":"Create one buyer-owned hosted quote through the public v1 API."},"PublicV1QuoteListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PublicV1QuoteRead"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"PublicV1QuoteListResponse","description":"One page of v1 buyer-owned quotes."},"PublicV1QuoteRead":{"properties":{"id":{"type":"string","title":"Id","description":"Quote identifier; poll and purchase against it.","examples":["om_agq_9d10"]},"merchant_slug":{"type":"string","title":"Merchant Slug","description":"Storefront the quote was raised against.","examples":["coffee-cart"]},"market":{"type":"string","maxLength":32,"minLength":1,"title":"Market","description":"Merchant market stamped when this quote was priced."},"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":{"type":"integer","title":"Quantity","description":"How many units the quote covers."},"booking":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/QuantityBookingRequest"},{"$ref":"#/components/schemas/AppointmentBookingRequest"},{"$ref":"#/components/schemas/ScheduledClassBookingRequest"},{"$ref":"#/components/schemas/StayBookingRequest"}],"discriminator":{"propertyName":"type","mapping":{"appointment":"#/components/schemas/AppointmentBookingRequest","quantity":"#/components/schemas/QuantityBookingRequest","scheduled_class":"#/components/schemas/ScheduledClassBookingRequest","stay":"#/components/schemas/StayBookingRequest"}}},{"type":"null"}],"title":"Booking","description":"The typed booking request this quote answers; null for non-bookable listings."},"offers":{"items":{"$ref":"#/components/schemas/PublicMppQuoteOfferRead"},"type":"array","title":"Offers","description":"Current immutable priced alternatives with authoritative subtotals. Purchase a binding availability offer by passing its id as a quote_offer line source."},"messages":{"items":{"$ref":"#/components/schemas/PublicMppQuoteMessageRead"},"type":"array","title":"Messages","description":"Machine-readable notes such as price_changed."},"decline_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decline Note","description":"Merchant explanation when the quote was declined."},"negotiation":{"anyOf":[{"$ref":"#/components/schemas/QuoteNegotiationRead"},{"type":"null"}],"description":"The answer to the price this quote proposed; null when it never proposed one."},"next":{"anyOf":[{"$ref":"#/components/schemas/QuoteNextAction"},{"type":"null"}],"description":"Typed next action for the current quote state."},"resolution_generation":{"type":"integer","minimum":1.0,"title":"Resolution Generation","description":"Monotonic merchant-resolution attempt number for this quote."},"order_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Id","description":"Order created from this quote, once consumed.","examples":["om_agmo_2f7c"]},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When the quote was raised.","examples":["2026-09-01T15:00:00Z"]}},"type":"object","required":["id","merchant_slug","market","status","item","quantity","resolution_generation","created_at"],"title":"PublicV1QuoteRead","description":"Offers-only account-owned quote returned by public v1 operations."},"PublicV1RateCardListResponse":{"properties":{"rate_cards":{"items":{"$ref":"#/components/schemas/PublicV1RateCardRead"},"type":"array","title":"Rate Cards"},"total":{"type":"integer","minimum":0.0,"title":"Total"}},"additionalProperties":false,"type":"object","required":["total"],"title":"PublicV1RateCardListResponse","description":"One page of rate cards in the published v1 shape."},"PublicV1RateCardRead":{"properties":{"name":{"type":"string","maxLength":120,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Description"},"fulfillment_type":{"$ref":"#/components/schemas/AgenticFulfillmentType"},"provider":{"$ref":"#/components/schemas/FulfillmentProvider"},"service_name":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Service Name"},"currency":{"$ref":"#/components/schemas/CurrencyCode"},"status":{"$ref":"#/components/schemas/FulfillmentRateCardStatus","default":"active"},"display_order":{"type":"integer","minimum":0.0,"title":"Display Order","default":0},"charge_basis":{"$ref":"#/components/schemas/FulfillmentChargeBasis","default":"per_group"},"total_type":{"$ref":"#/components/schemas/FulfillmentChargeTotalType","default":"fulfillment"},"tax_category":{"$ref":"#/components/schemas/FulfillmentTaxCategory","default":"shipping"},"market_ids":{"items":{"type":"string"},"type":"array","maxItems":200,"title":"Market Ids"},"zone_mode":{"$ref":"#/components/schemas/FulfillmentZoneMode","default":"include"},"zone_rules":{"items":{"$ref":"#/components/schemas/RateCardZoneRuleWrite"},"type":"array","maxItems":500,"title":"Zone Rules"},"label_ids":{"items":{"type":"string"},"type":"array","maxItems":200,"title":"Label Ids"},"location_ids":{"items":{"type":"string"},"type":"array","maxItems":200,"title":"Location Ids"},"timing":{"$ref":"#/components/schemas/RateCardTimingWrite-Output"},"rate":{"$ref":"#/components/schemas/RateCardRateWrite"},"id":{"type":"string","title":"Id"},"merchant_id":{"type":"string","title":"Merchant Id"},"markets":{"items":{"$ref":"#/components/schemas/RateCardMarketSummary"},"type":"array","title":"Markets"},"labels":{"items":{"$ref":"#/components/schemas/RateCardLabelSummary"},"type":"array","title":"Labels"},"locations":{"items":{"$ref":"#/components/schemas/RateCardLocationSummary"},"type":"array","title":"Locations"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"additionalProperties":false,"type":"object","required":["name","fulfillment_type","provider","currency","timing","rate","id","merchant_id","created_at","updated_at"],"title":"PublicV1RateCardRead","description":"Public API-key view of one rate card.\n\nThe published v1 contract, and deliberately the narrower of the two: it\ndescribes the merchant's own configuration and nothing about how we render\nor sync it. :class:`RateCardRead` extends this for the dashboard, so a\nfield added there stays internal until it is added here on purpose."},"PurchaseCartExecutionStatus":{"type":"string","enum":["planned","created","in_progress","awaiting_payment_action","awaiting_merchant_auth","awaiting_merchant_otp","succeeded","failed","cancelled"],"title":"PurchaseCartExecutionStatus","description":"Lifecycle of one merchant cart planned under a purchase intent.\n\nMerchant sign-in failures are ``FAILED`` with a merchant-auth\n``failure_reason`` on the row — no dedicated status."},"PurchaseCheckoutPath":{"type":"string","enum":["browser","ucp","ucp_browser","mpp"],"title":"PurchaseCheckoutPath","description":"Planned checkout presentation path for one purchase attempt.\n\nThe path is more specific than :class:`PurchaseProtocol`: ``UCP_BROWSER``\nrepresents a UCP-created checkout that is completed in the isolated\nbrowser. It is persisted in the routing audit so every purchase-intent\nsurface can render the correct stable checklist before execution emits its\nfirst timeline event."},"PurchaseIntentCartSubtotal":{"properties":{"label":{"type":"string","title":"Label","description":"Merchant-visible subtotal label, such as Tax or Shipping."},"amount":{"type":"integer","minimum":0.0,"title":"Amount","description":"Subtotal amount in minor currency units."},"kind":{"$ref":"#/components/schemas/CartSubtotalKind","description":"Canonical purpose for this subtotal row.","default":"other"}},"additionalProperties":false,"type":"object","required":["label","amount"],"title":"PurchaseIntentCartSubtotal","description":"Single-currency subtotal row captured from a cart snapshot."},"PurchaseIntentErrorRead":{"properties":{"message":{"type":"string","title":"Message"},"failure_reason":{"anyOf":[{"$ref":"#/components/schemas/app__integrations__browser__browser_clients__types__PurchaseFailureReason"},{"type":"null"}]},"retryable":{"type":"boolean","title":"Retryable","default":false}},"type":"object","required":["message"],"title":"PurchaseIntentErrorRead","description":"Terminal purchase-intent error summary."},"PurchaseIntentFulfillmentPreferences":{"properties":{"method":{"anyOf":[{"$ref":"#/components/schemas/FulfillmentMethod"},{"type":"null"}],"description":"Preferred fulfillment method for this purchase."},"max_fee_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Fee Amount","description":"Maximum shipping, delivery, or pickup fee amount the caller allows in minor currency units."},"tip_percentage":{"anyOf":[{"type":"number","multipleOf":0.01,"maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Tip Percentage","description":"Requested checkout tip as a human percent number; 20 means 20%."},"shipping_address_id":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Shipping Address Id","description":"Profile delivery or shipping address to use for this purchase instead of the profile default."},"shipping_address":{"anyOf":[{"$ref":"#/components/schemas/PurchaseIntentShippingAddress"},{"type":"null"}],"description":"One-time shipping address for this purchase. Saved to the profile as a non-default shipping address and used instead of the profile default. Mutually exclusive with shipping_address_id."},"preferred_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Preferred Time","description":"Timezone-aware preferred delivery or pickup timestamp used to choose checkout time windows. OPTIONAL for pickup/delivery: omit it to request ASAP / the earliest available window (checkout selects the merchant's soonest slot). Forbidden for ship."},"delivery_method":{"anyOf":[{"$ref":"#/components/schemas/DeliveryMethod"},{"type":"null"}],"description":"Delivery handoff instruction for local delivery checkouts."}},"additionalProperties":false,"type":"object","title":"PurchaseIntentFulfillmentPreferences","description":"Fulfillment preferences applied to one purchase intent request."},"PurchaseIntentFulfillmentPreferencesRead":{"properties":{"method":{"$ref":"#/components/schemas/FulfillmentMethod","description":"Preferred fulfillment method for this purchase.","default":"ship"},"max_fee_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Fee Amount","description":"Maximum shipping, delivery, or pickup fee amount allowed for this purchase in minor currency units."},"tip_percentage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tip Percentage","description":"Requested checkout tip as a human percent number; 20 means 20%."},"shipping_address_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Shipping Address Id","description":"Profile delivery or shipping address selected for this purchase, when one was provided — including the id of the address created from an inline one-time shipping_address on the write."},"preferred_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Preferred Time","description":"Preferred delivery or pickup timestamp used to choose checkout time windows."},"delivery_method":{"anyOf":[{"$ref":"#/components/schemas/DeliveryMethod"},{"type":"null"}],"description":"Delivery handoff instruction selected for local delivery checkouts."}},"type":"object","title":"PurchaseIntentFulfillmentPreferencesRead","description":"Fulfillment preferences returned with a purchase intent."},"PurchaseIntentItemStatus":{"type":"string","enum":["requested","selected","skipped","removed","purchased","failed"],"title":"PurchaseIntentItemStatus","description":"Lifecycle of one requested item line inside a purchase intent.\n\nResearch/selection happen pre-PI on the research task now; item lines\nstart at REQUESTED and advance through selection to a purchase outcome."},"PurchaseIntentItemWarningCode":{"type":"string","enum":["cached_out_of_stock","cached_price_exceeds_expected"],"title":"PurchaseIntentItemWarningCode","description":"Non-blocking warnings attached to a purchase-intent create response.\n\nDerived from a recent cached product-page snapshot for the item's exact\nURL: the intent is still created and queued, but the caller learns\nup-front that the run is likely to fail (out of stock) or to trip the\nper-item price gate (price above the expected amount)."},"PurchaseIntentLinkAction":{"type":"string","enum":["approve","decline","cancel","retry","merchant_auth"],"title":"PurchaseIntentLinkAction","description":"Actions a hosted purchase-intent link may allow the recipient."},"PurchaseIntentLinkCreateRequest":{"properties":{"allowed_actions":{"anyOf":[{"items":{"$ref":"#/components/schemas/PurchaseIntentLinkAction"},"type":"array","minItems":1},{"type":"null"}],"title":"Allowed Actions","description":"Actions the recipient may take from the hosted page. Omit to allow all of approve, decline, cancel, retry, and merchant_auth. The page also hides actions the intent's current status makes illegal."},"accent_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accent Color","description":"Co-brand accent for the hosted page chrome (hex, e.g. \"#635BFF\")."},"return_url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Return Url","description":"Optional URL the page offers the recipient after a terminal state."},"expires_in_hours":{"anyOf":[{"type":"integer","maximum":168.0,"minimum":1.0},{"type":"null"}],"title":"Expires In Hours","description":"Override the default link TTL (capped at 7 days). PurchaseIntent links carry approval authority — keep them short-lived."}},"additionalProperties":false,"type":"object","title":"PurchaseIntentLinkCreateRequest","description":"Body for ``POST /v1/purchase_intents/{id}/links``."},"PurchaseIntentLinkStatus":{"type":"string","enum":["created","opened","completed","expired","revoked"],"title":"PurchaseIntentLinkStatus","description":"Lifecycle of a hosted purchase-intent link."},"PurchaseIntentPaymentActionMessage":{"type":"string","enum":["Select a payment method before checkout can continue.","Confirm this purchase with your card network before checkout can continue.","CVC re-entry is required before this purchase can start.","Confirm this Stripe payment before checkout can continue."],"title":"PurchaseIntentPaymentActionMessage","description":"User-facing copy for purchase intent payment actions."},"PurchaseIntentPreferences":{"properties":{"fulfillment":{"anyOf":[{"$ref":"#/components/schemas/PurchaseIntentFulfillmentPreferences"},{"type":"null"}],"description":"Fulfillment preferences for this purchase."},"estimate_tax":{"type":"boolean","title":"Estimate Tax","description":"When true, estimate sales tax from the resolved tax address and include it in the authorized total. When false, treat estimated tax as zero but still apply the authorization safety buffer to the pre-tax total.","default":true},"preferred_protocol":{"anyOf":[{"$ref":"#/components/schemas/PurchaseProtocol"},{"type":"null"}],"description":"Soft execution preference. Browser routes directly; UCP or MPP is tried first when eligible and otherwise falls back through normal routing."}},"additionalProperties":false,"type":"object","title":"PurchaseIntentPreferences","description":"Purchase preferences applied to one purchase intent request."},"PurchaseIntentPreferencesPatch":{"properties":{"preferred_protocol":{"anyOf":[{"$ref":"#/components/schemas/PurchaseProtocol"},{"type":"null"}],"description":"Soft protocol preference; set null to restore normal routing."},"fulfillment_method":{"anyOf":[{"$ref":"#/components/schemas/FulfillmentMethod"},{"type":"null"}],"description":"Preferred fulfillment method (pickup, delivery, ship)."},"preferred_time_text":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Preferred Time Text","description":"Natural-language preferred delivery/pickup time, e.g. \"tomorrow at 1pm\"."},"delivery_method":{"anyOf":[{"$ref":"#/components/schemas/DeliveryMethod"},{"type":"null"}],"description":"Delivery handoff instruction (hand_to_me or leave_at_door); only used when method is delivery."},"shipping_address_id":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Shipping Address Id","description":"Profile delivery or shipping address to use for this purchase instead of the profile default."},"shipping_address":{"anyOf":[{"$ref":"#/components/schemas/PurchaseIntentShippingAddress"},{"type":"null"}],"description":"One-time shipping address for this purchase. Saved to the profile as a non-default shipping address and used instead of the profile default. Mutually exclusive with shipping_address_id."},"max_fee_amount_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Fee Amount Cents","description":"Maximum shipping, delivery, or pickup fee amount the caller allows in minor currency units."},"tip_percentage":{"anyOf":[{"type":"number","multipleOf":0.01,"maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Tip Percentage","description":"Requested checkout tip as a human percent number; 20 means 20%. Set null to clear."}},"additionalProperties":false,"type":"object","title":"PurchaseIntentPreferencesPatch","description":"Patch payload for editing a purchase intent's preferences in place.\n\nAll fields are optional — only fields present in the request body\n(use ``model_dump(exclude_unset=True)`` on the receiving end) get\napplied. The mutability window closes the first time a\n:class:`PurchaseAttempt` row is materialized for the intent; calls\nafter that point are rejected with\n:class:`PurchaseIntentPreferencesLockedError`.\n\nNotes on individual fields:\n    - ``fulfillment_method`` is validated against the offer's\n      ``available_fulfillment_methods``; ship-only offers ignore\n      any non-ship request.\n    - ``preferred_time_text`` is the user's raw natural-language\n      phrase (\"tomorrow at 1pm\"). The server parses it against the\n      user's local timezone (X-User-Timezone header → user.timezone\n      → UTC) and stores the resulting UTC instant on\n      ``preferred_fulfillment_at``. Required when the resolved\n      method is delivery or pickup.\n    - ``max_fee_amount_cents`` triggers a recompute of the PI's\n      ``expected_amount`` / ``max_allowed_amount``, mirrors the new\n      total onto any per-merchant cart execution rows, and re-runs\n      policy. Out-of-policy bumps are rejected with\n      :class:`PurchaseIntentPreferencesPolicyBlockedError`.\n    - ``tip_percentage`` updates the fulfillment tip preference as a\n      human percent number (``20`` means 20%) and triggers the same\n      amount/policy recompute path as ``max_fee_amount_cents``.\n    - ``shipping_address`` is a one-time inline address (mutually\n      exclusive with ``shipping_address_id``). It is saved to the\n      profile as a non-default shipping address and assigned to the\n      intent. Clearing the per-intent override is still done with\n      ``shipping_address_id: null``; ``shipping_address: null`` is a\n      no-op."},"PurchaseIntentPreferencesRead":{"properties":{"fulfillment":{"$ref":"#/components/schemas/PurchaseIntentFulfillmentPreferencesRead","description":"Fulfillment preferences for this purchase."},"estimate_tax":{"type":"boolean","title":"Estimate Tax","description":"When true, the purchase intent estimates sales tax and includes it in the authorized total. When false, the authorized total excludes estimated tax but still includes the authorization safety buffer.","default":true},"preferred_protocol":{"anyOf":[{"$ref":"#/components/schemas/PurchaseProtocol"},{"type":"null"}],"description":"Soft execution protocol preference selected before queuing."}},"type":"object","title":"PurchaseIntentPreferencesRead","description":"Purchase preferences returned with a purchase intent."},"PurchaseIntentQuotedPricingRead":{"properties":{"quote_id":{"type":"string","title":"Quote Id","description":"Parent quote that produced the offer."},"quote_offer_id":{"type":"string","title":"Quote Offer Id","description":"Exact quote offer selected for this line."},"currency":{"$ref":"#/components/schemas/CurrencyCode","description":"Currency shared by all quoted amounts."},"total_amount_cents":{"type":"integer","minimum":0.0,"title":"Total Amount Cents","description":"Final payable amount in minor units. Discounts in subtotals are already reflected and must not be subtracted again."},"subtotals":{"items":{"$ref":"#/components/schemas/PriceSubtotal"},"type":"array","title":"Subtotals","description":"Merchant-authored ordered and signed quote price ledger."},"expires_at":{"type":"string","format":"date-time","title":"Expires At","description":"Deadline after which this exact offer cannot be authorized."},"availability_status":{"$ref":"#/components/schemas/QuoteOfferAvailabilityStatus","description":"Merchant availability assertion for the selected offer."},"superseded_by_offer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Superseded By Offer Id","description":"Successor offer id when a refresh replaced this offer."},"promotion":{"anyOf":[{"$ref":"#/components/schemas/AppliedPromotionRead"},{"type":"null"}],"description":"Buyer-facing promotion, including savings, fixed deadline, reservation state, and redemption state."}},"type":"object","required":["quote_id","quote_offer_id","currency","total_amount_cents","expires_at","availability_status"],"title":"PurchaseIntentQuotedPricingRead","description":"Buyer-facing view of the immutable quote and its promotion claim.\n\nThe API rebuilds this projection from existing quote-offer and claim rows\non every read. No pricing or promotion state is duplicated onto the\npurchase-intent item."},"PurchaseIntentRetryCartSnapshotAcceptance":{"properties":{"purchase_cart_execution_id":{"type":"string","maxLength":64,"minLength":1,"title":"Purchase Cart Execution Id","description":"Cart execution whose latest failed checkout produced the accepted snapshot."},"purchase_cart_snapshot_id":{"type":"string","maxLength":64,"minLength":1,"title":"Purchase Cart Snapshot Id","description":"Current checkout-observed cart snapshot whose reported total, and complete component breakdown when available, is accepted."}},"additionalProperties":false,"type":"object","required":["purchase_cart_execution_id","purchase_cart_snapshot_id"],"title":"PurchaseIntentRetryCartSnapshotAcceptance","description":"Observed checkout amount explicitly accepted for a retry.\n\nThe request carries identifiers only. The service reloads the immutable\nsnapshot and verifies that it is the current checkout observation for the\nnamed cart, belongs to this purchase intent, uses the same currency, and\ncontains a positive total. A complete, consistent breakdown corrects the\ncomponent expectations; a total-only observation corrects only the\nindependently stored expected total. Clients must never send trusted\nshipping, tax, or total amounts directly."},"PurchaseIntentRetryFulfillment":{"properties":{"method":{"anyOf":[{"$ref":"#/components/schemas/FulfillmentMethod"},{"type":"null"}],"description":"Fulfillment method to use on the retry (e.g. pickup or delivery). Omit to keep the intent's current method — e.g. when retrying a fulfillment_time_unavailable failure with only a new preferred_time."},"preferred_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Preferred Time","description":"Timezone-aware preferred pickup/delivery timestamp. OPTIONAL — omit to keep the intent's existing preferred time, or, when it has none, to request ASAP / the earliest available pickup or delivery window. Ignored for ship."},"delivery_method":{"anyOf":[{"$ref":"#/components/schemas/DeliveryMethod"},{"type":"null"}],"description":"Delivery handoff instruction. Required when method is delivery."}},"additionalProperties":false,"type":"object","title":"PurchaseIntentRetryFulfillment","description":"New fulfillment selection accepted on a retry request.\n\nRecovers from a ``fulfillment_method_unavailable`` failure: the prior\nattempt's checkout did not offer the intent's selected method (e.g. ship\nrequested but the merchant only offers pickup/delivery), so the caller\nretries with a method the merchant actually offers — surfaced in the\nfailure message. The method is applied DIRECTLY to the intent; unlike the\ncreate-time preferences resolver it is NOT gated on the offer's advertised\navailability, because that advertised set is exactly what proved wrong."},"PurchaseIntentRetryItemAmount":{"properties":{"purchase_intent_item_id":{"type":"string","maxLength":64,"minLength":1,"title":"Purchase Intent Item Id","description":"Purchase intent item whose expected amount is being updated."},"expected_amount":{"type":"integer","minimum":1.0,"title":"Expected Amount","description":"New expected unit price in minor currency units — same semantics as the item-create expected_amount."},"expected_currency":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}],"description":"Currency for expected_amount. Must match the item currency when supplied."}},"additionalProperties":false,"type":"object","required":["purchase_intent_item_id","expected_amount"],"title":"PurchaseIntentRetryItemAmount","description":"One item's accepted new expected amount on a retry request.\n\nUsed by the accept-new-price flow: after a purchase attempt fails with\n``item_price_exceeded``, the caller retries with the observed price as\nthe new ``expected_amount``. The retry updates the item and intent\namounts, supersedes the prior approval with a fresh auto-approved one,\nand enqueues a new attempt."},"PurchaseIntentShippingAddress":{"properties":{"is_default":{"type":"boolean","const":false,"title":"Is Default","description":"Inline purchase-intent shipping addresses never become the profile default.","default":false},"label":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Label","description":"Optional human-readable label for the address (e.g. 'Home', 'HQ')."},"recipient_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Recipient Name","description":"Name of the person or business receiving items at this address."},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone","description":"Phone number in E.164 format, e.g. \"+14155551234\".","example":"+14155551234"},"line1":{"type":"string","maxLength":255,"title":"Line1","description":"Primary street address line (number and street)."},"line2":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Line2","description":"Optional secondary address line (apartment, suite, unit, etc.)."},"city":{"type":"string","maxLength":120,"title":"City","description":"City or locality."},"state":{"type":"string","maxLength":80,"title":"State","description":"State, province, or administrative region. ISO subdivision code when applicable."},"postal_code":{"type":"string","maxLength":32,"title":"Postal Code","description":"Postal or ZIP code."},"country":{"$ref":"#/components/schemas/CountryCode","description":"ISO 3166-1 alpha-2 country code; defaults to US when omitted.","default":"US"},"place_provider":{"anyOf":[{"$ref":"#/components/schemas/PlaceDataProvider"},{"type":"null"}],"description":"External place provider that suggested or verified this business address, when available."},"provider_place_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Provider Place Id","description":"Provider-native place id selected for this address, when available."}},"additionalProperties":false,"type":"object","required":["line1","city","state","postal_code"],"title":"PurchaseIntentShippingAddress","description":"One-time shipping address supplied inline on purchase-intent fulfillment preferences.\n\nPersisted as a regular profile-owned shipping address (mirroring the\ninline billing address on payment-method create) and referenced by the\npurchase intent through the existing ``shipping_address_id`` FK — reads\necho the newly minted address id. ``is_default`` is pinned to ``False``\nat the schema level so a one-time address can never displace the\nprofile's elected default shipping address."},"PurchaseIntentSource":{"type":"string","enum":["chat","browser_handoff","direct_url","repurchase","auto_reorder","api"],"title":"PurchaseIntentSource","description":"Where a purchase intent originated."},"PurchaseIntentStatus":{"type":"string","enum":["created","awaiting_approval","approved","queued","in_progress","awaiting_payment_action","awaiting_merchant_auth","awaiting_merchant_otp","succeeded","partially_succeeded","failed","declined","cancelled"],"title":"PurchaseIntentStatus","description":"Top-level lifecycle of a purchase intent.\n\nFailure subtyping lives on ``PurchaseIntent.failure_reason``\n(:class:`PurchaseFailureReason`) — merchant sign-in failures are\n``FAILED`` with a merchant-auth reason, not a dedicated status. A\nretryable approve-call failure is ``AWAITING_APPROVAL`` with\n``approval_status=FAILED``, not a dedicated status."},"PurchaseItemVariantRequirement":{"type":"string","enum":["required","optional","unknown"],"title":"PurchaseItemVariantRequirement","description":"Whether a product variant option group must be selected."},"PurchaseProtocol":{"type":"string","enum":["browser","ucp","mpp"],"title":"PurchaseProtocol","description":"Coarse execution protocol recorded on purchase intents and attempts.\n\n``MerchantProtocol`` remains the detailed discovery and routing vocabulary.\nThis enum intentionally contains only the protocol families exposed through\npurchase APIs. Legacy ACP, Open Agentic Commerce, and merchant-adapter rails\ntherefore leave ``PurchaseAttempt.protocol`` unset while retaining their\nexact route in the typed routing audit and concrete purchase provider."},"PurchaseProvider":{"type":"string","enum":["ebay","ebay_v2","browser_checkout","amazon_business","kroger","mpp_stripe_spt","ucp_api_complete","ucp_continue_handoff","stripe_acp","open_agentic_commerce","stripe_simulation","demo"],"title":"PurchaseProvider","description":"Identifier for a purchase execution strategy.\n\nPersisted on ``Transaction.purchase_provider`` and used as the\n``IntegrationToken.provider`` key. Keep the string values stable — they\nland in the database and in external token rows."},"PurchaseSelectedVariantAttributeSnapshot":{"properties":{"key":{"type":"string","title":"Key","description":"Stable option-group key for the selected value."},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label","description":"Optional display label for the group."},"value":{"type":"string","title":"Value","description":"Selected option value."},"value_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value Label","description":"Optional display label for the value."},"requirement":{"$ref":"#/components/schemas/PurchaseItemVariantRequirement","description":"Whether the merchant requires this option group.","default":"unknown"},"price_delta_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Price Delta Cents","description":"Incremental selected-value price."},"price_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Price Cents","description":"Absolute selected-value or SKU price."},"quantity":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Quantity","description":"Selected option quantity/count."},"currency_code":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}],"description":"Currency for attached prices."}},"type":"object","required":["key","value"],"title":"PurchaseSelectedVariantAttributeSnapshot","description":"Compact selected-only variant projection for API display and LLM summaries."},"PurchaseVariantGroupSnapshot-Input":{"properties":{"key":{"type":"string","title":"Key","description":"Stable option-group key, such as Size or Pizza Toppings."},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label","description":"Optional display label for the group."},"requirement":{"$ref":"#/components/schemas/PurchaseItemVariantRequirement","description":"Whether the merchant requires a value in this option group.","default":"unknown"},"min_selected":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Min Selected","description":"Minimum number of values that must be selected, when known."},"max_selected":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Selected","description":"Maximum number of values that may be selected, when known."},"values":{"items":{"$ref":"#/components/schemas/PurchaseVariantValueSnapshot"},"type":"array","title":"Values","description":"Known values in this option group."}},"type":"object","required":["key"],"title":"PurchaseVariantGroupSnapshot","description":"A variant option group and every value known for that group."},"PurchaseVariantGroupSnapshot-Output":{"properties":{"key":{"type":"string","title":"Key","description":"Stable option-group key, such as Size or Pizza Toppings."},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label","description":"Optional display label for the group."},"requirement":{"$ref":"#/components/schemas/PurchaseItemVariantRequirement","description":"Whether the merchant requires a value in this option group.","default":"unknown"},"min_selected":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Min Selected","description":"Minimum number of values that must be selected, when known."},"max_selected":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Selected","description":"Maximum number of values that may be selected, when known."},"values":{"items":{"$ref":"#/components/schemas/PurchaseVariantValueSnapshot"},"type":"array","title":"Values","description":"Known values in this option group."}},"type":"object","required":["key"],"title":"PurchaseVariantGroupSnapshot","description":"A variant option group and every value known for that group."},"PurchaseVariantValueSnapshot":{"properties":{"value":{"type":"string","title":"Value","description":"Machine or display value for this option."},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label","description":"Optional display label for the value."},"selected":{"type":"boolean","title":"Selected","description":"Whether this value was selected.","default":false},"available":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Available","description":"Whether this option value was available at capture time, when known."},"price_delta_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Price Delta Cents","description":"Incremental price for choosing this value, in minor currency units."},"price_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Price Cents","description":"Absolute price for this value or selected SKU, in minor currency units."},"quantity":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Quantity","description":"Quantity/count for this option value, when the merchant exposes one."},"currency_code":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}],"description":"Currency for price_delta_cents or price_cents."}},"type":"object","required":["value"],"title":"PurchaseVariantValueSnapshot","description":"One available or selected value inside a variant option group."},"QuantityBookingRequest":{"properties":{"type":{"type":"string","const":"quantity","title":"Type","description":"Discriminator marking an ordinary units line — nothing is scheduled, so the branch carries no other fields.","default":"quantity"}},"additionalProperties":false,"type":"object","title":"QuantityBookingRequest","description":"Explicit \"this is an ordinary units line\" marker."},"QuantityBookingSnapshot":{"properties":{"type":{"type":"string","const":"quantity","title":"Type","description":"Discriminator marking a resolved ordinary-units line.","default":"quantity"}},"additionalProperties":false,"type":"object","title":"QuantityBookingSnapshot","description":"Resolved ordinary-units line."},"QuoteContextHint":{"properties":{"market":{"anyOf":[{"type":"string","maxLength":32,"minLength":1},{"type":"null"}],"title":"Market","description":"Explicit merchant market code to bind to this quote."},"address_country":{"anyOf":[{"$ref":"#/components/schemas/CountryCode"},{"type":"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":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Address Region","description":"State, province, or region the buyer is shopping from.","examples":["OR"]},"postal_code":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Postal Code","description":"Postal code used to estimate destination tax and shipping before a full address is known.","examples":["97209"]},"intent":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Intent","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"]},"language":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Language","description":"BCP-47 language tag for buyer-facing copy on the quote.","examples":["en-US"]},"currency":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}],"description":"ISO-4217 currency the buyer wants to be quoted in. The merchant may decline and answer in its own currency."},"eligibility":{"items":{"$ref":"#/components/schemas/QuoteEligibilityReference"},"type":"array","maxItems":20,"title":"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"}]]}},"additionalProperties":false,"type":"object","title":"QuoteContextHint","description":"UCP-compatible, provisional localization hints accepted on a quote."},"QuoteEligibilityReference":{"properties":{"claim":{"type":"string","maxLength":255,"minLength":3,"title":"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"]},"reference":{"type":"string","maxLength":255,"minLength":1,"title":"Reference","description":"Opaque token the merchant validates against its own system before applying the benefit. Never inspected or interpreted here.","examples":["mbr_9f2c41d0a7"]}},"additionalProperties":false,"type":"object","required":["claim","reference"],"title":"QuoteEligibilityReference","description":"Opaque merchant-verifiable entitlement bound to a quote price."},"QuoteNegotiationRead":{"properties":{"proposed_unit_amount":{"type":"integer","title":"Proposed Unit Amount","description":"The unit price last proposed, in minor units."},"currency":{"$ref":"#/components/schemas/CurrencyCode","description":"Currency of the proposal: the market's own."},"outcome":{"anyOf":[{"$ref":"#/components/schemas/QuoteProposalOutcome"},{"type":"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":{"type":"integer","minimum":0.0,"title":"Rounds Used","description":"Proposals this quote has made so far."}},"additionalProperties":false,"type":"object","required":["proposed_unit_amount","currency","rounds_used"],"title":"QuoteNegotiationRead","description":"What became of the unit price a buyer proposed on this quote."},"QuoteNextAction":{"type":"string","enum":["purchase","poll","resubmit"],"title":"QuoteNextAction","description":"Machine-readable action a buyer may take from the current quote state."},"QuoteOfferAvailabilityStatus":{"type":"string","enum":["available","unavailable","unknown"],"title":"QuoteOfferAvailabilityStatus","description":"Whether the exact booking behind an offer can still be sold."},"QuotePriceProposal":{"properties":{"unit_amount":{"type":"integer","maximum":2147483647.0,"minimum":1.0,"title":"Unit Amount","description":"Proposed price for one unit, in minor units, before fulfillment and tax."},"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."}},"additionalProperties":false,"type":"object","required":["unit_amount","currency"],"title":"QuotePriceProposal","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."},"QuoteProposalOutcome":{"type":"string","enum":["accepted","countered","declined","not_negotiable","forwarded"],"title":"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."},"QuoteRefreshRequest":{"properties":{"price_proposal":{"anyOf":[{"$ref":"#/components/schemas/QuotePriceProposal"},{"type":"null"}],"description":"A new unit price to propose. Counts as one of the quote's limited proposals; once they are used up the refresh is refused with `quote_negotiation_rounds_exceeded` and the current offer stands."}},"additionalProperties":false,"type":"object","title":"QuoteRefreshRequest","description":"Optional body of a quote refresh. An empty refresh needs none.\n\nA refresh re-prices the quote's immutable inputs. The one thing a buyer may\nchange is the price they propose."},"RailSeatPreference":{"type":"string","enum":["aisle","window","no_preference"],"title":"RailSeatPreference","description":"Preferred seat position for rail bookings."},"RateCardCreate":{"properties":{"name":{"type":"string","maxLength":120,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Description"},"fulfillment_type":{"$ref":"#/components/schemas/AgenticFulfillmentType"},"provider":{"$ref":"#/components/schemas/FulfillmentProvider"},"service_name":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Service Name"},"currency":{"$ref":"#/components/schemas/CurrencyCode"},"status":{"$ref":"#/components/schemas/FulfillmentRateCardStatus","default":"active"},"display_order":{"type":"integer","minimum":0.0,"title":"Display Order","default":0},"charge_basis":{"$ref":"#/components/schemas/FulfillmentChargeBasis","default":"per_group"},"total_type":{"$ref":"#/components/schemas/FulfillmentChargeTotalType","default":"fulfillment"},"tax_category":{"$ref":"#/components/schemas/FulfillmentTaxCategory","default":"shipping"},"market_ids":{"items":{"type":"string"},"type":"array","maxItems":200,"minItems":1,"title":"Market Ids"},"zone_mode":{"$ref":"#/components/schemas/FulfillmentZoneMode","default":"include"},"zone_rules":{"items":{"$ref":"#/components/schemas/RateCardZoneRuleWrite"},"type":"array","maxItems":500,"title":"Zone Rules"},"label_ids":{"items":{"type":"string"},"type":"array","maxItems":200,"title":"Label Ids"},"location_ids":{"items":{"type":"string"},"type":"array","maxItems":200,"title":"Location Ids"},"timing":{"$ref":"#/components/schemas/RateCardTimingWrite-Input"},"rate":{"$ref":"#/components/schemas/RateCardRateWrite"}},"additionalProperties":false,"type":"object","required":["name","fulfillment_type","provider","currency","market_ids","timing","rate"],"title":"RateCardCreate","description":"One buyer-facing fulfillment service, in one currency, with one fee rule."},"RateCardLabelSummary":{"properties":{"id":{"type":"string","title":"Id"},"code":{"type":"string","title":"Code"},"name":{"type":"string","title":"Name"}},"additionalProperties":false,"type":"object","required":["id","code","name"],"title":"RateCardLabelSummary","description":"Denormalized fulfillment-label identity carried on a rate-card read."},"RateCardLocationSummary":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"}},"additionalProperties":false,"type":"object","required":["id","name"],"title":"RateCardLocationSummary","description":"Denormalized location identity carried on a rate-card read."},"RateCardMarketSummary":{"properties":{"id":{"type":"string","title":"Id"},"code":{"type":"string","title":"Code"},"currency":{"$ref":"#/components/schemas/CurrencyCode"},"status":{"$ref":"#/components/schemas/MarketStatus"}},"additionalProperties":false,"type":"object","required":["id","code","currency","status"],"title":"RateCardMarketSummary","description":"Denormalized market identity carried on a rate-card read."},"RateCardPatch":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":120,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Description"},"fulfillment_type":{"anyOf":[{"$ref":"#/components/schemas/AgenticFulfillmentType"},{"type":"null"}]},"provider":{"anyOf":[{"$ref":"#/components/schemas/FulfillmentProvider"},{"type":"null"}]},"service_name":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Service Name"},"currency":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}]},"status":{"anyOf":[{"$ref":"#/components/schemas/FulfillmentRateCardStatus"},{"type":"null"}]},"display_order":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Display Order"},"charge_basis":{"anyOf":[{"$ref":"#/components/schemas/FulfillmentChargeBasis"},{"type":"null"}]},"total_type":{"anyOf":[{"$ref":"#/components/schemas/FulfillmentChargeTotalType"},{"type":"null"}]},"tax_category":{"anyOf":[{"$ref":"#/components/schemas/FulfillmentTaxCategory"},{"type":"null"}]},"market_ids":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":200,"minItems":1},{"type":"null"}],"title":"Market Ids"},"zone_rules":{"anyOf":[{"items":{"$ref":"#/components/schemas/RateCardZoneRuleWrite"},"type":"array","maxItems":500},{"type":"null"}],"title":"Zone Rules"},"zone_mode":{"anyOf":[{"$ref":"#/components/schemas/FulfillmentZoneMode"},{"type":"null"}]},"label_ids":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":200},{"type":"null"}],"title":"Label Ids"},"location_ids":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":200},{"type":"null"}],"title":"Location Ids"},"timing":{"anyOf":[{"$ref":"#/components/schemas/RateCardTimingWrite-Input"},{"type":"null"}]},"rate":{"anyOf":[{"$ref":"#/components/schemas/RateCardRateWrite"},{"type":"null"}]}},"additionalProperties":false,"type":"object","title":"RateCardPatch","description":"Partial rate-card update; every supplied child list fully replaces.\n\nCross-field rules are not re-checked here beyond what one field can answer\nalone: a patch that moves a card from ship to pickup is only coherent once\nit is merged with the persisted row, so the merge (and its named errors)\nlives in the management layer."},"RateCardRateWrite":{"properties":{"kind":{"$ref":"#/components/schemas/FulfillmentRateKind"},"flat_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Flat Amount"},"free_over_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Free Over Amount"},"tier_dimensions":{"items":{"$ref":"#/components/schemas/FulfillmentTierDimension"},"type":"array","title":"Tier Dimensions"},"tiers":{"items":{"$ref":"#/components/schemas/RateCardTierWrite"},"type":"array","maxItems":500,"title":"Tiers"},"carrier_markup_bps":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Carrier Markup Bps"},"carrier_flat_adjustment":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Carrier Flat Adjustment"}},"additionalProperties":false,"type":"object","required":["kind"],"title":"RateCardRateWrite","description":"The fee rule that turns one fulfillment group into an amount.\n\nKind-scoped exactly like the mode-scoped timing block: a field belonging to\nanother kind must be ``None`` rather than merely ignored, so a merchant who\nswitches a card from flat to tiered cannot leave a stale amount behind that\na later exporter would read."},"RateCardTierWrite":{"properties":{"max_weight_grams":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Weight Grams"},"max_order_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Order Amount"},"max_distance_meters":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Distance Meters"},"max_item_count":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Item Count"},"label_id":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Label Id"},"amount":{"type":"integer","minimum":0.0,"title":"Amount"}},"additionalProperties":false,"type":"object","required":["amount"],"title":"RateCardTierWrite","description":"One cell of a tiered rate card's amount grid.\n\nEvery numeric bound is an **inclusive upper limit** and ``None`` means\ninfinity; the lower bound is implied by the next-smaller bound declared for\nthat axis. ``label_id`` is the categorical axis, where ``None`` is the \"any\nother label\" cell."},"RateCardTimingWrite-Input":{"properties":{"min_handling_days":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Min Handling Days"},"max_handling_days":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Handling Days"},"min_transit_days":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Min Transit Days"},"max_transit_days":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Transit Days"},"cutoff_time":{"anyOf":[{"type":"string","format":"time"},{"type":"null"}],"title":"Cutoff Time"},"business_days_only":{"type":"boolean","title":"Business Days Only","default":true},"service_radius_meters":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Service Radius Meters"},"lead_time_minutes":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Lead Time Minutes"},"ready_in_minutes":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Ready In Minutes"}},"additionalProperties":false,"type":"object","title":"RateCardTimingWrite","description":"The mode-scoped promise a rate card makes about when the order arrives.\n\nWhich fields are legal depends on the card's ``fulfillment_type`` and is\nvalidated by the parent, because the mode lives there. ``cutoff_time`` is\nthe only field two modes share: ship and delivery both roll their promise\nto the next day past it."},"RateCardTimingWrite-Output":{"properties":{"min_handling_days":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Min Handling Days"},"max_handling_days":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Handling Days"},"min_transit_days":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Min Transit Days"},"max_transit_days":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Transit Days"},"cutoff_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cutoff Time"},"business_days_only":{"type":"boolean","title":"Business Days Only","default":true},"service_radius_meters":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Service Radius Meters"},"lead_time_minutes":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Lead Time Minutes"},"ready_in_minutes":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Ready In Minutes"}},"additionalProperties":false,"type":"object","title":"RateCardTimingWrite","description":"The mode-scoped promise a rate card makes about when the order arrives.\n\nWhich fields are legal depends on the card's ``fulfillment_type`` and is\nvalidated by the parent, because the mode lives there. ``cutoff_time`` is\nthe only field two modes share: ship and delivery both roll their promise\nto the next day past it."},"RateCardZoneRuleWrite":{"properties":{"kind":{"$ref":"#/components/schemas/MarketRuleKind"},"country":{"$ref":"#/components/schemas/CountryCode"},"subdivision":{"anyOf":[{"type":"string","maxLength":8,"minLength":1},{"type":"null"}],"title":"Subdivision"},"postal_prefix":{"anyOf":[{"type":"string","maxLength":16,"minLength":1},{"type":"null"}],"title":"Postal Prefix"}},"additionalProperties":false,"type":"object","required":["kind","country"],"title":"RateCardZoneRuleWrite","description":"One geographic narrowing of a rate card inside the markets it serves.\n\nDeliberately the same shape as a market rule, down to the validator: the\ntwo rule sets are matched against the same buyer address. The card's\n``zone_mode`` determines whether matching zones are served or withheld.\nAn empty set means \"the whole market\" in either mode."},"RateLimitDimension":{"type":"string","enum":["user","ip","account","platform","customer"],"title":"RateLimitDimension","description":"Stable caller identity used to partition a rate-limit bucket."},"RateLimitExceededResponse":{"properties":{"detail":{"type":"string","title":"Detail","description":"Stable human-readable error summary."},"dimension":{"$ref":"#/components/schemas/RateLimitDimension","description":"Caller identity dimension used by the exhausted bucket."},"limit":{"type":"integer","exclusiveMinimum":0.0,"title":"Limit","description":"Maximum requests in the window."},"window_seconds":{"type":"integer","exclusiveMinimum":0.0,"title":"Window Seconds","description":"Bucket window length in seconds."},"retry_after":{"type":"integer","exclusiveMinimum":0.0,"title":"Retry After","description":"Seconds until the caller should retry."}},"type":"object","required":["detail","dimension","limit","window_seconds","retry_after"],"title":"RateLimitExceededResponse","description":"Response returned when a caller exhausts a rate-limit bucket."},"ReadinessCheckOutcome":{"type":"string","enum":["pending","pass","warning","fail","skipped"],"title":"ReadinessCheckOutcome","description":"Result of one publication-readiness check in any readiness layer."},"ReadinessCheckSeverity":{"type":"string","enum":["blocker","warning"],"title":"ReadinessCheckSeverity","description":"Whether a non-pass readiness result blocks its layer's publication."},"ReadinessCommerceStageCode":{"type":"string","enum":["representative_quote_requested","representative_quote_received","representative_offer_validated","mpp_payment_challenge_requested","mpp_payment_challenge_received","mpp_payment_credential_created","mpp_paid_retry_submitted","mpp_payment_accepted","mpp_order_confirmation_pending","mpp_order_confirmed","mpp_capture_verified","mpp_refund_accepted"],"title":"ReadinessCommerceStageCode","description":"Stable seller-visible milestones inside the two commerce probes."},"ReadinessCommerceStageRead":{"properties":{"code":{"$ref":"#/components/schemas/ReadinessCommerceStageCode"},"status":{"$ref":"#/components/schemas/ReadinessCommerceStageStatus"},"title":{"type":"string","title":"Title"},"message":{"type":"string","title":"Message"}},"additionalProperties":false,"type":"object","required":["code","status","title","message"],"title":"ReadinessCommerceStageRead","description":"One ordered, seller-safe milestone inside a commerce readiness probe."},"ReadinessCommerceStageStatus":{"type":"string","enum":["pending","active","completed","failed"],"title":"ReadinessCommerceStageStatus","description":"Progress state of one seller-visible commerce-probe milestone."},"ReadinessStatus":{"type":"string","enum":["not_run","running","ready","blocked","stale","cancelled"],"title":"ReadinessStatus","description":"Lifecycle of one durable publication-readiness run.\n\nShared by every readiness layer (general and MPPScan). The layers differ\nin *which* checks they run, never in how a run's lifecycle is modelled, so\nthey persist the same closed set of status values."},"RegistryDetailResponse":{"properties":{"version":{"type":"integer","minimum":1.0,"title":"Version","default":1},"mode":{"$ref":"#/components/schemas/ModeValue"},"item":{"$ref":"#/components/schemas/RegistryEntryDetailRead"}},"type":"object","required":["mode","item"],"title":"RegistryDetailResponse","description":"Mode-aware detail response for one visible registry entry."},"RegistryEndpointKind":{"type":"string","enum":["read","quote","session","charge"],"title":"RegistryEndpointKind","description":"Operator-facing role of one advertised protocol endpoint."},"RegistryEndpointPriceKind":{"type":"string","enum":["free","fixed","varies"],"title":"RegistryEndpointPriceKind","description":"How the registry should present an endpoint's price."},"RegistryEndpointRead":{"properties":{"method":{"$ref":"#/components/schemas/MppHttpMethod"},"path":{"type":"string","title":"Path"},"url":{"type":"string","title":"Url"},"kind":{"$ref":"#/components/schemas/RegistryEndpointKind"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"price_kind":{"$ref":"#/components/schemas/RegistryEndpointPriceKind"},"price":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/FiatCatalogPriceRead-Output"},{"$ref":"#/components/schemas/TokenCatalogPriceRead"}],"discriminator":{"propertyName":"kind","mapping":{"fiat":"#/components/schemas/FiatCatalogPriceRead-Output","token":"#/components/schemas/TokenCatalogPriceRead"}}},{"type":"null"}],"title":"Price"},"maximum_price":{"anyOf":[{"$ref":"#/components/schemas/FiatCatalogPriceRead-Output"},{"type":"null"}]}},"type":"object","required":["method","path","url","kind","price_kind"],"title":"RegistryEndpointRead","description":"One callable endpoint shown in a registry protocol expansion."},"RegistryEntryDetailRead":{"properties":{"summary":{"$ref":"#/components/schemas/RegistryEntrySummaryRead"},"protocols":{"items":{"$ref":"#/components/schemas/RegistryProtocolDetailRead"},"type":"array","title":"Protocols"},"sample_items":{"items":{"$ref":"#/components/schemas/RegistrySampleItemRead"},"type":"array","title":"Sample Items"},"locations":{"items":{"$ref":"#/components/schemas/PublicMerchantLocationRead"},"type":"array","title":"Locations","description":"Active, explicitly published business locations. Provider identities and seller-only metadata are intentionally omitted."}},"type":"object","required":["summary"],"title":"RegistryEntryDetailRead","description":"Complete protocol and sample-item view for one registry entry."},"RegistryEntrySummaryRead":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"publisher":{"type":"string","title":"Publisher"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"service_url":{"type":"string","title":"Service Url"},"homepage_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Homepage Url"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"verified":{"type":"boolean","title":"Verified","default":false},"verified_on":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Verified On"},"caller_owned":{"type":"boolean","title":"Caller Owned","default":false},"purchasable":{"type":"boolean","title":"Purchasable","description":"Whether this merchant currently exposes at least one executable purchasing protocol. Catalog-only merchants remain discoverable with this field set to false.","default":false},"protocols":{"items":{"$ref":"#/components/schemas/RegistryProtocol"},"type":"array","title":"Protocols"},"sources":{"items":{"$ref":"#/components/schemas/RegistrySourceKind"},"type":"array","title":"Sources"},"commerce_category":{"anyOf":[{"$ref":"#/components/schemas/AgenticCatalogItemType"},{"type":"null"}]},"mpp_categories":{"items":{"type":"string"},"type":"array","title":"Mpp Categories"},"payment_methods":{"items":{"$ref":"#/components/schemas/RegistryPaymentMethodRead"},"type":"array","title":"Payment Methods"},"network_business_profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Network Business Profile Id","description":"Stripe Network Business Profile identifier used to scope Shared Payment Token issuance for an internal OpenMerchant seller. Absent for external entries and internal sellers without a mode-correct profile."},"customer_auth_mode":{"anyOf":[{"$ref":"#/components/schemas/AgenticCustomerAuthMode"},{"type":"null"}],"description":"Whether the merchant demands customer sign-in before checkout: never, optional, or required. Hosted sellers report their enforced mode; external merchants report probe/curated evidence, and None means the question is unanswered — absence of evidence is never mapped to never."},"catalog_item_count":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Catalog Item Count"},"location_count":{"type":"integer","minimum":0.0,"title":"Location Count","description":"Number of active business locations explicitly published by the merchant.","default":0},"primary_location":{"anyOf":[{"$ref":"#/components/schemas/PublicMerchantLocationRead"},{"type":"null"}],"description":"Primary published business location, when one is configured. Private and inactive locations are never projected."},"endpoint_count":{"type":"integer","minimum":0.0,"title":"Endpoint Count","default":0}},"type":"object","required":["id","name","publisher","service_url"],"title":"RegistryEntrySummaryRead","description":"Compact provider row returned by the paginated registry list."},"RegistryFacetRead":{"properties":{"value":{"type":"string","title":"Value"},"count":{"type":"integer","minimum":0.0,"title":"Count"}},"type":"object","required":["value","count"],"title":"RegistryFacetRead","description":"One filter value and the number of matching registry entries."},"RegistryFacetsRead":{"properties":{"commerce_categories":{"items":{"$ref":"#/components/schemas/RegistryFacetRead"},"type":"array","title":"Commerce Categories"},"mpp_categories":{"items":{"$ref":"#/components/schemas/RegistryFacetRead"},"type":"array","title":"Mpp Categories"},"payment_methods":{"items":{"$ref":"#/components/schemas/RegistryFacetRead"},"type":"array","title":"Payment Methods"},"payment_instruments":{"items":{"$ref":"#/components/schemas/RegistryFacetRead"},"type":"array","title":"Payment Instruments"}},"type":"object","title":"RegistryFacetsRead","description":"Unpaginated filter facets for the current search result."},"RegistryListResponse":{"properties":{"version":{"type":"integer","minimum":1.0,"title":"Version","default":1},"mode":{"$ref":"#/components/schemas/ModeValue"},"items":{"items":{"$ref":"#/components/schemas/RegistryEntrySummaryRead"},"type":"array","title":"Items"},"total":{"type":"integer","minimum":0.0,"title":"Total","default":0},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit"},"offset":{"type":"integer","minimum":0.0,"title":"Offset"},"next_offset":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Next Offset"},"facets":{"$ref":"#/components/schemas/RegistryFacetsRead"},"sources":{"items":{"$ref":"#/components/schemas/RegistrySourceStatusRead"},"type":"array","title":"Sources"}},"type":"object","required":["mode","limit","offset"],"title":"RegistryListResponse","description":"One stable page from the combined MPP, internal, and UCP registry."},"RegistryPaymentInstrument":{"type":"string","enum":["card","link","google_pay","apple_pay","gift_card","store_credit","shop_pay","shared_payment_token","amazon_network_token","amazon_stored_payment_method"],"title":"RegistryPaymentInstrument","description":"Granular normalized instruments accepted by Registry and catalog filters.\n\nMost values mirror a UCP ``available_instruments[].type`` exactly. Amazon\npublishes two card-shaped handlers, so its two provider-specific values\nretain the acquisition distinction that the generic ``card`` type alone\ncannot express."},"RegistryPaymentMethod":{"type":"string","enum":["stripe_spt","stripe_card","stripe_gift_card","stripe_store_credit","tempo","google_pay","apple_pay","shop_pay","amazon_pay","card","other"],"title":"RegistryPaymentMethod","description":"High-level payment choices exposed by registry responses and badges.\n\nThe long-standing ``stripe_spt`` wire value now has the more accurate\n``STRIPE_LINK`` name: an SPT obtained through Link Agent Wallet is carried\nas the ``link`` instrument of ``com.stripe.payments``. The old Python\nwire value remains unchanged, so stored YAML and API callers continue to\nparse without a compatibility branch."},"RegistryPaymentMethodFilter":{"type":"string","enum":["stripe_spt","stripe_card","stripe_gift_card","stripe_store_credit","tempo","google_pay","apple_pay","shop_pay","amazon_pay","card","other"],"title":"RegistryPaymentMethodFilter","description":"Agent-compatible payment methods exposed by public search filters.\n\nHandler namespaces and instruments remain separate discovery metadata.\n``card`` is the provider-neutral buyer choice derived from handlers such as\n``dev.shopify.card`` or ``ai.firmly.card`` that advertise the generic UCP\ncard instrument. Provider-specific choices retain their own values."},"RegistryPaymentMethodRead":{"properties":{"method":{"$ref":"#/components/schemas/RegistryPaymentMethod"},"label":{"type":"string","title":"Label"},"protocol":{"$ref":"#/components/schemas/RegistryProtocol"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"handler_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Handler Id"},"instruments":{"items":{"$ref":"#/components/schemas/RegistryPaymentInstrument"},"type":"array","title":"Instruments"}},"type":"object","required":["method","label","protocol"],"title":"RegistryPaymentMethodRead","description":"One normalized payment method with its protocol provenance."},"RegistryProtocol":{"type":"string","enum":["mpp","ucp","mcp"],"title":"RegistryProtocol","description":"Protocol surfaces represented by the merchant-level Registry."},"RegistryProtocolDetailRead":{"properties":{"protocol":{"$ref":"#/components/schemas/RegistryProtocol"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version"},"service_url":{"type":"string","title":"Service Url"},"transports":{"items":{"$ref":"#/components/schemas/UcpTransport"},"type":"array","title":"Transports"},"payment_methods":{"items":{"$ref":"#/components/schemas/RegistryPaymentMethodRead"},"type":"array","title":"Payment Methods"},"endpoints":{"items":{"$ref":"#/components/schemas/RegistryEndpointRead"},"type":"array","title":"Endpoints"},"purchasing_exposed":{"type":"boolean","title":"Purchasing Exposed","default":false}},"type":"object","required":["protocol","service_url"],"title":"RegistryProtocolDetailRead","description":"Protocol-specific service metadata attached to one registry entry."},"RegistryProtocolFilter":{"type":"string","enum":["all","mpp","ucp","both"],"title":"RegistryProtocolFilter","description":"Protocol-presence filters supported by the service registry."},"RegistrySampleItemRead":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"price":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/FiatCatalogPriceRead-Output"},{"$ref":"#/components/schemas/TokenCatalogPriceRead"}],"discriminator":{"propertyName":"kind","mapping":{"fiat":"#/components/schemas/FiatCatalogPriceRead-Output","token":"#/components/schemas/TokenCatalogPriceRead"}}},{"type":"null"}],"title":"Price"}},"type":"object","required":["id","title"],"title":"RegistrySampleItemRead","description":"Small catalog-item preview rendered in registry detail."},"RegistrySourceKind":{"type":"string","enum":["mpp_registry","openmerchant_internal","known_mpp","known_ucp"],"title":"RegistrySourceKind","description":"Typed sources contributing merchant-level registry entries."},"RegistrySourceStatusRead":{"properties":{"source":{"$ref":"#/components/schemas/RegistrySourceKind"},"state":{"$ref":"#/components/schemas/CatalogSourceState"},"returned_count":{"type":"integer","minimum":0.0,"title":"Returned Count"},"warning_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Warning Code"},"warning_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Warning Message"}},"type":"object","required":["source","state","returned_count"],"title":"RegistrySourceStatusRead","description":"Availability and contribution metadata for one registry source."},"RentalCarClassPreference":{"type":"string","enum":["economy","compact","midsize","standard","full_size","suv","luxury","van","no_preference"],"title":"RentalCarClassPreference","description":"Preferred rental-car class for ground travel bookings."},"RentalCarTransmissionPreference":{"type":"string","enum":["automatic","manual","no_preference"],"title":"RentalCarTransmissionPreference","description":"Preferred rental-car transmission for ground travel bookings."},"ResourceRule":{"properties":{"id":{"type":"string","maxLength":64,"minLength":1,"title":"Id","description":"Identifier a buyer pins the booking to.","examples":["res_anna"]},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Buyer-facing name of the resource.","examples":["Anna"]}},"additionalProperties":false,"type":"object","required":["id","name"],"title":"ResourceRule","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."},"ScheduledClassBookingConfig-Input":{"properties":{"type":{"type":"string","const":"scheduled_class","title":"Type","default":"scheduled_class"},"timezone":{"type":"string","maxLength":64,"minLength":1,"title":"Timezone"},"party_size":{"$ref":"#/components/schemas/PartySizeRule"},"schedule":{"items":{"$ref":"#/components/schemas/WeeklyOccurrenceRule"},"type":"array","maxItems":21,"title":"Schedule"},"default_capacity":{"type":"integer","maximum":100000.0,"minimum":1.0,"title":"Default Capacity","default":1},"generate_ahead_days":{"type":"integer","maximum":365.0,"minimum":1.0,"title":"Generate Ahead Days","default":30}},"additionalProperties":false,"type":"object","required":["timezone"],"title":"ScheduledClassBookingConfig","description":"Recurrence and capacity template that materializes class occurrences."},"ScheduledClassBookingConfig-Output":{"properties":{"type":{"type":"string","const":"scheduled_class","title":"Type","default":"scheduled_class"},"timezone":{"type":"string","maxLength":64,"minLength":1,"title":"Timezone"},"party_size":{"$ref":"#/components/schemas/PartySizeRule"},"schedule":{"items":{"$ref":"#/components/schemas/WeeklyOccurrenceRule"},"type":"array","maxItems":21,"title":"Schedule"},"default_capacity":{"type":"integer","maximum":100000.0,"minimum":1.0,"title":"Default Capacity","default":1},"generate_ahead_days":{"type":"integer","maximum":365.0,"minimum":1.0,"title":"Generate Ahead Days","default":30}},"additionalProperties":false,"type":"object","required":["timezone"],"title":"ScheduledClassBookingConfig","description":"Recurrence and capacity template that materializes class occurrences."},"ScheduledClassBookingRequest":{"properties":{"type":{"type":"string","const":"scheduled_class","title":"Type","description":"Discriminator selecting the scheduled-class request shape.","default":"scheduled_class"},"occurrence_id":{"type":"string","maxLength":64,"minLength":1,"title":"Occurrence Id","description":"The dated session to reserve, from the availability answer.","examples":["om_agco_7f21"]},"party_size":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Party Size","description":"Seats to reserve on that occurrence.","default":1}},"additionalProperties":false,"type":"object","required":["occurrence_id"],"title":"ScheduledClassBookingRequest","description":"A requested seat count on one existing class occurrence."},"ScheduledClassBookingSnapshot":{"properties":{"type":{"type":"string","const":"scheduled_class","title":"Type","description":"Discriminator selecting the resolved class-reservation shape.","default":"scheduled_class"},"occurrence_id":{"type":"string","maxLength":64,"minLength":1,"title":"Occurrence Id","description":"The reserved session.","examples":["om_agco_7f21"]},"starts_at":{"type":"string","format":"date-time","title":"Starts At","description":"When the session begins. Owned by the occurrence, not the buyer.","examples":["2026-09-01T18:00:00Z"]},"ends_at":{"type":"string","format":"date-time","title":"Ends At","description":"When the session ends.","examples":["2026-09-01T19:00:00Z"]},"party_size":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Party Size","description":"Seats reserved on the occurrence.","default":1},"timezone":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Timezone","description":"IANA timezone the session is scheduled in.","examples":["America/Los_Angeles"]}},"additionalProperties":false,"type":"object","required":["occurrence_id","starts_at","ends_at"],"title":"ScheduledClassBookingSnapshot","description":"A resolved class reservation carrying the occurrence's own times."},"SharedPaymentTokenAuthorizationSource":{"type":"string","enum":["standing_budget","purchase_approval","policy"],"title":"SharedPaymentTokenAuthorizationSource","description":"Budget authority that allowed an SPT reservation."},"SharedPaymentTokenCreateRequest":{"properties":{"seller":{"$ref":"#/components/schemas/SharedPaymentTokenSellerInput"},"usage_limits":{"$ref":"#/components/schemas/SharedPaymentTokenUsageLimitsInput"}},"additionalProperties":false,"type":"object","required":["seller","usage_limits"],"title":"SharedPaymentTokenCreateRequest","description":"Request to reserve budget and issue a seller-scoped Stripe SPT."},"SharedPaymentTokenCreateResponse":{"properties":{"id":{"type":"string","title":"Id"},"payment_method_id":{"type":"string","title":"Payment Method Id"},"status":{"$ref":"#/components/schemas/SharedPaymentTokenStatus"},"authorization_source":{"$ref":"#/components/schemas/SharedPaymentTokenAuthorizationSource"},"seller":{"$ref":"#/components/schemas/SharedPaymentTokenSellerRead"},"usage_limits":{"$ref":"#/components/schemas/SharedPaymentTokenUsageLimitsRead"},"usage_details":{"$ref":"#/components/schemas/SharedPaymentTokenUsageDetailsRead"},"next_action":{"anyOf":[{"$ref":"#/components/schemas/SharedPaymentTokenNextActionRead"},{"type":"null"}]},"deactivation_reason":{"anyOf":[{"$ref":"#/components/schemas/SharedPaymentTokenDeactivationReason"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token","description":"Stripe bearer credential returned only by create and an exact idempotent create replay. It is omitted from refresh and revoke responses."}},"additionalProperties":false,"type":"object","required":["id","payment_method_id","status","authorization_source","seller","usage_limits","usage_details","created_at","updated_at"],"title":"SharedPaymentTokenCreateResponse","description":"Create response, including the bearer SPT only on create/replay."},"SharedPaymentTokenDeactivationReason":{"type":"string","enum":["consumed","expired","resolved","revoked"],"title":"SharedPaymentTokenDeactivationReason","description":"Stripe reasons an issued SPT can become permanently inactive."},"SharedPaymentTokenMccSource":{"type":"string","enum":["stripe_account","merchant_directory","unknown"],"title":"SharedPaymentTokenMccSource","description":"Source used to resolve seller MCC/category policy context."},"SharedPaymentTokenNextActionRead":{"properties":{"type":{"$ref":"#/components/schemas/SharedPaymentTokenNextActionType"},"value":{"type":"string","title":"Value"}},"additionalProperties":false,"type":"object","required":["type","value"],"title":"SharedPaymentTokenNextActionRead","description":"Opaque Stripe.js action required before the token can be used."},"SharedPaymentTokenNextActionType":{"type":"string","enum":["use_stripe_sdk"],"title":"SharedPaymentTokenNextActionType","description":"Client-side action Stripe can require before an SPT becomes active."},"SharedPaymentTokenRead":{"properties":{"id":{"type":"string","title":"Id"},"payment_method_id":{"type":"string","title":"Payment Method Id"},"status":{"$ref":"#/components/schemas/SharedPaymentTokenStatus"},"authorization_source":{"$ref":"#/components/schemas/SharedPaymentTokenAuthorizationSource"},"seller":{"$ref":"#/components/schemas/SharedPaymentTokenSellerRead"},"usage_limits":{"$ref":"#/components/schemas/SharedPaymentTokenUsageLimitsRead"},"usage_details":{"$ref":"#/components/schemas/SharedPaymentTokenUsageDetailsRead"},"next_action":{"anyOf":[{"$ref":"#/components/schemas/SharedPaymentTokenNextActionRead"},{"type":"null"}]},"deactivation_reason":{"anyOf":[{"$ref":"#/components/schemas/SharedPaymentTokenDeactivationReason"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"additionalProperties":false,"type":"object","required":["id","payment_method_id","status","authorization_source","seller","usage_limits","usage_details","created_at","updated_at"],"title":"SharedPaymentTokenRead","description":"Non-bearer SPT state returned by retrieve, refresh, and revoke paths."},"SharedPaymentTokenSellerInput":{"properties":{"type":{"$ref":"#/components/schemas/SharedPaymentTokenSellerType"},"network_business_profile_id":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Network Business Profile Id","description":"Stripe Network Business Profile identifying the seller platform."},"external_id":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"External Id","description":"Stable identifier for the logical seller in that platform's system, usually its merchant id. This is not an MPP request/order externalId."},"agentic_merchant_id":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Agentic Merchant Id"},"www_authenticate":{"anyOf":[{"type":"string","maxLength":16384,"minLength":1},{"type":"null"}],"title":"Www Authenticate","description":"Full MPP WWW-Authenticate header containing a Stripe charge challenge."}},"additionalProperties":false,"type":"object","required":["type"],"title":"SharedPaymentTokenSellerInput","description":"Exactly one supported seller selector for SPT issuance.\n\n``external_id`` is a stable identifier for the *seller* in the caller's\nsystem. An MPP challenge's ``externalId`` instead identifies the request\nor order and is intentionally never forwarded as this Stripe field."},"SharedPaymentTokenSellerRead":{"properties":{"type":{"$ref":"#/components/schemas/SharedPaymentTokenSellerType"},"network_business_profile_id":{"type":"string","title":"Network Business Profile Id"},"external_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Id","description":"Stable logical seller identifier sent as Stripe seller_details.external_id; never the MPP request/order externalId."},"display_name":{"type":"string","title":"Display Name"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain"},"country":{"anyOf":[{"$ref":"#/components/schemas/CountryCode"},{"type":"null"}]},"mcc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mcc"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"mcc_source":{"$ref":"#/components/schemas/SharedPaymentTokenMccSource"}},"additionalProperties":false,"type":"object","required":["type","network_business_profile_id","display_name","mcc_source"],"title":"SharedPaymentTokenSellerRead","description":"Validated seller identity and policy metadata stored on an issuance."},"SharedPaymentTokenSellerType":{"type":"string","enum":["network_business_profile","agentic_merchant","mpp_challenge"],"title":"SharedPaymentTokenSellerType","description":"Supported ways an SPT caller can identify the intended seller."},"SharedPaymentTokenStatus":{"type":"string","enum":["creating","requires_action","active","deactivated","failed"],"title":"SharedPaymentTokenStatus","description":"Local lifecycle for a Stripe Shared Payment Token issuance."},"SharedPaymentTokenUsageDetailsRead":{"properties":{"amount_captured":{"type":"integer","title":"Amount Captured"},"remaining_reservation":{"type":"integer","title":"Remaining Reservation"}},"additionalProperties":false,"type":"object","required":["amount_captured","remaining_reservation"],"title":"SharedPaymentTokenUsageDetailsRead","description":"Cumulative provider usage and still-encumbered local reservation."},"SharedPaymentTokenUsageLimitsInput":{"properties":{"max_amount":{"type":"integer","exclusiveMinimum":0.0,"title":"Max Amount","description":"Maximum capture amount in minor currency units."},"currency":{"$ref":"#/components/schemas/CurrencyCode"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At","description":"Optional expiry; defaults to one hour and cannot exceed one hour from issuance."}},"additionalProperties":false,"type":"object","required":["max_amount","currency"],"title":"SharedPaymentTokenUsageLimitsInput","description":"Amount, currency, and optional expiry limits enforced by Stripe."},"SharedPaymentTokenUsageLimitsRead":{"properties":{"max_amount":{"type":"integer","title":"Max Amount"},"currency":{"$ref":"#/components/schemas/CurrencyCode"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"additionalProperties":false,"type":"object","required":["max_amount","currency","expires_at"],"title":"SharedPaymentTokenUsageLimitsRead","description":"Effective provider usage limits after server-side defaults and clamps."},"StandingBudgetAction":{"type":"string","enum":["create","amend","cancel","verify"],"title":"StandingBudgetAction","description":"Command requested by the public standing-budget endpoint."},"StandingBudgetVerificationChallengeRead":{"properties":{"status":{"$ref":"#/components/schemas/PaymentVerificationChallengeStatus","description":"Current challenge state for the browser ceremony."},"challenge_context":{"additionalProperties":true,"type":"object","title":"Challenge Context","description":"Opaque browser challenge context passed to the payment verification SDK. Clients should not inspect or persist this payload."},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At","description":"Optional provider-supplied expiration time for the challenge."}},"additionalProperties":false,"type":"object","required":["status"],"title":"StandingBudgetVerificationChallengeRead","description":"Browser challenge data for a standing-budget verification ceremony."},"StandingBudgetVerificationInput":{"properties":{"assurance_data":{"anyOf":[{"$ref":"#/components/schemas/PaymentAssuranceData"},{"type":"null"}],"description":"Browser-held proof produced by a passkey or issuer approval ceremony."}},"additionalProperties":false,"type":"object","title":"StandingBudgetVerificationInput","description":"Browser-held proof for verifying a standing budget instruction.\n\nThe provider payment instruction id is intentionally absent from this public\nshape; budget commands derive it from the payment method's current standing\nbudget."},"StayBookingConfig":{"properties":{"type":{"type":"string","const":"stay","title":"Type","default":"stay"},"timezone":{"type":"string","maxLength":64,"minLength":1,"title":"Timezone"},"minimum_nights":{"type":"integer","maximum":365.0,"minimum":1.0,"title":"Minimum Nights","default":1},"maximum_nights":{"type":"integer","maximum":365.0,"minimum":1.0,"title":"Maximum Nights","default":30},"maximum_rooms":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Maximum Rooms","default":4},"max_guests_per_room":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Max Guests Per Room","default":4}},"additionalProperties":false,"type":"object","required":["timezone"],"title":"StayBookingConfig","description":"Stay bounds for one room type; the nightly calendar is data, not config."},"StayBookingRequest":{"properties":{"type":{"type":"string","const":"stay","title":"Type","description":"Discriminator selecting the stay request shape.","default":"stay"},"check_in":{"type":"string","format":"date","title":"Check In","description":"First night of the stay, in the property timezone.","examples":["2026-09-01"]},"check_out":{"type":"string","format":"date","title":"Check Out","description":"Departure day; the night before it is the last one booked.","examples":["2026-09-04"]},"rooms":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Rooms","description":"Rooms to reserve for every night of the range.","default":1},"guests":{"$ref":"#/components/schemas/GuestCounts","description":"Occupancy across those rooms."},"rate_plan_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Rate Plan Id","description":"Optional plan pin; omission fans out over every plan."}},"additionalProperties":false,"type":"object","required":["check_in","check_out"],"title":"StayBookingRequest","description":"A requested date range, room count, and occupancy."},"StayBookingSnapshot":{"properties":{"type":{"type":"string","const":"stay","title":"Type","description":"Discriminator selecting the resolved stay shape.","default":"stay"},"check_in":{"type":"string","format":"date","title":"Check In","description":"First night of the reserved stay.","examples":["2026-09-01"]},"check_out":{"type":"string","format":"date","title":"Check Out","description":"Departure day of the reserved stay.","examples":["2026-09-04"]},"nights":{"type":"integer","maximum":365.0,"minimum":1.0,"title":"Nights","description":"Nights between check-in and check-out; derived, never an input."},"rooms":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Rooms","description":"Rooms reserved for every night of the range.","default":1},"guests":{"$ref":"#/components/schemas/GuestCounts","description":"Occupancy the rate was priced for."},"rate_plan_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Rate Plan Id","description":"Rate plan the stay resolved to.","examples":["rp_flex"]},"timezone":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Timezone","description":"IANA timezone the property calendar is kept in.","examples":["America/Los_Angeles"]}},"additionalProperties":false,"type":"object","required":["check_in","check_out","nights"],"title":"StayBookingSnapshot","description":"A resolved stay: exact dates, rooms, occupancy, and plan."},"StripeCustomerProfileSyncState":{"type":"string","enum":["imported","skipped_incomplete","restricted_incomplete","archived","sync_error","disconnected"],"title":"StripeCustomerProfileSyncState","description":"Current synchronization state of a Stripe customer/profile link."},"StripeCustomerSourceKind":{"type":"string","enum":["customer","account_v2"],"title":"StripeCustomerSourceKind","description":"Stripe object family that is authoritative for one imported profile."},"StripeFxRead":{"properties":{"provider_quote_id":{"type":"string","title":"Provider Quote Id","description":"Exact Stripe FX Quote identifier persisted for payment."},"exchange_rate":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Exchange Rate","description":"Fee-inclusive rate from presentment to settlement currency."},"rate_timestamp":{"type":"string","format":"date-time","title":"Rate Timestamp","description":"Timestamp at which Stripe supplied the exchange rate."},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At","description":"Deadline for using the exact Stripe FX Quote, when binding."},"settlement_currency":{"$ref":"#/components/schemas/CurrencyCode","description":"Seller currency received after Stripe conversion."},"refund_conversion_disclosure":{"type":"string","title":"Refund Conversion Disclosure","description":"Buyer-facing disclosure for cross-currency refunds.","default":"Refunds are issued in the original presentment currency; Stripe uses its refund-time conversion rate for settlement."}},"additionalProperties":false,"type":"object","required":["provider_quote_id","exchange_rate","rate_timestamp","settlement_currency"],"title":"StripeFxRead","description":"Audit metadata for one Stripe FX Quote-backed presentment price."},"StripeSptAuthenticationRead":{"properties":{"issuance_id":{"type":"string","title":"Issuance Id","description":"Opaque OpenMerchant issuance id associated with the paused purchase attempt."},"type":{"$ref":"#/components/schemas/SharedPaymentTokenNextActionType","description":"Stripe client action that must be completed before resuming checkout."},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value","description":"Opaque value passed to the corresponding Stripe.js action. Null means the caller should invoke the approval action so the backend can reconcile provider state."}},"type":"object","required":["issuance_id","type"],"title":"StripeSptAuthenticationRead","description":"Opaque Stripe.js action for authenticating one linked SPT issuance."},"SubtotalType":{"type":"string","enum":["subtotal","items_discount","discount","fulfillment","tax","fee","tip","total"],"title":"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."},"SyntheticRecordSource":{"type":"string","enum":["purchase_attempt_demo_mode","snapshot_demo_mode","test_mode_authorization_decline"],"title":"SyntheticRecordSource","description":"Provenance for rows synthesized without a real merchant order.\n\nPersisted alongside ``is_synthetic`` on purchase attempts and\ntransactions so audit and UI surfaces can distinguish the full local demo\nsimulator, the account-level snapshot-demo flow, and a strictly gated\ntest-mode authorization decline after browser payment submission."},"TaxTreatment":{"type":"string","enum":["itemized","included","not_applicable","mixed","unspecified"],"title":"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."},"TimeZone":{"type":"string","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","description":"IANA timezone identifier used for a profile's default timezone."},"TokenCatalogPriceRangeRead":{"properties":{"min":{"type":"string","title":"Min"},"max":{"type":"string","title":"Max"}},"additionalProperties":false,"type":"object","required":["min","max"],"title":"TokenCatalogPriceRangeRead","description":"Inclusive token bounds represented as lossless decimal strings."},"TokenCatalogPriceRead":{"properties":{"kind":{"type":"string","const":"token","title":"Kind","default":"token"},"asset":{"type":"string","maxLength":120,"minLength":1,"title":"Asset"},"network":{"type":"string","maxLength":120,"minLength":1,"title":"Network"},"decimals":{"type":"integer","maximum":36.0,"minimum":0.0,"title":"Decimals"},"amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Amount"},"range":{"anyOf":[{"$ref":"#/components/schemas/TokenCatalogPriceRangeRead"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["asset","network","decimals"],"title":"TokenCatalogPriceRead","description":"A fixed or ranged token price with explicit network precision."},"TravelLoyaltyProgramCode":{"type":"string","enum":["other","american_aadvantage","united_mileageplus","delta_skymiles","southwest_rapid_rewards","alaska_mileage_plan","jetblue_trueblue","frontier_miles","spirit_free_spirit","air_canada_aeroplan","british_airways_executive_club","virgin_atlantic_flying_club","lufthansa_miles_and_more","air_france_klm_flying_blue","emirates_skywards","qatar_privilege_club","singapore_krisflyer","cathay_asia_miles","qantas_frequent_flyer","ana_mileage_club","jal_mileage_bank","turkish_miles_and_smiles","etihad_guest","marriott_bonvoy","hilton_honors","world_of_hyatt","ihg_one_rewards","wyndham_rewards","choice_privileges","best_western_rewards","accor_live_limitless","radisson_rewards","omni_select_guest","sonesta_travel_pass","leaders_club","hertz_gold_plus_rewards","avis_preferred","budget_fastbreak","enterprise_plus","national_emerald_club","alamo_insiders","sixt_advantage","dollar_express_rewards","thrifty_blue_chip","amtrak_guest_rewards","via_rail_preference","eurostar_club","db_bahnbonus","sncf_grand_voyageur","trenitalia_cartafreccia","uber","lyft","clipper","omny","oyster","suica","royal_caribbean_crown_anchor","carnival_vifp","norwegian_latitudes","princess_captains_circle","celebrity_captains_club","disney_castaway_club","expedia_one_key","booking_genius"],"title":"TravelLoyaltyProgramCode","description":"Known travel loyalty programs plus an escape hatch for unsupported programs."},"TravelLoyaltyProgramType":{"type":"string","enum":["airline","hotel","rail","rental_car","transit","rideshare","cruise","other"],"title":"TravelLoyaltyProgramType","description":"Travel loyalty program category."},"UcpAvailableInstrument":{"properties":{"type":{"type":"string","title":"Type"},"constraints":{"additionalProperties":true,"type":"object","title":"Constraints"}},"additionalProperties":true,"type":"object","required":["type"],"title":"UcpAvailableInstrument","description":"Instrument family a UCP payment handler can accept."},"UcpCapabilityDeclaration":{"properties":{"version":{"type":"string","title":"Version"},"spec":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Spec"},"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"config":{"additionalProperties":true,"type":"object","title":"Config"},"extends":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Extends"},"requires":{"anyOf":[{"$ref":"#/components/schemas/UcpCapabilityRequirements"},{"type":"null"}]}},"additionalProperties":true,"type":"object","required":["version"],"title":"UcpCapabilityDeclaration","description":"One versioned UCP capability or vendor extension declaration."},"UcpCapabilityRequirements":{"properties":{"protocol":{"anyOf":[{"$ref":"#/components/schemas/UcpVersionRequirement"},{"type":"null"}]},"capabilities":{"additionalProperties":{"$ref":"#/components/schemas/UcpVersionRequirement"},"type":"object","title":"Capabilities"}},"additionalProperties":true,"type":"object","title":"UcpCapabilityRequirements","description":"Protocol and parent-capability requirements for one declaration."},"UcpCatalogDistribution":{"type":"string","enum":["open_ucp","shopify_global","google_ucp"],"title":"UcpCatalogDistribution","description":"UCP distribution that supplied a validated catalog listing."},"UcpCatalogListingRead-Input":{"properties":{"id":{"type":"string","title":"Id"},"protocol":{"type":"string","const":"ucp","title":"Protocol","default":"ucp"},"sources":{"items":{"$ref":"#/components/schemas/CatalogSourceKind"},"type":"array","minItems":1,"title":"Sources"},"publication_status":{"$ref":"#/components/schemas/CatalogPublicationStatus"},"url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Url"},"purchasable":{"type":"boolean","title":"Purchasable"},"payment_methods":{"items":{"$ref":"#/components/schemas/CatalogPaymentMethodRead-Input"},"type":"array","title":"Payment Methods"},"distribution":{"$ref":"#/components/schemas/UcpCatalogDistribution"},"ucp_version":{"type":"string","maxLength":64,"minLength":1,"title":"Ucp Version"},"profile_url":{"type":"string","maxLength":2048,"minLength":1,"title":"Profile Url"},"catalog_endpoint":{"type":"string","maxLength":2048,"minLength":1,"title":"Catalog Endpoint"},"product_id":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Product Id"},"merchant_item_id":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Merchant Item Id"},"google_eligibility":{"anyOf":[{"$ref":"#/components/schemas/GoogleCatalogEligibility"},{"type":"null"}]},"payment_handlers":{"items":{"$ref":"#/components/schemas/UcpCatalogPaymentHandlerRead"},"type":"array","title":"Payment Handlers"}},"additionalProperties":false,"type":"object","required":["id","sources","publication_status","purchasable","distribution","ucp_version","profile_url","catalog_endpoint"],"title":"UcpCatalogListingRead","description":"UCP-specific listing returned through the shared catalog interface."},"UcpCatalogListingRead-Output":{"properties":{"id":{"type":"string","title":"Id"},"protocol":{"type":"string","const":"ucp","title":"Protocol","default":"ucp"},"sources":{"items":{"$ref":"#/components/schemas/CatalogSourceKind"},"type":"array","minItems":1,"title":"Sources"},"publication_status":{"$ref":"#/components/schemas/CatalogPublicationStatus"},"url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Url"},"purchasable":{"type":"boolean","title":"Purchasable"},"payment_methods":{"items":{"$ref":"#/components/schemas/CatalogPaymentMethodRead-Output"},"type":"array","title":"Payment Methods"},"distribution":{"$ref":"#/components/schemas/UcpCatalogDistribution"},"ucp_version":{"type":"string","maxLength":64,"minLength":1,"title":"Ucp Version"},"profile_url":{"type":"string","maxLength":2048,"minLength":1,"title":"Profile Url"},"catalog_endpoint":{"type":"string","maxLength":2048,"minLength":1,"title":"Catalog Endpoint"},"product_id":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Product Id"},"merchant_item_id":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Merchant Item Id"},"google_eligibility":{"anyOf":[{"$ref":"#/components/schemas/GoogleCatalogEligibility"},{"type":"null"}]},"payment_handlers":{"items":{"$ref":"#/components/schemas/UcpCatalogPaymentHandlerRead"},"type":"array","title":"Payment Handlers"}},"additionalProperties":false,"type":"object","required":["id","sources","publication_status","purchasable","distribution","ucp_version","profile_url","catalog_endpoint"],"title":"UcpCatalogListingRead","description":"UCP-specific listing returned through the shared catalog interface."},"UcpCatalogPaymentHandlerRead":{"properties":{"kind":{"$ref":"#/components/schemas/UcpPaymentHandlerKind"},"namespace":{"type":"string","maxLength":512,"minLength":1,"title":"Namespace"},"handler_id":{"type":"string","maxLength":512,"minLength":1,"title":"Handler Id"},"version":{"type":"string","maxLength":64,"minLength":1,"title":"Version"},"spec_url":{"anyOf":[{"type":"string","maxLength":2048,"minLength":1},{"type":"null"}],"title":"Spec Url"},"schema_url":{"anyOf":[{"type":"string","maxLength":2048,"minLength":1},{"type":"null"}],"title":"Schema Url"},"available_instrument_types":{"items":{"type":"string"},"type":"array","title":"Available Instrument Types"},"execution_status":{"$ref":"#/components/schemas/CatalogPaymentExecutionStatus"}},"additionalProperties":false,"type":"object","required":["kind","namespace","handler_id","version","execution_status"],"title":"UcpCatalogPaymentHandlerRead","description":"One exact payment-handler declaration from a UCP business profile."},"UcpEcPublicJwk":{"properties":{"kid":{"type":"string","title":"Kid"},"kty":{"type":"string","title":"Kty","default":"EC"},"crv":{"type":"string","title":"Crv","default":"P-256"},"x":{"type":"string","title":"X"},"y":{"type":"string","title":"Y"},"use":{"type":"string","title":"Use","default":"sig"},"alg":{"type":"string","title":"Alg","default":"ES256"}},"type":"object","required":["kid","x","y"],"title":"UcpEcPublicJwk","description":"Public ES256 key published in a UCP profile."},"UcpOrderWebhookReceipt":{"properties":{"received":{"type":"boolean","title":"Received","default":true}},"additionalProperties":false,"type":"object","title":"UcpOrderWebhookReceipt","description":"Minimal acknowledgement returned after durable audit persistence."},"UcpPaymentHandler":{"properties":{"id":{"type":"string","title":"Id"},"version":{"type":"string","title":"Version"},"spec":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Spec"},"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema"},"available_instruments":{"items":{"$ref":"#/components/schemas/UcpAvailableInstrument"},"type":"array","title":"Available Instruments"},"config":{"additionalProperties":true,"type":"object","title":"Config"}},"additionalProperties":true,"type":"object","required":["id","version"],"title":"UcpPaymentHandler","description":"A tokenized payment handler advertised by a UCP participant."},"UcpPaymentHandlerKind":{"type":"string","enum":["apple_pay","firmly_card","google_pay","shopify_card","shop_pay","stripe_payments","stripe_shared_payment_token","amazon_pay","other"],"title":"UcpPaymentHandlerKind","description":"Known UCP payment-handler *families* exposed by catalog discovery.\n\nA family is not an instrument or a namespace. In particular,\n``com.stripe.payments`` is Stripe's unified six-instrument handler; its\nadvertised ``available_instruments`` determine whether card, Link,\nGoogle Pay, Apple Pay, gift card, or store credit is actually available.\nThe older ``com.procurapay.api.stripe_spt`` namespace remains its own\nlegacy family. Exact namespaces, handler ids, and instruments travel\nbeside the family on every catalog row. ``APPLE_PAY`` is retained as a\npresentation kind for historical, non-conforming observations; there is\nno corresponding canonical Apple-authored namespace in\n:class:`UcpKnownPaymentHandlerNamespace`.\n\nAdding a family changes the *current* persisted chat-tool contract and so\nrequires minting a new tool version; committed historical versions pin\ntheir own output shape and are unaffected."},"UcpPaymentHandlerName":{"type":"string","enum":["com.stripe.payments","com.procurapay.api.stripe_spt"],"title":"UcpPaymentHandlerName","description":"Namespaced UCP payment handlers OpenMerchant can execute.\n\n``STRIPE_PAYMENTS`` is Stripe's standard handler\n(https://docs.stripe.com/agentic-commerce/ucp/stripe-payments-handler) and\nis the one to prefer. ``STRIPE_SHARED_PAYMENT_TOKEN`` is the proprietary\nnamespace this platform published before that handler existed; it is\nretained so already-integrated agents keep working while the seller-side\nsurface migrates."},"UcpPlatformProfileDocument":{"properties":{"ucp":{"$ref":"#/components/schemas/UcpProtocolProfile"},"keys":{"items":{"$ref":"#/components/schemas/UcpEcPublicJwk"},"type":"array","title":"Keys"}},"additionalProperties":true,"type":"object","required":["ucp"],"title":"UcpPlatformProfileDocument","description":"Public buyer identity readable by both supported and current verifiers.\n\nAt the first implemented release the profile publishes its keys twice:\nas that release's ``signing_keys`` and as the RFC 7517 ``keys`` array that\nidentity discovery reads regardless of release. Later releases publish\nonly ``keys``. Both come from one list, so rotation cannot diverge them."},"UcpPostalAddress":{"properties":{"extended_address":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Extended Address","description":"Apartment, suite, floor, or other secondary address line.","examples":["Suite 400"]},"street_address":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Street Address","description":"Street number and name.","examples":["811 NW Couch St"]},"address_locality":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Address Locality","description":"City or town.","examples":["Portland"]},"address_region":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Address Region","description":"State, province, or region.","examples":["OR"]},"address_country":{"anyOf":[{"$ref":"#/components/schemas/CountryCode"},{"type":"null"}],"description":"ISO-3166-1 alpha-2 country code."},"postal_code":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Postal Code","description":"Postal or ZIP code.","examples":["97209"]},"first_name":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"First Name","description":"Recipient given name at this address.","examples":["Riley"]},"last_name":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Last Name","description":"Recipient family name at this address.","examples":["Chen"]},"phone_number":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Phone Number","description":"Contact phone for this delivery.","examples":["+15035550123"]}},"additionalProperties":false,"type":"object","title":"UcpPostalAddress","description":"UCP postal address used for shipping and billing destinations."},"UcpProtocolProfile":{"properties":{"version":{"type":"string","title":"Version"},"supported_versions":{"additionalProperties":{"type":"string"},"type":"object","title":"Supported Versions"},"services":{"additionalProperties":{"items":{"$ref":"#/components/schemas/UcpServiceDeclaration"},"type":"array"},"type":"object","title":"Services"},"capabilities":{"additionalProperties":{"items":{"$ref":"#/components/schemas/UcpCapabilityDeclaration"},"type":"array"},"type":"object","title":"Capabilities"},"payment_handlers":{"additionalProperties":{"items":{"$ref":"#/components/schemas/UcpPaymentHandler"},"type":"array"},"type":"object","title":"Payment Handlers"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"additionalProperties":true,"type":"object","required":["version"],"title":"UcpProtocolProfile","description":"The nested ``ucp`` object in a discovery profile or response."},"UcpServiceDeclaration":{"properties":{"version":{"type":"string","title":"Version"},"spec":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Spec"},"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema"},"transport":{"$ref":"#/components/schemas/UcpTransport"},"endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Endpoint"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"config":{"additionalProperties":true,"type":"object","title":"Config"}},"additionalProperties":true,"type":"object","required":["version","transport"],"title":"UcpServiceDeclaration","description":"One transport binding in a UCP business or platform profile."},"UcpShippingDestination":{"properties":{"extended_address":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Extended Address","description":"Apartment, suite, floor, or other secondary address line.","examples":["Suite 400"]},"street_address":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Street Address","description":"Street number and name.","examples":["811 NW Couch St"]},"address_locality":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Address Locality","description":"City or town.","examples":["Portland"]},"address_region":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Address Region","description":"State, province, or region.","examples":["OR"]},"address_country":{"anyOf":[{"$ref":"#/components/schemas/CountryCode"},{"type":"null"}],"description":"ISO-3166-1 alpha-2 country code."},"postal_code":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Postal Code","description":"Postal or ZIP code.","examples":["97209"]},"first_name":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"First Name","description":"Recipient given name at this address.","examples":["Riley"]},"last_name":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Last Name","description":"Recipient family name at this address.","examples":["Chen"]},"phone_number":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Phone Number","description":"Contact phone for this delivery.","examples":["+15035550123"]},"id":{"type":"string","maxLength":64,"title":"Id","description":"Caller-assigned handle for this destination.","examples":["home"]}},"additionalProperties":false,"type":"object","required":["id"],"title":"UcpShippingDestination","description":"Addressable shipping destination selected during checkout."},"UcpStripeSptHandlerSchema":{"properties":{"$schema":{"type":"string","title":"$Schema","default":"https://json-schema.org/draft/2020-12/schema"},"$id":{"type":"string","title":"$Id"},"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description"},"name":{"$ref":"#/components/schemas/UcpPaymentHandlerName","default":"com.procurapay.api.stripe_spt"},"version":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Version"},"$defs":{"additionalProperties":{"$ref":"#/components/schemas/JsonValue"},"type":"object","title":"$Defs"}},"additionalProperties":false,"type":"object","required":["$id","title","description","version","$defs"],"title":"UcpStripeSptHandlerSchema","description":"Published JSON Schema document for OpenMerchant's Stripe SPT handler."},"UcpTransport":{"type":"string","enum":["mcp","rest","a2a","embedded"],"title":"UcpTransport","description":"Transport bindings understood by the UCP discovery client."},"UcpVersionRequirement":{"properties":{"min":{"type":"string","title":"Min"},"max":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Max"}},"additionalProperties":true,"type":"object","required":["min"],"title":"UcpVersionRequirement","description":"Inclusive version range declared by a UCP extension schema."},"V1CatalogAttribution":{"properties":{},"additionalProperties":{"type":"string"},"type":"object","title":"V1CatalogAttribution","description":"Bounded campaign and click attribution accepted by public v1."},"V1CatalogContext":{"properties":{"dev.openmerchant.market":{"anyOf":[{"type":"string","maxLength":32,"minLength":1},{"type":"null"}],"title":"Dev.Openmerchant.Market","description":"Optional merchant-scoped market code."},"address_country":{"anyOf":[{"$ref":"#/components/schemas/CountryCode"},{"type":"null"}],"description":"ISO-3166-1 alpha-2 country the buyer is shopping from."},"address_region":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Address Region","description":"State, province, or region the buyer is shopping from."},"postal_code":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Postal Code","description":"Postal code used for provisional tax and shipping estimates."},"intent":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Intent","description":"Free-form description of the buyer intent."},"language":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Language","description":"BCP-47 language tag for buyer-facing copy."},"currency":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}],"description":"Requested ISO-4217 presentment currency."},"eligibility":{"items":{"type":"string"},"type":"array","maxItems":50,"title":"Eligibility","description":"Provisional, unverified entitlement claims."}},"additionalProperties":{"$ref":"#/components/schemas/JsonValue"},"type":"object","title":"V1CatalogContext","description":"Localization and intent hints accepted by public v1 catalog calls."},"V1CatalogLookupRequest":{"properties":{"ids":{"items":{"type":"string"},"type":"array","maxItems":10,"minItems":1,"title":"Ids","description":"Product, variant, or merchant-native identifiers to resolve. See [UCP supported identifiers](https://ucp.dev/2026-08-25/specification/shopping/catalog/lookup#supported-identifiers)."},"filters":{"anyOf":[{"$ref":"#/components/schemas/V1CatalogSearchFilters"},{"type":"null"}],"description":"Structured constraints applied while resolving identifiers. See [UCP lookup filters](https://ucp.dev/2026-08-25/specification/shopping/catalog/lookup#filters)."},"context":{"anyOf":[{"$ref":"#/components/schemas/V1CatalogContext"},{"type":"null"}],"description":"Localization and buyer-intent hints. See [UCP catalog context](https://ucp.dev/2026-08-25/specification/shopping/catalog#context)."},"signals":{"anyOf":[{"$ref":"#/components/schemas/V1CatalogSignals"},{"type":"null"}],"description":"Platform-observed routing and risk signals. See [UCP catalog signals](https://ucp.dev/2026-08-25/specification/shopping/catalog#signals)."},"attribution":{"anyOf":[{"$ref":"#/components/schemas/V1CatalogAttribution"},{"type":"null"}],"description":"Referral and campaign attribution. See [UCP catalog attribution](https://ucp.dev/2026-08-25/specification/shopping/catalog#attribution)."},"merchant":{"$ref":"#/components/schemas/V1CatalogMerchantSelector"}},"additionalProperties":false,"type":"object","required":["ids","merchant"],"title":"V1CatalogLookupRequest","description":"Body for ``POST /v1/catalog/lookup``."},"V1CatalogLookupResponse":{"properties":{"messages":{"items":{"$ref":"#/components/schemas/CatalogOperationMessage"},"type":"array","title":"Messages","description":"Informational and warning messages produced by the operation."},"analytics":{"anyOf":[{"$ref":"#/components/schemas/CatalogResponseAnalytics"},{"type":"null"}],"description":"Fresh correlation data for downstream commerce analytics."},"version":{"type":"integer","title":"Version","default":1},"mode":{"$ref":"#/components/schemas/ModeValue"},"items":{"items":{"$ref":"#/components/schemas/CatalogItemRead-Output"},"type":"array","title":"Items"},"correlations":{"items":{"$ref":"#/components/schemas/CatalogLookupCorrelation"},"type":"array","title":"Correlations"},"missing_ids":{"items":{"type":"string"},"type":"array","title":"Missing Ids"},"sources":{"items":{"$ref":"#/components/schemas/CatalogSourceStatusRead"},"type":"array","title":"Sources"}},"additionalProperties":false,"type":"object","required":["mode","items"],"title":"V1CatalogLookupResponse","description":"Partial-success normalized response from v1 exact lookup."},"V1CatalogMerchantSelector":{"properties":{"id":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Id","description":"Published internal OpenMerchant merchant id."},"domain":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Domain","description":"Public merchant hostname or HTTPS origin. Published internal merchants take precedence over the domain's public UCP catalog."},"slug":{"anyOf":[{"type":"string","maxLength":120,"minLength":1,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,118}[a-z0-9])?$"},{"type":"null"}],"title":"Slug","description":"Published internal OpenMerchant merchant slug."}},"additionalProperties":false,"type":"object","title":"V1CatalogMerchantSelector","description":"Exactly one merchant id, public domain, or OpenMerchant slug."},"V1CatalogPaginationRequest":{"properties":{"cursor":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Cursor","description":"Opaque cursor returned by the preceding search page."},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","default":24}},"additionalProperties":false,"type":"object","title":"V1CatalogPaginationRequest","description":"Public-v1 cursor pagination, defaulting to 24 normalized products."},"V1CatalogPaginationResponse":{"properties":{"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor","description":"Opaque cursor for the next page, or null at the end."},"has_next_page":{"type":"boolean","title":"Has Next Page","description":"Whether another page can be requested with this cursor."},"total_count":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Total Count"}},"additionalProperties":false,"type":"object","required":["has_next_page"],"title":"V1CatalogPaginationResponse","description":"Opaque public-v1 cursor state with a known normalized result total."},"V1CatalogProductRequest":{"properties":{"id":{"type":"string","maxLength":2048,"minLength":1,"title":"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"]},"selected":{"items":{"$ref":"#/components/schemas/V1CatalogSelectedOption"},"type":"array","maxItems":100,"title":"Selected","description":"Finite option values requested by the buyer. See [UCP option selection](https://ucp.dev/2026-08-25/specification/shopping/catalog/lookup#option-selection)."},"preferences":{"items":{"type":"string"},"type":"array","maxItems":100,"title":"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"]]},"filters":{"anyOf":[{"$ref":"#/components/schemas/V1CatalogSearchFilters"},{"type":"null"}],"description":"Structured constraints applied while resolving the product. See [UCP lookup filters](https://ucp.dev/2026-08-25/specification/shopping/catalog/lookup#filters)."},"context":{"anyOf":[{"$ref":"#/components/schemas/V1CatalogContext"},{"type":"null"}],"description":"Localization and buyer-intent hints. See [UCP catalog context](https://ucp.dev/2026-08-25/specification/shopping/catalog#context)."},"signals":{"anyOf":[{"$ref":"#/components/schemas/V1CatalogSignals"},{"type":"null"}],"description":"Platform-observed routing and risk signals. See [UCP catalog signals](https://ucp.dev/2026-08-25/specification/shopping/catalog#signals)."},"attribution":{"anyOf":[{"$ref":"#/components/schemas/V1CatalogAttribution"},{"type":"null"}],"description":"Referral and campaign attribution. See [UCP catalog attribution](https://ucp.dev/2026-08-25/specification/shopping/catalog#attribution)."},"merchant":{"$ref":"#/components/schemas/V1CatalogMerchantSelector"}},"additionalProperties":false,"type":"object","required":["id","merchant"],"title":"V1CatalogProductRequest","description":"Body for ``POST /v1/catalog/product``."},"V1CatalogProductResponse":{"properties":{"messages":{"items":{"$ref":"#/components/schemas/CatalogOperationMessage"},"type":"array","title":"Messages","description":"Informational and warning messages produced by the operation."},"analytics":{"anyOf":[{"$ref":"#/components/schemas/CatalogResponseAnalytics"},{"type":"null"}],"description":"Fresh correlation data for downstream commerce analytics."},"version":{"type":"integer","title":"Version","default":1},"mode":{"$ref":"#/components/schemas/ModeValue"},"product":{"$ref":"#/components/schemas/CatalogItemRead-Output"},"sources":{"items":{"$ref":"#/components/schemas/CatalogSourceStatusRead"},"type":"array","title":"Sources"}},"additionalProperties":false,"type":"object","required":["mode","product"],"title":"V1CatalogProductResponse","description":"Normalized response from the v1 product-detail operation."},"V1CatalogSearchFilters":{"properties":{"categories":{"items":{"type":"string"},"type":"array","maxItems":100,"title":"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"]]},"price":{"anyOf":[{"$ref":"#/components/schemas/CatalogPriceFilterBase"},{"type":"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)."},"protocol":{"items":{"$ref":"#/components/schemas/CatalogProtocol"},"type":"array","maxItems":10,"title":"Protocol"},"subcategory":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Subcategory"},"payment_method":{"items":{"$ref":"#/components/schemas/RegistryPaymentMethodFilter"},"type":"array","maxItems":20,"title":"Payment Method"},"payment_instrument":{"items":{"$ref":"#/components/schemas/RegistryPaymentInstrument"},"type":"array","maxItems":30,"title":"Payment Instrument"},"purchasable_only":{"type":"boolean","title":"Purchasable Only","default":false}},"additionalProperties":false,"type":"object","title":"V1CatalogSearchFilters","description":"UCP filters plus OpenMerchant's normalized discovery filters."},"V1CatalogSearchRequest-Input":{"properties":{"query":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Query","description":"Optional natural-language or keyword catalog query.","examples":["single-origin coffee"]},"context":{"anyOf":[{"$ref":"#/components/schemas/V1CatalogContext"},{"type":"null"}],"description":"Localization and buyer-intent hints. See [UCP catalog context](https://ucp.dev/2026-08-25/specification/shopping/catalog#context)."},"signals":{"anyOf":[{"$ref":"#/components/schemas/V1CatalogSignals"},{"type":"null"}],"description":"Platform-observed routing and risk signals. See [UCP catalog signals](https://ucp.dev/2026-08-25/specification/shopping/catalog#signals)."},"attribution":{"anyOf":[{"$ref":"#/components/schemas/V1CatalogAttribution"},{"type":"null"}],"description":"Referral and campaign attribution. See [UCP catalog attribution](https://ucp.dev/2026-08-25/specification/shopping/catalog#attribution)."},"filters":{"anyOf":[{"$ref":"#/components/schemas/V1CatalogSearchFilters"},{"type":"null"}],"description":"Structured constraints applied to matching catalog rows. See [UCP search filters](https://ucp.dev/2026-08-25/specification/shopping/catalog/search#search-filters)."},"pagination":{"anyOf":[{"$ref":"#/components/schemas/V1CatalogPaginationRequest"},{"type":"null"}],"description":"Cursor and page-size controls. See [UCP pagination](https://ucp.dev/2026-08-25/specification/shopping/catalog/search#pagination)."},"merchant":{"anyOf":[{"$ref":"#/components/schemas/V1CatalogMerchantSelector"},{"type":"null"}],"description":"Optional exact merchant authority for a scoped search."}},"additionalProperties":false,"type":"object","title":"V1CatalogSearchRequest","description":"Body for ``POST /v1/catalog``."},"V1CatalogSearchRequest-Output":{"properties":{"query":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Query","description":"Optional natural-language or keyword catalog query.","examples":["single-origin coffee"]},"context":{"anyOf":[{"$ref":"#/components/schemas/V1CatalogContext"},{"type":"null"}],"description":"Localization and buyer-intent hints. See [UCP catalog context](https://ucp.dev/2026-08-25/specification/shopping/catalog#context)."},"signals":{"anyOf":[{"$ref":"#/components/schemas/V1CatalogSignals"},{"type":"null"}],"description":"Platform-observed routing and risk signals. See [UCP catalog signals](https://ucp.dev/2026-08-25/specification/shopping/catalog#signals)."},"attribution":{"anyOf":[{"$ref":"#/components/schemas/V1CatalogAttribution"},{"type":"null"}],"description":"Referral and campaign attribution. See [UCP catalog attribution](https://ucp.dev/2026-08-25/specification/shopping/catalog#attribution)."},"filters":{"anyOf":[{"$ref":"#/components/schemas/V1CatalogSearchFilters"},{"type":"null"}],"description":"Structured constraints applied to matching catalog rows. See [UCP search filters](https://ucp.dev/2026-08-25/specification/shopping/catalog/search#search-filters)."},"pagination":{"anyOf":[{"$ref":"#/components/schemas/V1CatalogPaginationRequest"},{"type":"null"}],"description":"Cursor and page-size controls. See [UCP pagination](https://ucp.dev/2026-08-25/specification/shopping/catalog/search#pagination)."},"merchant":{"anyOf":[{"$ref":"#/components/schemas/V1CatalogMerchantSelector"},{"type":"null"}],"description":"Optional exact merchant authority for a scoped search."}},"additionalProperties":false,"type":"object","title":"V1CatalogSearchRequest","description":"Body for ``POST /v1/catalog``."},"V1CatalogSearchResponse-Input":{"properties":{"messages":{"items":{"$ref":"#/components/schemas/CatalogOperationMessage"},"type":"array","title":"Messages","description":"Informational and warning messages produced by the operation."},"analytics":{"anyOf":[{"$ref":"#/components/schemas/CatalogResponseAnalytics"},{"type":"null"}],"description":"Fresh correlation data for downstream commerce analytics."},"pagination":{"$ref":"#/components/schemas/V1CatalogPaginationResponse"},"version":{"type":"integer","title":"Version","default":1},"mode":{"$ref":"#/components/schemas/ModeValue"},"locale":{"anyOf":[{"$ref":"#/components/schemas/LocaleCode"},{"type":"null"}]},"items":{"items":{"$ref":"#/components/schemas/CatalogItemRead-Input"},"type":"array","title":"Items"},"returned_count":{"type":"integer","minimum":0.0,"title":"Returned Count"},"exhaustive":{"type":"boolean","title":"Exhaustive"},"sources":{"items":{"$ref":"#/components/schemas/CatalogSourceStatusRead"},"type":"array","title":"Sources"}},"additionalProperties":false,"type":"object","required":["pagination","mode","items","returned_count","exhaustive","sources"],"title":"V1CatalogSearchResponse"},"V1CatalogSelectedOption":{"properties":{"name":{"type":"string","maxLength":120,"minLength":1,"title":"Name","description":"Name of the product option axis being selected.","examples":["Size"]},"id":{"anyOf":[{"type":"string","maxLength":512,"minLength":1},{"type":"null"}],"title":"Id","description":"Optional merchant identifier for the selected option value.","examples":["om_agov_large"]},"label":{"type":"string","maxLength":255,"minLength":1,"title":"Label","description":"Buyer-facing label of the selected option value.","examples":["Large"]}},"additionalProperties":false,"type":"object","required":["name","label"],"title":"V1CatalogSelectedOption","description":"One option choice used to resolve a v1 product variant."},"V1CatalogSignals":{"properties":{"dev.ucp.buyer_ip":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Dev.Ucp.Buyer Ip","description":"Buyer IP forwarded for fraud and coarse geo decisions."},"dev.ucp.user_agent":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Dev.Ucp.User Agent","description":"Buyer user-agent forwarded for fraud decisions."}},"additionalProperties":{"$ref":"#/components/schemas/JsonValue"},"type":"object","title":"V1CatalogSignals","description":"Risk and routing signals accepted by public v1 catalog calls."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WeekdayCode":{"type":"string","enum":["mo","tu","we","th","fr","sa","su"],"title":"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``."},"WeeklyOccurrenceRule":{"properties":{"days":{"items":{"$ref":"#/components/schemas/WeekdayCode"},"type":"array","maxItems":7,"minItems":1,"title":"Days"},"start_local":{"type":"string","format":"time","title":"Start Local"},"duration_minutes":{"type":"integer","maximum":1440.0,"minimum":1.0,"title":"Duration Minutes"},"capacity":{"anyOf":[{"type":"integer","maximum":100000.0,"minimum":1.0},{"type":"null"}],"title":"Capacity","description":"Per-rule capacity override; falls back to default_capacity."}},"additionalProperties":false,"type":"object","required":["days","start_local","duration_minutes"],"title":"WeeklyOccurrenceRule","description":"One recurring class session: weekdays, local start, and length.\n\nThis is the ClassSchedule layer — the materializer expands it into\ndated occurrence rows with their own capacity."},"WeeklyWindow":{"properties":{"days":{"items":{"$ref":"#/components/schemas/WeekdayCode"},"type":"array","maxItems":7,"minItems":1,"title":"Days"},"start_local":{"type":"string","format":"time","title":"Start Local"},"end_local":{"type":"string","format":"time","title":"End Local"}},"additionalProperties":false,"type":"object","required":["days","start_local","end_local"],"title":"WeeklyWindow","description":"A recurring local-time window on one or more weekdays.\n\nTimes are merchant-local wall clock (resolved against the config's\n``timezone``), never UTC — \"we open at 9\" must survive a DST shift."},"app__enums__PurchaseIntentPaymentActionKind":{"type":"string","enum":["payment_method_selection","agentic_instruction_verification","cvc_reentry","stripe_spt_authentication"],"title":"PurchaseIntentPaymentActionKind","description":"User payment action required before a purchase intent can execute."},"app__integrations__browser__browser_clients__types__PurchaseFailureReason":{"type":"string","enum":["timeout","requires_auth","requires_otp","merchant_account_required","merchant_identity_link_required","requires_payment_action","out_of_stock","payment_declined","captcha","navigation_failed","unsupported_payment","cart_not_updated","form_validation_error","quantity_not_set","provider_error","provider_unavailable","price_changed","item_price_exceeded","item_price_unavailable","payment_form_not_found","submit_button_disabled","card_fill_failed","order_total_unavailable","fulfillment_method_unavailable","fulfillment_time_unavailable","browser_use_session_failed","browser_infra_unavailable","cost_kill_switch","llm_navigation_failed","merchant_unavailable","merchant_auth_timeout","merchant_auth_invalid_credentials","merchant_auth_challenge_required","merchant_otp_invalid_code","merchant_otp_timeout","protocol_state_uncertain","payment_outcome_uncertain","payment_submission_persistence_failed","unknown"],"title":"PurchaseFailureReason","description":"Classifies why a purchase attempt failed."},"app__schemas__chat__public_chat__PurchaseFailureReason":{"type":"string","enum":["timeout","requires_auth","requires_otp","merchant_account_required","requires_payment_action","out_of_stock","payment_declined","captcha","navigation_failed","unsupported_payment","cart_not_updated","form_validation_error","quantity_not_set","provider_error","provider_unavailable","price_changed","item_price_exceeded","item_price_unavailable","payment_form_not_found","submit_button_disabled","card_fill_failed","order_total_unavailable","fulfillment_method_unavailable","fulfillment_time_unavailable","browser_use_session_failed","browser_infra_unavailable","cost_kill_switch","llm_navigation_failed","merchant_unavailable","merchant_auth_timeout","merchant_auth_invalid_credentials","merchant_auth_challenge_required","merchant_otp_invalid_code","merchant_otp_timeout","protocol_state_uncertain","payment_outcome_uncertain","payment_submission_persistence_failed","unknown"],"title":"PurchaseFailureReason","description":"Frozen failure vocabulary used by persisted chat-tool V1/V2 rows.\n\nThe live purchase enum can grow as execution adds resumable states. These\nhistorical contracts cannot: their JSON Schema fingerprint is immutable.\n``_missing_`` accepts the new identity-link pause at runtime so a V2 row\nwritten during a rolling deploy remains readable until it is upcast, while\nthe committed historical schema remains byte-for-byte stable."},"app__schemas__chat__public_chat__PurchaseIntentPaymentActionKind":{"type":"string","enum":["agentic_instruction_verification","cvc_reentry","stripe_spt_authentication"],"title":"PurchaseIntentPaymentActionKind","description":"Frozen payment actions supported by pre-catalog transcript rows."},"app__schemas__chat__public_chat__V1CatalogSearchResponse-Output":{"properties":{"messages":{"items":{"$ref":"#/components/schemas/CatalogOperationMessage"},"type":"array","title":"Messages","description":"Informational and warning messages produced by the operation."},"analytics":{"anyOf":[{"$ref":"#/components/schemas/CatalogResponseAnalytics"},{"type":"null"}],"description":"Fresh correlation data for downstream commerce analytics."},"pagination":{"$ref":"#/components/schemas/V1CatalogPaginationResponse"},"version":{"type":"integer","title":"Version","default":1},"mode":{"$ref":"#/components/schemas/ModeValue"},"locale":{"anyOf":[{"$ref":"#/components/schemas/LocaleCode"},{"type":"null"}]},"items":{"items":{"$ref":"#/components/schemas/CatalogItemRead-Output"},"type":"array","title":"Items"},"returned_count":{"type":"integer","minimum":0.0,"title":"Returned Count"},"exhaustive":{"type":"boolean","title":"Exhaustive"},"sources":{"items":{"$ref":"#/components/schemas/CatalogSourceStatusRead"},"type":"array","title":"Sources"}},"additionalProperties":false,"type":"object","required":["pagination","mode","items","returned_count","exhaustive","sources"],"title":"V1CatalogSearchResponse"},"app__schemas__purchasing__purchase_attempt__PurchaseTimelineEvent":{"properties":{"label":{"type":"string","title":"Label"},"status":{"type":"string","enum":["queued","running","done","failed","skipped"],"title":"Status"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"At"},"protocol":{"anyOf":[{"$ref":"#/components/schemas/PurchaseProtocol"},{"type":"null"}]},"step_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Step Key"},"phase":{"anyOf":[{"$ref":"#/components/schemas/CheckoutPhase"},{"type":"null"}]}},"type":"object","required":["label","status"],"title":"PurchaseTimelineEvent","description":"One row in a purchase attempt's live checkout timeline.\n\nStatuses:\n- ``queued`` — waiting on the process-wide ``execute_purchase`` semaphore\n  (multi-item bulk-approve fan-out staged this row but a slot isn't free)\n- ``running`` — actively executing checkout\n- ``done`` — terminal success\n- ``failed`` — terminal failure\n- ``skipped`` — a step the checkout flow determined was not applicable\n  (e.g. a payment step on a $0/free-trial flow). Terminal, not in-flight."},"app__schemas__purchasing__purchase_intent__PurchaseTimelineEvent":{"properties":{"label":{"type":"string","title":"Label"},"status":{"type":"string","title":"Status"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"},"at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"At"},"protocol":{"anyOf":[{"$ref":"#/components/schemas/PurchaseProtocol"},{"type":"null"}]},"step_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Step Key"},"phase":{"anyOf":[{"$ref":"#/components/schemas/CheckoutPhase"},{"type":"null"}]}},"type":"object","required":["label","status"],"title":"PurchaseTimelineEvent"},"app__schemas__sourcing__public_catalog_v1__V1CatalogSearchResponse":{"properties":{"messages":{"items":{"$ref":"#/components/schemas/CatalogOperationMessage"},"type":"array","title":"Messages","description":"Informational and warning messages produced by the operation."},"analytics":{"anyOf":[{"$ref":"#/components/schemas/CatalogResponseAnalytics"},{"type":"null"}],"description":"Fresh correlation data for downstream commerce analytics."},"pagination":{"$ref":"#/components/schemas/V1CatalogPaginationResponse"},"version":{"type":"integer","title":"Version","default":1},"mode":{"$ref":"#/components/schemas/ModeValue"},"locale":{"anyOf":[{"$ref":"#/components/schemas/LocaleCode"},{"type":"null"}]},"items":{"items":{"$ref":"#/components/schemas/CatalogItemRead-Output"},"type":"array","title":"Items"},"returned_count":{"type":"integer","minimum":0.0,"title":"Returned Count"},"exhaustive":{"type":"boolean","title":"Exhaustive"},"sources":{"items":{"$ref":"#/components/schemas/CatalogSourceStatusRead"},"type":"array","title":"Sources"}},"additionalProperties":false,"type":"object","required":["pagination","mode","items","returned_count","exhaustive","sources"],"title":"V1CatalogSearchResponse","description":"Normalized response from ``POST /v1/catalog``."},"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"},"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"},"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"},"AgenticOrderCancellationReason":{"description":"Why a hosted merchant order was canceled (merchant decline / ops).","enum":["merchant_canceled","confirmation_timeout"],"title":"AgenticOrderCancellationReason","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"},"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"},"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"},"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"},"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"},"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"}},"securitySchemes":{"ApiKeyBearer":{"type":"http","scheme":"bearer","description":"OpenMerchant API key using the pr_sk_test_* or pr_sk_live_* format. Profile-scoped routes under /v1/profiles/{profile_id} also accept a pr_psess_* profile session, which is confined to that one profile and to the actions its session grants."}}},"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"}},"tags":["webhooks"]}},"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"}},"tags":["webhooks"]}},"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"}},"tags":["webhooks"]}},"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"}},"tags":["webhooks"]}},"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."}},"tags":["webhooks"]}},"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."}},"tags":["webhooks"]}},"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."}},"tags":["webhooks"]}},"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."}},"tags":["webhooks"]}},"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."}},"tags":["webhooks"]}},"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."}},"tags":["webhooks"]}},"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."}},"tags":["webhooks"]}},"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."}},"tags":["webhooks"]}},"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."}},"tags":["webhooks"]}},"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."}},"tags":["webhooks"]}}},"servers":[{"url":"https://api.openmerchant.dev","description":"Production API"},{"url":"https://api.staging.openmerchant.dev","description":"Staging / preview API"},{"url":"http://127.0.0.1:8000","description":"Local development server"}],"tags":[{"name":"merchant-integration-guide","x-displayName":"Merchant integration guide","description":"Connect your backend to OpenMerchant to price quote requests and confirm or reject orders. Start with a test-mode merchant, a catalog item and variant, and a test secret API key from the dashboard.\n\nBuilding an agent that buys for customers? See the [Buyer integration guide](#tag/integration-guide) under Purchasing.\n\n## 1. Read requirements and create a destination\n\nCall `GET /v1/merchant` with `Authorization: Bearer <your secret API key>`. It returns merchant setup requirements, blockers, and existing verification results without starting checks. The key selects the account and mode; `X-Mode` cannot switch a test key to live.\n\nCreate an HTTPS destination using `POST /v1/merchant/destinations`:\n\n```json\n{\n  \"name\": \"Merchant backend\",\n  \"responds_to_quotes\": true,\n  \"event_types\": [\"quote.requested\", \"order.requested\", \"order.confirmed\", \"order.rejected\"],\n  \"webhook\": {\"endpoint_url\": \"https://merchant.example/webhooks/openmerchant\"}\n}\n```\n\nStore the returned `secret.secret` in your backend's environment. Normal destination reads contain only a secret prefix. Create and rotate operations return secret material; keep it out of prompts, browser code, and logs.\n\nOnly one destination can be the designated quote responder per merchant and mode. Order-response authority follows from subscribing to all three order lifecycle events above. This setup does not require a decision connection.\n\n## 2. Verify incoming deliveries\n\nOpenMerchant POSTs the event envelope to your endpoint. Verify the exact raw request bytes before parsing JSON.\n\n| Header | Purpose |\n| --- | --- |\n| `OpenMerchant-Signature` | Timestamped HMAC-SHA256 delivery signature. |\n| `OpenMerchant-Webhook-Id` | Immutable event ID for correlation and duplicate detection. |\n| `OpenMerchant-Webhook-Event` | Event type, matching the envelope's `type`. |\n| `OpenMerchant-Destination-Id` | Destination authorized for this delivery. |\n| `OpenMerchant-Response-Url` | URL for a separate business-response POST, when this destination may respond. |\n\nThe signature format is `t=<epoch>,v1=<digest>`. Sign the timestamp, a period, and the raw body bytes using the destination secret. Reject timestamps more than 60 seconds from the current time and use constant-time digest comparison. During the 24-hour rotation overlap, a header can include multiple `v1` digests; either current or previous valid secret may match.\n\nReturn **2xx to acknowledge delivery** after durably accepting the event. The acknowledgement body is not a quote or order decision. Start processing promptly: quote responses have a 10-second window. Orders must still be awaiting merchant confirmation when answered; inspect the order after any ambiguous response or timeout.\n\n## 3. Submit a signed business response\n\nSerialize JSON once and retain those exact bytes for retries. Generate a fresh response signature for each attempt:\n\n```python\nimport hashlib\nimport hmac\nimport time\n\n\ndef response_signature(raw_body: bytes, secret: str) -> str:\n    \"\"\"Sign the exact JSON bytes sent to OpenMerchant.\"\"\"\n    timestamp: int = int(time.time())\n    signed_body: bytes = str(timestamp).encode('ascii') + b'.' + raw_body\n    digest: str = hmac.new(\n        secret.encode('utf-8'), signed_body, hashlib.sha256\n    ).hexdigest()\n    return f't={timestamp},v1={digest}'\n```\n\nPOST those bytes as `application/json` to the received `OpenMerchant-Response-Url`. Send `OpenMerchant-Response-Signature` and echo `OpenMerchant-Destination-Id`, `OpenMerchant-Webhook-Id`, and `OpenMerchant-Webhook-Event`. Response signatures have a 60-second tolerance.\n\nUse your configured OpenMerchant API origin to validate the response URL before sending credentials. Check the expected quote or order path and the identifier in the signed envelope. Do not follow redirects when posting a response.\n\nA signed receiver needs only its destination secret. A server using a merchant secret API key can also use the same `/respond` endpoints; API-key quote bodies use `outcome` and `offers`, as documented in the operation reference.\n\n## 4. Accept or decline a quote\n\nOn `quote.requested`, read price and availability from your own system. Copy `event_id` from the envelope's `id` and `quote_id` from `data.quote.id`. Return a future expiry you can honor. Quoting availability does not reserve inventory.\n\nFor a request naming one catalog item and variant, this signed response offers two units for a complete total of USD 50.00. `quoted_amount_cents` is the complete quoted total in minor units in the merchant currency. Bookings additionally require the exact resolved `booking_snapshot`.\n\n```json\n{\n  \"event_id\": \"om_agev_quote_example\",\n  \"event_type\": \"quote.requested\",\n  \"quote_id\": \"om_agq_example\",\n  \"decision\": \"accepted\",\n  \"quoted_amount_cents\": 5000,\n  \"currency\": \"USD\",\n  \"expires_at\": \"2030-01-01T00:15:00Z\",\n  \"available_quantity\": 2\n}\n```\n\nA signed quote response returns an acknowledgement:\n\n```json\n{\n  \"event_id\": \"om_agev_quote_example\",\n  \"event_type\": \"quote.requested\",\n  \"target_id\": \"om_agq_example\",\n  \"duplicate\": false\n}\n```\n\nIf unavailable, decline with an optional explanation and omit price, expiry, quantity, and booking fields:\n\n```json\n{\n  \"event_id\": \"om_agev_quote_example\",\n  \"event_type\": \"quote.requested\",\n  \"quote_id\": \"om_agq_example\",\n  \"decision\": \"declined\",\n  \"message\": \"The requested quantity is unavailable.\"\n}\n```\n\nFor alternatives or a complete subtotal ledger, use the full offer format in [Resolve a pending merchant quote](#tag/merchant/operation/v1_respond_to_merchant_quote).\n\nA buyer may propose a price. When they do, `data.quote.price_proposal` carries `{ \"unit_amount\": 1600, \"currency\": \"USD\" }`: a price for one unit, in your market's currency, before fulfillment and tax. It is yours to accept, counter, or ignore, and you answer it with the price you quote; nothing else is needed. It is repeated on every refresh of that quote, so the same proposal can be answered the same way. The buyer sees `negotiation.outcome: \"forwarded\"` and pays the price your offer states, never the price they proposed.\n\n## 5. Confirm or reject an order\n\nOn an authorized `order.requested` delivery, check the order and its lines against your inventory or booking system. Persist an idempotent reservation/fulfillment decision before replying. A confirmation authorizes OpenMerchant to settle the order and capture its payment; only confirm what you can fulfill.\n\n```json\n{\n  \"outcome\": \"confirmed\",\n  \"reservation_reference\": \"RES-88213\",\n  \"confirmation_reference\": \"SO-10045\"\n}\n```\n\nIf you cannot fulfill it, reject:\n\n```json\n{\n  \"outcome\": \"rejected\",\n  \"note\": \"The requested inventory is no longer available.\"\n}\n```\n\nThese standard signed order responses return the **updated order**, just like API-key order responses. They omit the connector-specific `decision` object. Treat `order.confirmed` and `order.rejected` as informational lifecycle updates and acknowledge them without posting another business response.\n\nThe [order response reference](#tag/merchant/operation/v1_respond_to_merchant_order) describes per-line availability and optional repricing. `subtotal_amount_cents` is the merchandise subtotal before OpenMerchant recomputes tax. It differs from the quote's complete total. Increasing the total above the buyer's authorization or changing currency requires a new authorization; reject rather than attempting to charge more.\n\n## 6. Verify and diagnose\n\n- `POST /v1/merchant/destinations/{destination_id}/test` checks signed delivery only. It is available in test and live mode and creates no purchase.\n- `POST /v1/merchant/integration_checks` with `kind: \"quote\"`, `destination_id`, and a `quote_request` using the quote-create schema sends a real test-mode quote to your responder, bypassing cached answers. It creates no order or payment.\n- To verify orders, explicitly run a test-mode buyer/payment flow, then start an integration check with `kind: \"order\"`, `destination_id`, and its `order_id`. A passing result requires a signed response from that destination and captured test payment. The check itself never creates orders or moves money.\n- Poll `GET /v1/merchant/integration_checks/{check_id}`. `GET /v1/merchant` shows the latest checks and separates configuration, delivery, quote responses, and order responses. Configuration changes make old evidence stale.\n- Inspect `GET /v1/merchant/destinations/{destination_id}/events` and `/events/{event_id}`. Each response includes only that destination's delivery history.\n- Persist responses by destination and event ID. Exact signed quote retries return `duplicate: true`; exact standard order retries return the current order. A different body for an accepted event returns `409`. Regenerate the signature timestamp while keeping the response body identical.\n- After an uncertain timeout, read the quote/order before doing inventory or fulfillment work again. Do not turn a transport retry into a second reservation or order.\n\n| Symptom | Check |\n| --- | --- |\n| Delivery succeeds but the buyer waits | Submit the separate response; check responder authority and the quote deadline/order state. |\n| Response returns `401` or `403` | Verify the destination, raw bytes, timestamp, echoed event headers, and signing secret. |\n| Response returns `422` | Compare the response with the documented schema and required fields. |\n| Response returns `409` | Inspect current state; the event may already have an accepted response or the quote may have expired. |\n| Order confirmation fails | Inspect payment and order state before retrying; confirmation can trigger capture. |\n\nUse the [integration kit](https://github.com/openmerchants/openmerchant-integrations) for copyable prompts, skills, TypeScript/Python responders, and the CLI. Keep credentials in environment variables or your secret store.\n"},{"name":"integration-guide","x-displayName":"Buyer integration guide","description":"This buyer-side walkthrough covers an end-to-end test-mode purchase: create a profile, attach a payment method tokenized through an OpenMerchant Element, create a PurchaseIntent, approve it, and confirm the purchase succeeded. The example payloads below are illustrative — copy them into your own client to try the flow against the test environment.\n\nFor merchant-side pricing and fulfillment, see the [Merchant integration guide](#tag/merchant-integration-guide).\n\nAll requests use a test-mode secret API key in the `Authorization` header:\n\n```http\nAuthorization: Bearer pr_sk_test_...\n```\n\n## 1. Create a profile\n\nA profile represents the end customer the purchase is billed and shipped to. Create one with [POST /v1/profiles](#tag/profiles/operation/v1_create_profile).\n\n#### Request\n\n```http\nPOST /v1/profiles\nContent-Type: application/json\n\n{\n  \"profile_type\": \"consumer\",\n  \"first_name\": \"Ada\",\n  \"last_name\": \"Lovelace\",\n  \"email\": \"ada@example.com\",\n  \"phone\": \"+14155551234\",\n  \"dob\": { \"day\": 10, \"month\": 12, \"year\": 1990 },\n  \"country\": \"US\",\n  \"addresses\": [\n    {\n      \"address_type\": \"billing\",\n      \"is_default\": true,\n      \"recipient_name\": \"Ada Lovelace\",\n      \"line1\": \"548 Market St\",\n      \"line2\": \"Suite 200\",\n      \"city\": \"San Francisco\",\n      \"state\": \"CA\",\n      \"postal_code\": \"94104\",\n      \"country\": \"US\"\n    }\n  ]\n}\n```\n\n#### Response — `201 Created`\n\n```json\n{\n  \"id\": \"pr_pf_01K8Q4R2P1J0H4Y9N3FZP1T9V2\",\n  \"profile_type\": \"consumer\",\n  \"first_name\": \"Ada\",\n  \"last_name\": \"Lovelace\",\n  \"email\": \"ada@example.com\",\n  \"country\": \"US\",\n  \"status\": \"active\",\n  \"addresses\": [\n    {\n      \"id\": \"pr_addr_01K8Q4R3F2W6S0E1N5Y7K9TM2C\",\n      \"address_type\": \"billing\",\n      \"is_default\": true,\n      \"recipient_name\": \"Ada Lovelace\",\n      \"line1\": \"548 Market St\",\n      \"line2\": \"Suite 200\",\n      \"city\": \"San Francisco\",\n      \"state\": \"CA\",\n      \"postal_code\": \"94104\",\n      \"country\": \"US\"\n    }\n  ],\n  \"created_at\": \"2026-06-07T18:02:14Z\"\n}\n```\n\nSave the returned profile `id` and the address `id` — both are referenced by later calls.\n\n## 2. Add a payment method\n\nCard numbers and CVCs never touch your server. In your frontend, mount a [OpenMerchant Element](#tag/openmerchant-elements) to collect the card; submitting the element returns an opaque `vault_token_id` that you forward to your backend. Then attach the card to the profile with [POST /v1/profiles/{profile_id}/payment_methods](#tag/profiles/operation/v1_create_profile_payment_method).\n\n#### Request\n\n```http\nPOST /v1/profiles/pr_pf_01K8Q4R2P1J0H4Y9N3FZP1T9V2/payment_methods\nContent-Type: application/json\n\n{\n  \"type\": \"card\",\n  \"is_default\": true,\n  \"label\": \"Personal Visa\",\n  \"billing_address\": {\n    \"id\": \"pr_addr_01K8Q4R3F2W6S0E1N5Y7K9TM2C\"\n  },\n  \"card\": {\n    \"kind\": \"existing\",\n    \"vault_token_id\": \"tok_test_VxQF8s4uYwK7d2hP\",\n    \"cardholder_name\": \"Ada Lovelace\",\n    \"agentic_credentials_enrollment_requested\": true,\n    \"agentic_terms_acknowledged\": true\n  }\n}\n```\n\n#### Response — `201 Created`\n\n```json\n{\n  \"id\": \"pr_ppm_01K8Q4R7TC0SJ2D1A8K9X3WZQH\",\n  \"profile_id\": \"pr_pf_01K8Q4R2P1J0H4Y9N3FZP1T9V2\",\n  \"type\": \"card\",\n  \"is_default\": true,\n  \"label\": \"Personal Visa\",\n  \"card\": {\n    \"kind\": \"existing\",\n    \"is_issued\": false,\n    \"card_brand\": \"visa\",\n    \"card_last4\": \"4242\",\n    \"card_exp_month\": 12,\n    \"card_exp_year\": 2030,\n    \"agentic_credentials_status\": \"active\"\n  }\n}\n```\n\nThe returned `id` is the `profile_payment_method_id` you'll reference when creating a PurchaseIntent.\n\n## 3. Create a PurchaseIntent\n\nA PurchaseIntent is the agent's intent to buy one or more items on behalf of the profile. Create one with [POST /v1/purchase_intents](#tag/purchase-intents/operation/v1_create_purchase_intent).\n\n#### Request\n\n```http\nPOST /v1/purchase_intents\nContent-Type: application/json\n\n{\n  \"profile_id\": \"pr_pf_01K8Q4R2P1J0H4Y9N3FZP1T9V2\",\n  \"profile_payment_method_id\": \"pr_ppm_01K8Q4R7TC0SJ2D1A8K9X3WZQH\",\n  \"currency_code\": \"USD\",\n  \"items\": [\n    {\n      \"url\": \"https://shop.example.com/products/notebook-a5\",\n      \"quantity\": 1,\n      \"expected_amount\": 2400,\n      \"expected_currency\": \"USD\"\n    }\n  ],\n  \"preferences\": {\n    \"fulfillment\": {\n      \"method\": \"ship\",\n      \"max_fee_amount\": 1500\n    }\n  },\n  \"idempotency_key\": \"demo-2026-06-07-001\"\n}\n```\n\n#### Response — `201 Created`\n\n```json\n{\n  \"id\": \"pr_pi_01K8Q4RDX9N5G7P2H1S0YV3JR8\",\n  \"object\": \"purchase_intent\",\n  \"profile_id\": \"pr_pf_01K8Q4R2P1J0H4Y9N3FZP1T9V2\",\n  \"profile_payment_method_id\": \"pr_ppm_01K8Q4R7TC0SJ2D1A8K9X3WZQH\",\n  \"currency_code\": \"USD\",\n  \"expected_amount\": 2400,\n  \"max_allowed_amount\": 4150,\n  \"actual_amount\": 0,\n  \"status\": \"awaiting_approval\",\n  \"items\": [\n    {\n      \"id\": \"pr_pii_01K8Q4RDXA1V7Z6W4M2C0BPQXJ\",\n      \"url\": \"https://shop.example.com/products/notebook-a5\",\n      \"quantity\": 1\n    }\n  ],\n  \"carts\": [],\n  \"created_at\": \"2026-06-07T18:02:47Z\"\n}\n```\n\nThe PurchaseIntent enters `awaiting_approval` because the policy requires an explicit approve step before execution. `carts` is empty until execution begins. If your account's policy allows unattended purchases up to this amount, the status will skip straight to `queued` and you can move to step 5.\n\n## 4. Approve the PurchaseIntent\n\nApprove the intent with [POST /v1/purchase_intents/{purchase_intent_id}/approve](#tag/purchase-intents/operation/v1_approve_purchase_intent). This is the final go-ahead before charges are attempted.\n\n#### Request\n\n```http\nPOST /v1/purchase_intents/pr_pi_01K8Q4RDX9N5G7P2H1S0YV3JR8/approve\nContent-Type: application/json\n\n{\n  \"approve\": true,\n  \"profile_payment_method_id\": \"pr_ppm_01K8Q4R7TC0SJ2D1A8K9X3WZQH\"\n}\n```\n\n#### Response — `200 OK`\n\n```json\n{\n  \"id\": \"pr_pi_01K8Q4RDX9N5G7P2H1S0YV3JR8\",\n  \"object\": \"purchase_intent\",\n  \"status\": \"approved\",\n  \"expected_amount\": 2400,\n  \"max_allowed_amount\": 4150,\n  \"actual_amount\": 0,\n  \"carts\": [],\n  \"updated_at\": \"2026-06-07T18:03:02Z\"\n}\n```\n\nThe status moves to `approved` and the PurchaseIntent is queued for execution. `carts` will be populated as merchant checkout begins.\n\n## 5. Retrieve the PurchaseIntent\n\nPoll [GET /v1/purchase_intents/{purchase_intent_id}](#tag/purchase-intents/operation/v1_get_purchase_intent) until the status reaches a terminal value (`succeeded`, `failed`, `cancelled`, or `declined`).\n\n#### Request\n\n```http\nGET /v1/purchase_intents/pr_pi_01K8Q4RDX9N5G7P2H1S0YV3JR8\n```\n\n#### Response — `200 OK`\n\n```json\n{\n  \"id\": \"pr_pi_01K8Q4RDX9N5G7P2H1S0YV3JR8\",\n  \"object\": \"purchase_intent\",\n  \"status\": \"succeeded\",\n  \"profile_id\": \"pr_pf_01K8Q4R2P1J0H4Y9N3FZP1T9V2\",\n  \"profile_payment_method_id\": \"pr_ppm_01K8Q4R7TC0SJ2D1A8K9X3WZQH\",\n  \"currency_code\": \"USD\",\n  \"expected_amount\": 2400,\n  \"max_allowed_amount\": 4150,\n  \"actual_amount\": 2675,\n  \"items\": [\n    {\n      \"id\": \"pr_pii_01K8Q4RDXA1V7Z6W4M2C0BPQXJ\",\n      \"url\": \"https://shop.example.com/products/notebook-a5\",\n      \"quantity\": 1\n    }\n  ],\n  \"carts\": [\n    {\n      \"id\": \"pr_pic_01K8Q4RHGN8Y3M4D5L7B9TZP1W\",\n      \"purchase_attempt_id\": \"pr_pia_01K8Q4RJ8M5C9B2X1V7Q3WZK4D\",\n      \"status\": \"succeeded\",\n      \"attempt_number\": 1,\n      \"max_attempts\": 3,\n      \"can_retry\": false,\n      \"can_cancel\": false,\n      \"merchant\": \"Shop Example\",\n      \"merchant_domain\": \"shop.example.com\",\n      \"expected_amount\": 2400,\n      \"max_allowed_amount\": 4150,\n      \"actual_amount\": 2675,\n      \"currency_code\": \"USD\",\n      \"order_id\": \"SE-2026-1284910\",\n      \"transaction_id\": \"pr_txn_01K8Q4RKQ4B7T2H6F9V3J1WPLY\",\n      \"started_at\": \"2026-06-07T18:03:08Z\",\n      \"completed_at\": \"2026-06-07T18:03:36Z\"\n    }\n  ],\n  \"created_at\": \"2026-06-07T18:02:47Z\",\n  \"started_at\": \"2026-06-07T18:03:02Z\",\n  \"completed_at\": \"2026-06-07T18:03:38Z\"\n}\n```\n\nThe PurchaseIntent reaches the terminal `status: \"succeeded\"` and the cart reaches `status: \"succeeded\"`. `actual_amount` is the charged total (item subtotal plus shipping and tax) — always less than or equal to `max_allowed_amount`. While a cart is still executing it will pass through `created`, `in_progress`, and possibly `awaiting_merchant_auth` (if the merchant needs the shopper to sign in) before reaching a terminal status (`succeeded`, `failed`, or `cancelled`).\n\n## Next steps\n\n- Subscribe to lifecycle events at `GET /v1/purchase_intents/{id}/events` instead of polling.\n- Cancel an in-flight intent with [POST .../cancel](#tag/purchase-intents/operation/v1_cancel_purchase_intent).\n- Retry a failed intent with [POST .../retry](#tag/purchase-intents/operation/v1_retry_purchase_intent).\n- Manage spending limits and merchant restrictions via [Policies](#tag/policies).\n"},{"name":"catalog","x-displayName":"Catalog","description":"Buyer-side catalog endpoints to search items and get details for one or more items. This catalog consolidates catalog endpoints across known agentic merchants, both published by OpenMerchant and across the web."},{"name":"quotes","x-displayName":"Quotes","description":"Create, list, retrieve, and refresh buyer-owned authoritative quotes. Completed merchant pricing and availability return inline; poll only after an indeterminate responder timeout."},{"name":"orders","x-displayName":"Orders","description":"Receive authenticated order snapshots used to reconcile buyer-side purchases across agentic commerce protocols."},{"name":"registry","x-displayName":"Registry","description":"Aggregate directory for merchants with agentic commerce protocols enabled across the Internet, including known MPP and UCP enabled merchants. Use these endpoints for buyer-side convenience without scraping or aggregating yourself"},{"name":"merchant","x-displayName":"Merchant","description":"Seller-side catalog management, quote inspection, and typed quote-response recovery for the secret key account and mode."},{"name":"markets","x-displayName":"Markets","description":"Define the per-market pricing and locale vocabulary a hosted merchant sells into. Each market binds a currency and its supported locales, and carries the geographic rules that route a buyer to it."},{"name":"rate-cards","x-displayName":"Rate cards","description":"Price every way an order can reach a buyer. A rate card is one buyer-facing fulfillment service, in one currency, served to some markets, with a timing promise and one fee rule — flat, tiered on weight, order value, distance, item count, or fulfillment label, or waived above a free-shipping threshold."},{"name":"promotions","x-displayName":"Promotions","description":"Run limited-time discounts for agent buyers. A promotion sets when it runs, how much it may give away per order and in total, who may redeem it and how often, and what it applies to. Its arms each pair one discount with how long an offer drawn from it stays valid. A promotion never rewrites a catalog price."},{"name":"webhooks","x-displayName":"Webhooks","description":"Receive signed marketplace events for order and quote lifecycle changes, destination tests, and forwarded Stripe payment events. Each event documents its exact request envelope and payload."},{"name":"purchase-intents","x-displayName":"PurchaseIntents","description":"Buy one or more items by creating a PurchaseIntent. Items from the same merchant are batched together into carts.\n\nConfigure additional preferences, such as preferring pickup vs delivery, or reuse default preferences from the profile.\n\nWhen human approval is required by policy, call the approve API to confirm the PurchaseIntent and begin execution."},{"name":"purchase-intent-links","x-displayName":"PurchaseIntent Links","description":"Issue short-lived hosted links that let an end customer view a PurchaseIntent and act on it — approve, decline, cancel, retry, or sign in to the merchant when the agent hits a login wall — on an OpenMerchant-hosted page.\n\nScope what the recipient may do with `allowed_actions`, and keep `expires_in_hours` short: an approve-capable link is spending authority. The returned `url` carries the only copy of the secret token; store or forward it immediately. Links expire automatically and can be invalidated early with the revoke endpoint."},{"name":"profiles","x-displayName":"Profiles","description":"Create and manage end-customer profiles used for purchases. The profile represents the customer of record - who the purchase will be billed and shipped to."},{"name":"onboarding-links","x-displayName":"Onboarding links","description":"Issue short-lived hosted links that let an end customer complete their own profile onboarding — or update an existing profile — on an OpenMerchant-hosted page (contact details, addresses, payment method collection) without your app handling any of it.\n\nThe returned `url` carries the only copy of the secret token; store or forward it immediately. Links expire automatically and can be revoked early with the expire endpoint."},{"name":"budgets","x-displayName":"Budgets","description":"Create and manage standing spending budgets on a profile's payment methods, then draw one-time card credentials against them.\n\nA standing budget is a pre-approved allowance (optionally recurring weekly, monthly, or yearly) attached to a payment method. Once the budget is approved and verified, the credentials API draws against it repeatedly; each draw decrements the remaining budget."},{"name":"policies","x-displayName":"Policies","description":"Create and manage reusable spending policies used to evaluate purchases.\n\nYou can configure max spending per transaction or per time interval, max number of PurchaseIntents per day, or merchant restrictions based on category (MCC code). It is impossible for purchases to go through when they are outside of the policy limits."},{"name":"shared-payment-tokens","x-displayName":"Shared Payment Tokens","description":"Create, refresh, and revoke profile payment-method credentials that can be shared with compatible agentic merchants."},{"name":"test-cards","x-displayName":"Test cards","description":"In test mode, use these cards to simulate the full enrollment and payment lifecycle without moving real money. Use any valid future date for expiration and any 3-digit CVC.\n Currently, only Visa and Mastercard cards are eligible for Agentic enrollment. Agentic credentials allow agents to use one-time credentials with spending limits. For ineligible cards, the user must re-enter their CVC code for every purchase.\n\n## Test Cards\n\nThe `Identifier` column doubles as a **backend-only shortcut for scripted sandboxes**: in test mode you may send a value from that column as `vault_token_id` on `POST /v1/profiles/{profile_id}/payment_methods` instead of running the Elements iframe. The server resolves the identifier to the registered PAN, mints a real card vault token (expiry `01/30`, CVC `111`), and threads it through the rest of the flow. Live-mode requests that send a test-card identifier are rejected with `400 test_card_identifier_not_allowed_in_live_mode`.\n\n| Brand | Identifier | Number | Enrollment | OTP / Verification |\n|---|---|---|---|---|\n| Visa | `visa_auto_approved` | <code data-card>4242 4242 4242 4242</code> | Auto-approved | Not required |\n| Visa | `visa_otp_passkey` | <code data-card>4000 0000 0000 0002</code> | Succeeds | OTP required — triggers passkey creation |\n| Visa | `visa_otp_passkey_alt` | <code data-card>4000 0200 0000 0000</code> | Succeeds | OTP required — triggers passkey creation |\n| Visa | `visa_otp_no_passkey` | <code data-card>4000 0566 5566 5556</code> | Succeeds | OTP completes without passkey creation |\n| Visa | `visa_otp_required` | <code data-card>4711 3588 9278 5746</code> | Succeeds | OTP required |\n| Visa | `visa_otp_invalid` | <code data-card>4929 9803 9556 7582</code> | Succeeds | OTP always returns `INVALID_OTP` error |\n| Visa | `visa_otp_max_attempts` | <code data-card>4916 7252 9792 5395</code> | Succeeds | OTP returns `MAX_ATTEMPTS_EXCEEDED` error |\n| Visa | `visa_provider_failure` | <code data-card>4000 0000 0000 3063</code> | Provider step fails (retryable) | — |\n| Visa | `visa_token_failure` | <code data-card>4000 0000 0000 3071</code> | Token provisioning fails (retryable) | — |\n| Visa | `visa_rejected` | <code data-card>4330 2512 0750 6660</code> | Rejected — network verification failure | — |\n| Visa | `visa_ineligible` | <code data-card>4539 0978 8716 3333</code> | Ineligible | — |\n| Visa | `visa_issuer_declined` | <code data-card>4929 5442 4031 8920</code> | Declined by issuer | — |\n| Mastercard | `mastercard_popup` | <code data-card>5555 5555 5555 4444</code> | Succeeds | Popup challenge required |\n| Mastercard | `mastercard_auto_approved` | <code data-card>5200 8282 8282 8210</code> | Auto-approved | Not required |\n| Mastercard (2-series) | `mastercard_2_series_popup` | <code data-card>2223 0031 2200 3222</code> | Succeeds | Popup challenge required |\n| Mastercard | `mastercard_popup_alt` | <code data-card>5425 2334 3010 9903</code> | Succeeds | Popup challenge required |\n| Mastercard | `mastercard_ineligible` | <code data-card>5105 1051 0510 5100</code> | Ineligible | — |\n| American Express | `amex_ineligible` | <code data-card>3700 000000 00002</code> | Ineligible | — |\n| Discover | `discover_ineligible` | <code data-card>6011 0000 0000 0004</code> | Ineligible | — |\n\n## Test CVCs\n\nUse these identifiers on `temporary_cvc_token_id` (purchase-intent approval) when you also drove the saved card from the test-card shortcut above. The identifier carries the CVC length so 3-digit and 4-digit (Amex) flows stay distinct. Live-mode requests that send a test-CVC identifier are rejected with the same `test_card_identifier_not_allowed_in_live_mode` error.\n\n| Identifier | CVC | Use with |\n|---|---|---|\n| `cvc_3_digit` | `111` | Visa / Mastercard / Discover test cards |\n| `cvc_4_digit` | `1111` | Amex test cards |\n"},{"name":"openmerchant-elements","x-displayName":"OpenMerchant Elements","description":"OpenMerchant Elements are embeddable UI components for the sensitive parts of an agentic-checkout integration: collecting cards, picking a payment method, approving an agentic payment, and handing off merchant sign-in credentials. Each Element renders inside an OpenMerchant-hosted iframe, so card numbers and merchant passwords never touch your page or your servers — they flow directly from the user to the card vault, or into a short-lived encrypted credential ticket.\n\nElements authenticate with your **publishable key** (`pr_pk_test_…` / `pr_pk_live_…`) — browser-safe, origin-allowlisted, and capability-scoped. At mount, the iframe exchanges it for a short-lived, single-origin Element Session that authorizes the rest of the flow. Your **secret key** (`pr_sk_…`) never appears in the browser; it stays on your backend for the REST endpoints documented above.\n\nInstall the React components from npm:\n\n```bash\nnpm i @procura/elements-react\n```\n\nThe package is published at [npmjs.com/package/@procura/elements-react](https://www.npmjs.com/package/@procura/elements-react).\n\n## The Elements\n\n### `<AddPaymentMethod>`\n\n![The AddPaymentMethod Element collecting a card inside the OpenMerchant-hosted iframe](/media/add-payment-method-element.gif)\n\nThe card-onboarding Element. In a single flow it adds the card (details go straight into the card vault inside the iframe and are saved to the profile), optionally enrolls it in the Visa and Mastercard agentic-commerce protocols (running any verification ceremony inline), and captures the cardholder's approval of a standing budget the agent can spend against. Profile-scoped: pass `profileId`.\n\n```tsx\n<OpenMerchantElementsProvider publishableKey=\"pr_pk_test_…\">\n  <AddPaymentMethod\n    profileId=\"pr_pf_…\"\n    onComplete={(result) => console.log(result.profilePaymentMethodId)}\n  />\n</OpenMerchantElementsProvider>\n```\n\n### `<AddOrSelectPaymentMethod>`\n\nThe checkout workhorse: lists the profile's saved cards, lets the user add one, and — when mounted with a `purchaseIntentId` — runs whatever follow-up the payment needs (CVC re-entry for a reused card, or the agentic instruction approval ceremony). Selection happens inside the iframe, but the commit is driven by **your** CTA: forward a ref and call `ref.current.authorize()` from your \"Authorize purchase\" button; `onPaymentSelected` tells you when to enable it. `onComplete` returns the fields you forward to your purchase execution call (`profile_payment_method_id`, `temporary_cvc_token_id`, `agentic_credentials_preference`, `payment_verification`).\n\n### `<MerchantAuthHandoff>`\n\nOne-time merchant sign-in for a checkout blocked on merchant authentication. Render it when a PurchaseIntent reports `status: \"awaiting_merchant_auth\"` (or `\"merchant_auth_failed\"` for a retry — the Element shows retry copy automatically). The iframe collects the user's merchant username/password once, shows the exact merchant domain being signed in to, and submits the pair to OpenMerchant, which encrypts it into a **one-time credential ticket** (consumed atomically, expires in minutes, never persisted or logged) and — by default — immediately resumes the blocked checkout in an isolated browser session.\n\n```tsx\n{purchaseIntent.status === 'awaiting_merchant_auth' && (\n  <MerchantAuthHandoff\n    purchaseIntentId={purchaseIntent.id}\n    onComplete={(result) => console.log(result.next)} // \"checkout_resuming\"\n  />\n)}\n```\n\nUnlike the payment Elements, this one is purchase-intent scoped — no `profileId`; the blocked cart, attempt, and merchant are derived server-side from the intent. `cartId` is only needed when several carts are blocked at once. Invalid merchant credentials are not a synchronous error: submit returns `accepted`, and a bad password surfaces later as `merchant_auth_failed` — re-render the Element to let the user try again.\n\n**Defer mode.** Pass `deferRetry` when your backend should control when the retry happens: submit then only mints the ticket, `onComplete` carries `credentialTicketId`, and your backend redeems it with [POST /v1/purchase_intents/{id}/retry](#tag/purchase-intents/operation/v1_retry_purchase_intent):\n\n```http\nPOST /v1/purchase_intents/{id}/retry\nAuthorization: Bearer pr_sk_…\n\n{ \"credential_ticket_id\": \"mct_…\" }\n```\n\nTickets are single-use (replays return `410`) and intent-bound (a ticket minted for another intent returns `409` and is destroyed). Raw merchant credentials are never accepted on the REST API — the Element is the only credential-collection surface.\n\n## How to integrate\n\n1. **Keys and origins.** From Developers → API keys, copy your publishable key and allowlist every origin that will embed an Element (e.g. `http://localhost:3000`, `https://checkout.example.com`). Bootstrap calls from other origins are rejected.\n2. **Install.**\n\n```bash\nnpm install @procura/elements-react\n```\n\n3. **Mount the provider** once, near the root of your checkout UI:\n\n```tsx\nimport { OpenMerchantElementsProvider } from '@procura/elements-react'\n\n<OpenMerchantElementsProvider publishableKey={OPENMERCHANT_PUBLISHABLE_KEY}>\n  {children}\n</OpenMerchantElementsProvider>\n```\n\n4. **Render Elements off the PurchaseIntent state** you poll (or stream) from your backend:\n\n| PurchaseIntent state | Render |\n|---|---|\n| needs a payment method | `<AddOrSelectPaymentMethod profileId purchaseIntentId>` |\n| `awaiting_merchant_auth` | `<MerchantAuthHandoff purchaseIntentId>` |\n| `merchant_auth_failed` | `<MerchantAuthHandoff purchaseIntentId>` (retry copy automatic) |\n| terminal (`succeeded` / `failed`) | your own confirmation / failure UI |\n\nElements report *acceptance* via `onComplete`; the checkout itself progresses asynchronously — keep following the intent via `GET /v1/purchase_intents/{id}` or its `/events` stream.\n\n## Appearance\n\nEvery Element accepts an `appearance` object — a `theme`, CSS variables, and a constrained set of selector rules — so the hosted UI matches your brand. Unknown keys are dropped server-side, so the iframe never executes arbitrary CSS.\n\n```tsx\n<MerchantAuthHandoff\n  purchaseIntentId=\"pr_pi_…\"\n  appearance={{ theme: 'light', variables: { colorPrimary: '#111827' } }}\n/>\n```\n\n## Testing Elements\n\nIn test mode, use the [test cards](#tag/test-cards) above inside `<AddPaymentMethod>` / `<AddOrSelectPaymentMethod>` to simulate the full enrollment and verification lifecycle. For `<MerchantAuthHandoff>`, drive a test-mode PurchaseIntent to `awaiting_merchant_auth` and submit any credentials — the isolated browser session signs in against the sandboxed merchant.\n"},{"name":"mcp-server","x-displayName":"MCP server","description":"Every public v1 endpoint above is also callable as a Model Context Protocol (MCP) tool over Streamable HTTP at [`/mcp/v1`](https://api.openmerchant.dev/mcp/v1), with the **same** `pr_sk_test_…` / `pr_sk_live_…` Bearer token as a REST call. The MCP tool name equals the route's `operationId` — e.g. `v1_create_purchase_intent` exposes the same shape as `POST /v1/purchase_intents`. Use this when wiring OpenMerchant into an LLM tool palette (Claude Desktop, Cursor, Cline, the OpenAI Agents SDK, …) without writing per-route REST adapters yourself.\n\nEach MCP-eligible operation's request panel has two extra code tabs:\n\n- **MCP (Streamable HTTP)** — a raw `tools/call` JSON-RPC `curl` you can copy verbatim; works against any HTTP client, no SDK required.\n- **MCP SDK (TS)** — a `@modelcontextprotocol/sdk` snippet that calls `client.callTool({ name, arguments })` against a `Client` you've already connected (see \"Connect a client\" below).\n\n## Mount\n\n```\nhttps://api.openmerchant.dev/mcp/v1     (production)\nhttps://api.staging.openmerchant.dev/mcp/v1   (staging)\n```\n\nAuthorize every request with the same Bearer token used for the REST API — `pr_sk_test_…` for test mode, `pr_sk_live_…` for live mode. The server reads the `Authorization` header on each tool invocation and routes through the same auth middleware as a direct REST call, so mode, account scoping, and rate-limiting all behave identically.\n\n## Connect a client\n\n```ts\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\"\nimport { StreamableHTTPClientTransport }\n  from \"@modelcontextprotocol/sdk/client/streamableHttp.js\"\n\nconst transport = new StreamableHTTPClientTransport(\n  new URL(\"https://api.openmerchant.dev/mcp/v1\"),\n  { requestInit: { headers: { Authorization: \"Bearer pr_sk_test_...\" } } },\n)\nconst client = new Client({ name: \"my-app\", version: \"1.0.0\" })\nawait client.connect(transport)\n\nconst result = await client.callTool({\n  name: \"v1_create_purchase_intent\",\n  arguments: { profile_id: \"pr_pf_...\", items: [...] },\n})\n```\n\nThe MCP `tools/list` method (and `GET /mcp/v1/manifest.json` over plain HTTP) enumerates every available tool with its full `inputSchema`. Schemas, validation, and error responses match the REST surface 1:1 — anything you see in this reference applies to the equivalent MCP tool.\n"},{"name":"agent-identity","x-displayName":"UCP platform identity","description":"Public, machine-readable identity and capability metadata used by Universal Commerce Protocol merchants to negotiate checkout support and verify OpenMerchant-signed requests."},{"name":"mpp-identity","x-displayName":"MPP platform identity","description":"Retrieve OpenMerchant's public MPP service manifest, including its canonical service URL, supported payment methods, documentation links, and slug-templated commerce endpoints."}],"x-tagGroups":[{"name":"Getting Started","tags":["merchant-integration-guide"]},{"name":"Agentic Buyers","tags":["registry","catalog","quotes","orders","agent-identity","mpp-identity"]},{"name":"Agentic Merchants","tags":["merchant","markets","rate-cards","promotions","webhooks"]},{"name":"Purchasing","tags":["integration-guide","purchase-intents","purchase-intent-links"]},{"name":"Profiles","tags":["profiles","shared-payment-tokens","onboarding-links","budgets","policies"]},{"name":"Developer Resources","tags":["test-cards","openmerchant-elements","mcp-server"]}]}