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});"
    }
  ]
}