Invoices
Download the complete public OpenAPI schema
Invoices
Submit invoice details or documents, then follow extraction, review, approval, and payment using one stable invoice ID. Submission metadata reports intake progress separately from the invoice lifecycle.
GET /v1/invoices
List invoices and intake progress
Include pending, failed-intake and duplicate invoices in the account inbox.
Parameters, request, responses, and security
{
"tags": [
"invoices"
],
"summary": "List invoices and intake progress",
"description": "Include pending, failed-intake and duplicate invoices in the account inbox.",
"operationId": "v1_list_invoices",
"parameters": [
{
"required": false,
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/PayableInvoiceStatus"
},
{
"type": "null"
}
],
"title": "Status"
},
"name": "status",
"in": "query"
},
{
"required": false,
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/InvoiceProcessingStatus"
},
{
"type": "null"
}
],
"title": "Processing Status"
},
"name": "processing_status",
"in": "query"
},
{
"required": false,
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Issuer Profile Id"
},
"name": "issuer_profile_id",
"in": "query"
},
{
"required": false,
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/PayableInvoiceSourceKind"
},
{
"type": "null"
}
],
"title": "Source"
},
"name": "source",
"in": "query"
},
{
"required": false,
"schema": {
"type": "integer",
"maximum": 100.0,
"minimum": 1.0,
"title": "Limit",
"default": 50
},
"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/InvoiceListResponse"
}
}
}
},
"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_invoices",
"x-mcp-exposed": true,
"x-public-path": "/v1/invoices",
"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/invoices \\\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_invoices\",\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_invoices\",\n arguments: {},\n});"
}
]
}
POST /v1/invoices
Create and process an invoice
Accept immutable evidence; creation itself grants no payment authorization.
Parameters, request, responses, and security
{
"tags": [
"invoices"
],
"summary": "Create and process an invoice",
"description": "Accept immutable evidence; creation itself grants no payment authorization.",
"operationId": "v1_create_invoice",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvoiceCreate"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvoiceRead"
}
}
}
},
"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_invoice",
"x-mcp-exposed": true,
"x-public-path": "/v1/invoices",
"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/invoices \\\n -H 'Authorization: Bearer pr_sk_test_...' \\\n -H 'Content-Type: application/json' \\\n -d '{\n \"idempotency_key\": \"...\"\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_invoice\",\n \"arguments\": {\n \"idempotency_key\": \"...\"\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_invoice\",\n arguments: {\n \"idempotency_key\": \"...\"\n},\n});"
}
]
}
GET /v1/invoices/{invoice_id}
Retrieve an invoice and submission metadata
Read one stable invoice ID through extraction, review, approval and payment.
Parameters, request, responses, and security
{
"tags": [
"invoices"
],
"summary": "Retrieve an invoice and submission metadata",
"description": "Read one stable invoice ID through extraction, review, approval and payment.",
"operationId": "v1_get_invoice",
"parameters": [
{
"required": true,
"schema": {
"type": "string",
"title": "Invoice Id"
},
"name": "invoice_id",
"in": "path"
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvoiceRead"
}
}
}
},
"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_invoice",
"x-mcp-exposed": true,
"x-public-path": "/v1/invoices/{invoice_id}",
"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/invoices/... \\\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_invoice\",\n \"arguments\": {\n \"invoice_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_invoice\",\n arguments: {\n \"invoice_id\": \"...\"\n},\n});"
}
]
}
POST /v1/invoices/documents
Reserve an invoice document upload
Upload bytes using the returned signed headers, then submit the document ID.
Parameters, request, responses, and security
{
"tags": [
"invoices"
],
"summary": "Reserve an invoice document upload",
"description": "Upload bytes using the returned signed headers, then submit the document ID.",
"operationId": "v1_create_invoice_document",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvoiceDocumentCreate"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvoiceDocumentCreated"
}
}
}
},
"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_invoice_document",
"x-mcp-exposed": true,
"x-public-path": "/v1/invoices/documents",
"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/invoices/documents \\\n -H 'Authorization: Bearer pr_sk_test_...' \\\n -H 'Content-Type: application/json' \\\n -d '{\n \"idempotency_key\": \"...\",\n \"filename\": \"...\",\n \"content_type\": \"application/pdf\",\n \"size_bytes\": 1,\n \"sha256\": \"...\"\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_invoice_document\",\n \"arguments\": {\n \"idempotency_key\": \"...\",\n \"filename\": \"...\",\n \"content_type\": \"application/pdf\",\n \"size_bytes\": 1,\n \"sha256\": \"...\"\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_invoice_document\",\n arguments: {\n \"idempotency_key\": \"...\",\n \"filename\": \"...\",\n \"content_type\": \"application/pdf\",\n \"size_bytes\": 1,\n \"sha256\": \"...\"\n},\n});"
}
]
}
GET /v1/invoices/intake_candidates
Incomplete Candidates
Read held intake without manufacturing complete invoice facts.
Parameters, request, responses, and security
{
"tags": [
"invoices"
],
"summary": "Incomplete Candidates",
"description": "Read held intake without manufacturing complete invoice facts.",
"operationId": "v1_incomplete_intake_candidates",
"parameters": [
{
"required": false,
"schema": {
"type": "integer",
"maximum": 100.0,
"minimum": 1.0,
"title": "Limit",
"default": 50
},
"name": "limit",
"in": "query"
},
{
"required": false,
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "After"
},
"name": "after",
"in": "query"
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"items": {
"$ref": "#/components/schemas/IntakeCandidateRead"
},
"type": "array",
"title": "Response V1 Incomplete Intake Candidates"
}
}
}
},
"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_incomplete_intake_candidates",
"x-mcp-exposed": true,
"x-public-path": "/v1/invoices/intake_candidates",
"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/invoices/intake_candidates \\\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_incomplete_intake_candidates\",\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_incomplete_intake_candidates\",\n arguments: {},\n});"
}
]
}
GET /v1/invoices/intake_candidates/{candidate_id}
Intake Candidate
Read a masked immutable observation and its matching history.
Parameters, request, responses, and security
{
"tags": [
"invoices"
],
"summary": "Intake Candidate",
"description": "Read a masked immutable observation and its matching history.",
"operationId": "v1_intake_candidate",
"parameters": [
{
"required": true,
"schema": {
"type": "string",
"title": "Candidate Id"
},
"name": "candidate_id",
"in": "path"
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/IntakeCandidateRead"
}
}
}
},
"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_intake_candidate",
"x-mcp-exposed": true,
"x-public-path": "/v1/invoices/intake_candidates/{candidate_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/invoices/intake_candidates/... \\\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_intake_candidate\",\n \"arguments\": {\n \"candidate_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_intake_candidate\",\n arguments: {\n \"candidate_id\": \"...\"\n},\n});"
}
]
}
POST /v1/invoices/intake_candidates/{candidate_id}/corrections
Correct Intake
API-attributed fact edits cannot make a human payment approval.
Parameters, request, responses, and security
{
"tags": [
"invoices"
],
"summary": "Correct Intake",
"description": "API-attributed fact edits cannot make a human payment approval.",
"operationId": "v1_correct_intake_candidate",
"parameters": [
{
"required": true,
"schema": {
"type": "string",
"title": "Candidate Id"
},
"name": "candidate_id",
"in": "path"
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/IntakeCorrectionWrite"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/IntakeCorrectionRead"
}
}
}
},
"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_correct_intake_candidate",
"x-mcp-exposed": true,
"x-public-path": "/v1/invoices/intake_candidates/{candidate_id}/corrections",
"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/invoices/intake_candidates/.../corrections \\\n -H 'Authorization: Bearer pr_sk_test_...' \\\n -H 'Content-Type: application/json' \\\n -d '{\n \"expected_decision_id\": \"...\",\n \"idempotency_key\": \"...\",\n \"fields\": {}\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_correct_intake_candidate\",\n \"arguments\": {\n \"candidate_id\": \"...\",\n \"expected_decision_id\": \"...\",\n \"idempotency_key\": \"...\",\n \"fields\": {}\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_correct_intake_candidate\",\n arguments: {\n \"candidate_id\": \"...\",\n \"expected_decision_id\": \"...\",\n \"idempotency_key\": \"...\",\n \"fields\": {}\n},\n});"
}
]
}
POST /v1/invoices/{invoice_id}/payout_destination
Select Destination
Record an API-attributed bank selection while retaining every independent review gate.
Parameters, request, responses, and security
{
"tags": [
"invoices"
],
"summary": "Select Destination",
"description": "Record an API-attributed bank selection while retaining every independent review gate.",
"operationId": "v1_select_invoice_destination",
"parameters": [
{
"required": true,
"schema": {
"type": "string",
"title": "Invoice Id"
},
"name": "invoice_id",
"in": "path"
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvoiceDestinationWrite"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PayableInvoiceDetailRead"
}
}
}
},
"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_select_invoice_destination",
"x-mcp-exposed": true,
"x-public-path": "/v1/invoices/{invoice_id}/payout_destination",
"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/invoices/.../payout_destination \\\n -H 'Authorization: Bearer pr_sk_test_...' \\\n -H 'Content-Type: application/json' \\\n -d '{\n \"expected_updated_at\": \"2026-06-30T12:00:00Z\",\n \"financial_account_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_select_invoice_destination\",\n \"arguments\": {\n \"invoice_id\": \"...\",\n \"expected_updated_at\": \"2026-06-30T12:00:00Z\",\n \"financial_account_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_select_invoice_destination\",\n arguments: {\n \"invoice_id\": \"...\",\n \"expected_updated_at\": \"2026-06-30T12:00:00Z\",\n \"financial_account_id\": \"...\"\n},\n});"
}
]
}
GET /v1/invoices/{invoice_id}/payout_requirements
Requirements
Read typed information requirements without creating a payment proposal.
Parameters, request, responses, and security
{
"tags": [
"invoices"
],
"summary": "Requirements",
"description": "Read typed information requirements without creating a payment proposal.",
"operationId": "v1_invoice_payout_requirements",
"parameters": [
{
"required": true,
"schema": {
"type": "string",
"title": "Invoice Id"
},
"name": "invoice_id",
"in": "path"
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PayoutRequirementsRead"
}
}
}
},
"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_invoice_payout_requirements",
"x-mcp-exposed": true,
"x-public-path": "/v1/invoices/{invoice_id}/payout_requirements",
"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/invoices/.../payout_requirements \\\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_invoice_payout_requirements\",\n \"arguments\": {\n \"invoice_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_invoice_payout_requirements\",\n arguments: {\n \"invoice_id\": \"...\"\n},\n});"
}
]
}
POST /v1/invoices/{invoice_id}/reevaluate
Reevaluate
Resume normal review once after fresh provider verification; never approve payment.
Parameters, request, responses, and security
{
"tags": [
"invoices"
],
"summary": "Reevaluate",
"description": "Resume normal review once after fresh provider verification; never approve payment.",
"operationId": "v1_reevaluate_invoice",
"parameters": [
{
"required": true,
"schema": {
"type": "string",
"title": "Invoice Id"
},
"name": "invoice_id",
"in": "path"
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvoiceReevaluateWrite"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PayableInvoiceDetailRead"
}
}
}
},
"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_reevaluate_invoice",
"x-mcp-exposed": true,
"x-public-path": "/v1/invoices/{invoice_id}/reevaluate",
"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/invoices/.../reevaluate \\\n -H 'Authorization: Bearer pr_sk_test_...' \\\n -H 'Content-Type: application/json' \\\n -d '{\n \"expected_updated_at\": \"2026-06-30T12:00:00Z\"\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_reevaluate_invoice\",\n \"arguments\": {\n \"invoice_id\": \"...\",\n \"expected_updated_at\": \"2026-06-30T12:00:00Z\"\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_reevaluate_invoice\",\n arguments: {\n \"invoice_id\": \"...\",\n \"expected_updated_at\": \"2026-06-30T12:00:00Z\"\n},\n});"
}
]
}