Merchant
Download the complete public OpenAPI schema
Merchant
Seller-side catalog management, quote inspection, and typed quote-response recovery for the secret key account and mode.
GET /v1/merchant
Retrieve merchant setup requirements and status
Read merchant identity, mode, setup requirements, blockers, and stored verification results. This read never runs checks, creates payments, or publishes the merchant.
Parameters, request, responses, and security
{
"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"
}
}
}
}
},
"security": [
{
"ApiKeyBearer": []
}
],
"x-api-audience": "public_v1",
"x-api-authentication": "required",
"x-operation-id": "v1_get_merchant",
"x-mcp-exposed": true,
"x-public-path": "/v1/merchant",
"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});"
}
]
}
POST /v1/merchant/catalog
Create a catalog item
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.
Parameters, request, responses, and security
{
"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"
}
}
}
}
},
"security": [
{
"ApiKeyBearer": []
}
],
"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",
"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});"
}
]
}
GET /v1/merchant/catalog/{item_id}
Retrieve a catalog item
Return a non-SaaS catalog item owned by the secret API key's account and mode, including archived state.
Parameters, request, responses, and security
{
"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": [
{
"required": true,
"schema": {
"type": "string",
"title": "Item Id"
},
"name": "item_id",
"in": "path"
},
{
"description": "Explicit merchant market code.",
"required": false,
"schema": {
"anyOf": [
{
"type": "string",
"maxLength": 32,
"minLength": 1
},
{
"type": "null"
}
],
"title": "Market",
"description": "Explicit merchant market code."
},
"name": "market",
"in": "query"
},
{
"description": "ISO 3166-1 buyer country used for market routing.",
"required": false,
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/CountryCode"
},
{
"type": "null"
}
],
"title": "Country",
"description": "ISO 3166-1 buyer country used for market routing."
},
"name": "country",
"in": "query"
},
{
"description": "Buyer country subdivision code.",
"required": false,
"schema": {
"anyOf": [
{
"type": "string",
"maxLength": 8
},
{
"type": "null"
}
],
"title": "Region",
"description": "Buyer country subdivision code."
},
"name": "region",
"in": "query"
},
{
"description": "Buyer postal code used for prefix routing.",
"required": false,
"schema": {
"anyOf": [
{
"type": "string",
"maxLength": 20
},
{
"type": "null"
}
],
"title": "Postal Code",
"description": "Buyer postal code used for prefix routing."
},
"name": "postal_code",
"in": "query"
},
{
"description": "Requested buyer presentment currency.",
"required": false,
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/CurrencyCode"
},
{
"type": "null"
}
],
"title": "Currency",
"description": "Requested buyer presentment currency."
},
"name": "currency",
"in": "query"
},
{
"description": "Requested catalog-copy locale.",
"required": false,
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/LocaleCode"
},
{
"type": "null"
}
],
"title": "Locale",
"description": "Requested catalog-copy locale."
},
"name": "locale",
"in": "query"
},
{
"required": false,
"schema": {
"anyOf": [
{
"type": "string",
"maxLength": 512
},
{
"type": "null"
}
],
"title": "Accept-Language"
},
"name": "Accept-Language",
"in": "header"
}
],
"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"
}
}
}
}
},
"security": [
{
"ApiKeyBearer": []
}
],
"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}",
"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});"
}
]
}
POST /v1/merchant/catalog/{item_id}
Update a catalog item
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.
Parameters, request, responses, and security
{
"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": [
{
"required": true,
"schema": {
"type": "string",
"title": "Item Id"
},
"name": "item_id",
"in": "path"
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PublicCatalogItemPatch"
}
}
},
"required": true
},
"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"
}
}
}
}
},
"security": [
{
"ApiKeyBearer": []
}
],
"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}",
"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});"
}
]
}
POST /v1/merchant/catalog/{item_id}/archive
Archive a catalog item
Idempotently archive an owned non-SaaS catalog item so it is no longer discoverable or purchasable.
Parameters, request, responses, and security
{
"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": [
{
"required": true,
"schema": {
"type": "string",
"title": "Item Id"
},
"name": "item_id",
"in": "path"
}
],
"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"
}
}
}
}
},
"security": [
{
"ApiKeyBearer": []
}
],
"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",
"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});"
}
]
}
POST /v1/merchant/catalog/{item_id}/unarchive
Unarchive a catalog item
Losslessly restore an owned non-SaaS catalog item. Conflicting active SKUs return a named catalog conflict.
Parameters, request, responses, and security
{
"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": [
{
"required": true,
"schema": {
"type": "string",
"title": "Item Id"
},
"name": "item_id",
"in": "path"
}
],
"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"
}
}
}
}
},
"security": [
{
"ApiKeyBearer": []
}
],
"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",
"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});"
}
]
}
POST /v1/merchant/catalog/{item_id}/variants
Create a catalog variant
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.
Parameters, request, responses, and security
{
"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": [
{
"required": true,
"schema": {
"type": "string",
"title": "Item Id"
},
"name": "item_id",
"in": "path"
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PublicCatalogVariantCreate"
}
}
},
"required": true
},
"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"
}
}
}
}
},
"security": [
{
"ApiKeyBearer": []
}
],
"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",
"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});"
}
]
}
POST /v1/merchant/catalog/{item_id}/variants/{variant_id}
Update a catalog variant
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.
Parameters, request, responses, and security
{
"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": [
{
"required": true,
"schema": {
"type": "string",
"title": "Item Id"
},
"name": "item_id",
"in": "path"
},
{
"required": true,
"schema": {
"type": "string",
"title": "Variant Id"
},
"name": "variant_id",
"in": "path"
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PublicCatalogVariantPatch"
}
}
},
"required": true
},
"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"
}
}
}
}
},
"security": [
{
"ApiKeyBearer": []
}
],
"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}",
"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});"
}
]
}
GET /v1/merchant/destinations
List merchant destinations
List merchant destinations
Parameters, request, responses, and security
{
"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"
}
}
}
}
},
"security": [
{
"ApiKeyBearer": []
}
],
"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",
"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});"
}
]
}
POST /v1/merchant/destinations
Create merchant destination
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.
Parameters, request, responses, and security
{
"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"
}
}
}
}
},
"security": [
{
"ApiKeyBearer": []
}
],
"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",
"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 /v1/merchant/destinations/{destination_id}
Retrieve merchant destination
Retrieve merchant destination
Parameters, request, responses, and security
{
"tags": [
"merchant"
],
"summary": "Retrieve merchant destination",
"description": "Retrieve merchant destination",
"operationId": "v1_get_merchant_destination",
"parameters": [
{
"required": true,
"schema": {
"type": "string",
"title": "Destination Id"
},
"name": "destination_id",
"in": "path"
}
],
"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"
}
}
}
}
},
"security": [
{
"ApiKeyBearer": []
}
],
"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}",
"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});"
}
]
}
PATCH /v1/merchant/destinations/{destination_id}
Update merchant destination
Update merchant destination
Parameters, request, responses, and security
{
"tags": [
"merchant"
],
"summary": "Update merchant destination",
"description": "Update merchant destination",
"operationId": "v1_update_merchant_destination",
"parameters": [
{
"required": true,
"schema": {
"type": "string",
"title": "Destination Id"
},
"name": "destination_id",
"in": "path"
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/NotificationDestinationUpdate"
}
}
},
"required": true
},
"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"
}
}
}
}
},
"security": [
{
"ApiKeyBearer": []
}
],
"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}",
"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});"
}
]
}
DELETE /v1/merchant/destinations/{destination_id}
Delete an unused merchant destination
Delete an unused merchant destination
Parameters, request, responses, and security
{
"tags": [
"merchant"
],
"summary": "Delete an unused merchant destination",
"description": "Delete an unused merchant destination",
"operationId": "v1_delete_merchant_destination",
"parameters": [
{
"required": true,
"schema": {
"type": "string",
"title": "Destination Id"
},
"name": "destination_id",
"in": "path"
}
],
"responses": {
"204": {
"description": "Successful Response"
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
},
"security": [
{
"ApiKeyBearer": []
}
],
"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}",
"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});"
}
]
}
POST /v1/merchant/destinations/{destination_id}/disable
Disable merchant destination
Disable merchant destination
Parameters, request, responses, and security
{
"tags": [
"merchant"
],
"summary": "Disable merchant destination",
"description": "Disable merchant destination",
"operationId": "v1_disable_merchant_destination",
"parameters": [
{
"required": true,
"schema": {
"type": "string",
"title": "Destination Id"
},
"name": "destination_id",
"in": "path"
}
],
"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"
}
}
}
}
},
"security": [
{
"ApiKeyBearer": []
}
],
"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",
"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});"
}
]
}
POST /v1/merchant/destinations/{destination_id}/enable
Enable merchant destination
Enable merchant destination
Parameters, request, responses, and security
{
"tags": [
"merchant"
],
"summary": "Enable merchant destination",
"description": "Enable merchant destination",
"operationId": "v1_enable_merchant_destination",
"parameters": [
{
"required": true,
"schema": {
"type": "string",
"title": "Destination Id"
},
"name": "destination_id",
"in": "path"
}
],
"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"
}
}
}
}
},
"security": [
{
"ApiKeyBearer": []
}
],
"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",
"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});"
}
]
}
GET /v1/merchant/destinations/{destination_id}/events
List events for a destination
List events for a destination
Parameters, request, responses, and security
{
"tags": [
"merchant"
],
"summary": "List events for a destination",
"description": "List events for a destination",
"operationId": "v1_list_merchant_destination_events",
"parameters": [
{
"required": true,
"schema": {
"type": "string",
"title": "Destination Id"
},
"name": "destination_id",
"in": "path"
},
{
"required": false,
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/AgenticMerchantWebhookEventType"
},
{
"type": "null"
}
],
"title": "Event Type"
},
"name": "event_type",
"in": "query"
},
{
"required": false,
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/AgenticMerchantWebhookDeliveryStatus"
},
{
"type": "null"
}
],
"title": "Delivery Status"
},
"name": "delivery_status",
"in": "query"
},
{
"required": false,
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Order Id"
},
"name": "order_id",
"in": "query"
},
{
"required": false,
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Quote Id"
},
"name": "quote_id",
"in": "query"
},
{
"required": false,
"schema": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"title": "Created After"
},
"name": "created_after",
"in": "query"
},
{
"required": false,
"schema": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"title": "Created Before"
},
"name": "created_before",
"in": "query"
},
{
"required": false,
"schema": {
"type": "integer",
"maximum": 200.0,
"minimum": 1.0,
"title": "Limit",
"default": 20
},
"name": "limit",
"in": "query"
},
{
"required": false,
"schema": {
"type": "integer",
"minimum": 0.0,
"title": "Offset",
"default": 0
},
"name": "offset",
"in": "query"
}
],
"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"
}
}
}
}
},
"security": [
{
"ApiKeyBearer": []
}
],
"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",
"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});"
}
]
}
GET /v1/merchant/destinations/{destination_id}/events/{event_id}
Retrieve a destination event and its delivery attempts
Retrieve a destination event and its delivery attempts
Parameters, request, responses, and security
{
"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": [
{
"required": true,
"schema": {
"type": "string",
"title": "Destination Id"
},
"name": "destination_id",
"in": "path"
},
{
"required": true,
"schema": {
"type": "string",
"title": "Event Id"
},
"name": "event_id",
"in": "path"
}
],
"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"
}
}
}
}
},
"security": [
{
"ApiKeyBearer": []
}
],
"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}",
"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});"
}
]
}
POST /v1/merchant/destinations/{destination_id}/secret/rotate
Rotate destination signing secret
Rotate destination signing secret
Parameters, request, responses, and security
{
"tags": [
"merchant"
],
"summary": "Rotate destination signing secret",
"description": "Rotate destination signing secret",
"operationId": "v1_rotate_merchant_destination_secret",
"parameters": [
{
"required": true,
"schema": {
"type": "string",
"title": "Destination Id"
},
"name": "destination_id",
"in": "path"
}
],
"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"
}
}
}
}
},
"security": [
{
"ApiKeyBearer": []
}
],
"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",
"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});"
}
]
}
POST /v1/merchant/destinations/{destination_id}/test
Send a destination delivery test
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.
Parameters, request, responses, and security
{
"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": [
{
"required": true,
"schema": {
"type": "string",
"title": "Destination Id"
},
"name": "destination_id",
"in": "path"
}
],
"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"
}
}
}
}
},
"security": [
{
"ApiKeyBearer": []
}
],
"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",
"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});"
}
]
}
GET /v1/merchant/docs
Search merchant integration documentation
Search merchant integration documentation
Parameters, request, responses, and security
{
"tags": [
"merchant"
],
"summary": "Search merchant integration documentation",
"description": "Search merchant integration documentation",
"operationId": "v1_search_merchant_docs",
"parameters": [
{
"required": false,
"schema": {
"type": "string",
"maxLength": 200,
"title": "Query",
"default": ""
},
"name": "query",
"in": "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"
}
}
}
}
},
"security": [
{
"ApiKeyBearer": []
}
],
"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",
"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});"
}
]
}
GET /v1/merchant/docs/{document_id}
Read merchant integration documentation
Read merchant integration documentation
Parameters, request, responses, and security
{
"tags": [
"merchant"
],
"summary": "Read merchant integration documentation",
"description": "Read merchant integration documentation",
"operationId": "v1_get_merchant_doc",
"parameters": [
{
"required": true,
"schema": {
"$ref": "#/components/schemas/MerchantDocumentId"
},
"name": "document_id",
"in": "path"
}
],
"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"
}
}
}
}
},
"security": [
{
"ApiKeyBearer": []
}
],
"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}",
"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});"
}
]
}
POST /v1/merchant/integration_checks
Start a test-mode responder check
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.
Parameters, request, responses, and security
{
"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"
}
}
}
}
},
"security": [
{
"ApiKeyBearer": []
}
],
"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",
"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});"
}
]
}
GET /v1/merchant/integration_checks/{check_id}
Retrieve a responder check
Retrieve a responder check
Parameters, request, responses, and security
{
"tags": [
"merchant"
],
"summary": "Retrieve a responder check",
"description": "Retrieve a responder check",
"operationId": "v1_get_merchant_integration_check",
"parameters": [
{
"required": true,
"schema": {
"type": "string",
"title": "Check Id"
},
"name": "check_id",
"in": "path"
}
],
"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"
}
}
}
}
},
"security": [
{
"ApiKeyBearer": []
}
],
"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}",
"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});"
}
]
}
GET /v1/merchant/quotes
List seller-owned quote requests
List all quote traffic for the hosted merchant belonging to the secret key account and immutable mode.
Parameters, request, responses, and security
{
"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": [
{
"required": false,
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/AgenticQuoteStatus"
},
{
"type": "null"
}
],
"title": "Status"
},
"name": "status",
"in": "query"
},
{
"required": false,
"schema": {
"type": "integer",
"maximum": 200.0,
"minimum": 1.0,
"title": "Limit",
"default": 20
},
"name": "limit",
"in": "query"
},
{
"required": false,
"schema": {
"type": "integer",
"minimum": 0.0,
"title": "Offset",
"default": 0
},
"name": "offset",
"in": "query"
}
],
"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"
}
}
}
}
},
"security": [
{
"ApiKeyBearer": []
}
],
"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",
"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});"
}
]
}
GET /v1/merchant/quotes/{quote_id}
Retrieve a seller-owned quote
Retrieve one quote belonging to the key account and mode.
Parameters, request, responses, and security
{
"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": [
{
"required": true,
"schema": {
"type": "string",
"title": "Quote Id"
},
"name": "quote_id",
"in": "path"
}
],
"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"
}
}
}
}
},
"security": [
{
"ApiKeyBearer": []
}
],
"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}",
"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});"
}
]
}
POST /v1/merchant/quotes/{quote_id}/respond
Resolve a pending merchant quote
Answer a quote.requested event with the offers the merchant can honour.
Two 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.
Parameters, request, responses, and security
{
"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": [
{
"required": true,
"schema": {
"type": "string",
"title": "Quote Id"
},
"name": "quote_id",
"in": "path"
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"oneOf": [
{
"$ref": "#/components/schemas/MerchantQuoteRespondRequest"
},
{
"$ref": "#/components/schemas/MerchantWebhookQuoteResponse"
}
]
}
}
},
"required": true
},
"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"
}
}
}
}
},
"security": [
{
"ApiKeyBearer": []
}
],
"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",
"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});"
}
]
}
POST /v1/merchant/orders/{order_id}/respond
Confirm or reject a requested order
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.
A 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.
Parameters, request, responses, and security
{
"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": [
{
"required": true,
"schema": {
"type": "string",
"title": "Order Id"
},
"name": "order_id",
"in": "path"
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MerchantOrderRespondRequest"
}
}
},
"required": true
},
"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"
}
}
}
}
},
"security": [
{
"ApiKeyBearer": []
}
],
"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",
"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});"
}
]
}