Transfers

Download the complete public OpenAPI schema

Transfers

Submit invoice-backed transfer requests, inspect optional evidence and execution history, and resolve information requirements. Submission grants no payment authorization.

POST /v1/transfer_documents

Reserve a transfer document upload

Upload bytes directly with the returned short-lived signed instructions, then supply the document ID when creating a request.

Parameters, request, responses, and security

{
  "tags": [
    "transfers"
  ],
  "summary": "Reserve a transfer document upload",
  "description": "Upload bytes directly with the returned short-lived signed instructions, then supply the document ID when creating a request.",
  "operationId": "v1_create_transfer_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_transfer_document",
  "x-mcp-exposed": true,
  "x-public-path": "/v1/transfer_documents",
  "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/transfer_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_transfer_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_transfer_document\",\n  arguments: {\n  \"idempotency_key\": \"...\",\n  \"filename\": \"...\",\n  \"content_type\": \"application/pdf\",\n  \"size_bytes\": 1,\n  \"sha256\": \"...\"\n},\n});"
    }
  ]
}

GET /v1/transfer_requests

List transfer requests

Filter request status and processing progress before pagination. No processing or provider refresh is triggered.

Parameters, request, responses, and security

{
  "tags": [
    "transfers"
  ],
  "summary": "List transfer requests",
  "description": "Filter request status and processing progress before pagination. No processing or provider refresh is triggered.",
  "operationId": "v1_list_transfer_requests",
  "parameters": [
    {
      "required": false,
      "schema": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/TransferRequestKind"
          },
          {
            "type": "null"
          }
        ],
        "title": "Kind"
      },
      "name": "kind",
      "in": "query"
    },
    {
      "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": 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/TransferListResponse"
          }
        }
      }
    },
    "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_transfer_requests",
  "x-mcp-exposed": true,
  "x-public-path": "/v1/transfer_requests",
  "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/transfer_requests \\\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_transfer_requests\",\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_transfer_requests\",\n  arguments: {},\n});"
    }
  ]
}

POST /v1/transfer_requests

Create a transfer request

Submit invoice facts and/or uploaded documents. Creation grants no payment authorization. SAFE funding is not yet supported.

Parameters, request, responses, and security

{
  "tags": [
    "transfers"
  ],
  "summary": "Create a transfer request",
  "description": "Submit invoice facts and/or uploaded documents. Creation grants no payment authorization. SAFE funding is not yet supported.",
  "operationId": "v1_create_transfer_request",
  "requestBody": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/TransferRequestCreate"
        }
      }
    },
    "required": true
  },
  "responses": {
    "201": {
      "description": "Successful Response",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/PublicTransferRequestRead"
          }
        }
      }
    },
    "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_transfer_request",
  "x-mcp-exposed": true,
  "x-public-path": "/v1/transfer_requests",
  "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/transfer_requests \\\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_transfer_request\",\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_transfer_request\",\n  arguments: {\n  \"idempotency_key\": \"...\"\n},\n});"
    }
  ]
}

GET /v1/transfer_requests/{request_id}

Retrieve a transfer request

Core facts include masked payout_destination and revision references. Repeat include for evidence, requirements, documents, submissions, or executions. Collections embed their first 20 items; omitted sections are not loaded. GET never schedules work or refreshes provider state.

Parameters, request, responses, and security

{
  "tags": [
    "transfers"
  ],
  "summary": "Retrieve a transfer request",
  "description": "Core facts include masked payout_destination and revision references. Repeat include for evidence, requirements, documents, submissions, or executions. Collections embed their first 20 items; omitted sections are not loaded. GET never schedules work or refreshes provider state.",
  "operationId": "v1_get_transfer_request",
  "parameters": [
    {
      "required": true,
      "schema": {
        "type": "string",
        "title": "Request Id"
      },
      "name": "request_id",
      "in": "path"
    },
    {
      "required": false,
      "schema": {
        "anyOf": [
          {
            "items": {
              "$ref": "#/components/schemas/TransferInclude"
            },
            "type": "array"
          },
          {
            "type": "null"
          }
        ],
        "title": "Include"
      },
      "name": "include",
      "in": "query"
    }
  ],
  "responses": {
    "200": {
      "description": "Successful Response",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/PublicTransferRequestRead"
          }
        }
      }
    },
    "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_transfer_request",
  "x-mcp-exposed": true,
  "x-public-path": "/v1/transfer_requests/{request_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/transfer_requests/... \\\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_transfer_request\",\n    \"arguments\": {\n      \"request_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_transfer_request\",\n  arguments: {\n  \"request_id\": \"...\"\n},\n});"
    }
  ]
}

POST /v1/transfer_requests/{request_id}

Update a transfer request

Select a payout destination and/or reevaluate information requirements using an idempotency key and the current revision. This cannot approve payment, override rejection, or authorize a retry.

Parameters, request, responses, and security

{
  "tags": [
    "transfers"
  ],
  "summary": "Update a transfer request",
  "description": "Select a payout destination and/or reevaluate information requirements using an idempotency key and the current revision. This cannot approve payment, override rejection, or authorize a retry.",
  "operationId": "v1_update_transfer_request",
  "parameters": [
    {
      "required": true,
      "schema": {
        "type": "string",
        "title": "Request Id"
      },
      "name": "request_id",
      "in": "path"
    }
  ],
  "requestBody": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/TransferUpdate"
        }
      }
    },
    "required": true
  },
  "responses": {
    "200": {
      "description": "Successful Response",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/PublicTransferRequestRead"
          }
        }
      }
    },
    "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_transfer_request",
  "x-mcp-exposed": true,
  "x-public-path": "/v1/transfer_requests/{request_id}",
  "x-docs-kind": "update",
  "x-docs-order": 20,
  "x-docs-depth": 0,
  "x-docs-action-order": 1000,
  "x-codeSamples": [
    {
      "lang": "shell",
      "label": "curl",
      "source": "curl -X POST https://api.openmerchant.dev/v1/transfer_requests/... \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"idempotency_key\": \"...\",\n  \"expected_revision\": \"...\"\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_update_transfer_request\",\n    \"arguments\": {\n      \"request_id\": \"...\",\n      \"idempotency_key\": \"...\",\n      \"expected_revision\": \"...\"\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_transfer_request\",\n  arguments: {\n  \"request_id\": \"...\",\n  \"idempotency_key\": \"...\",\n  \"expected_revision\": \"...\"\n},\n});"
    }
  ]
}

GET /v1/transfer_documents/{document_id}

Retrieve transfer document metadata

Read scoped metadata and scanning progress. This response contains no document bytes, signed read URL, or storage path.

Parameters, request, responses, and security

{
  "tags": [
    "transfers"
  ],
  "summary": "Retrieve transfer document metadata",
  "description": "Read scoped metadata and scanning progress. This response contains no document bytes, signed read URL, or storage path.",
  "operationId": "v1_get_transfer_document",
  "parameters": [
    {
      "required": true,
      "schema": {
        "type": "string",
        "title": "Document Id"
      },
      "name": "document_id",
      "in": "path"
    }
  ],
  "responses": {
    "200": {
      "description": "Successful Response",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/InvoiceDocumentRead"
          }
        }
      }
    },
    "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_transfer_document",
  "x-mcp-exposed": true,
  "x-public-path": "/v1/transfer_documents/{document_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/transfer_documents/... \\\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_transfer_document\",\n    \"arguments\": {\n      \"document_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_transfer_document\",\n  arguments: {\n  \"document_id\": \"...\"\n},\n});"
    }
  ]
}

GET /v1/transfer_requests/{request_id}/documents

List transfer documents

Read the next bounded page using next_offset from the request's embedded documents section. No processing or provider calls are triggered.

Parameters, request, responses, and security

{
  "tags": [
    "transfers"
  ],
  "summary": "List transfer documents",
  "description": "Read the next bounded page using next_offset from the request's embedded documents section. No processing or provider calls are triggered.",
  "operationId": "v1_list_transfer_documents",
  "parameters": [
    {
      "required": true,
      "schema": {
        "type": "string",
        "title": "Request Id"
      },
      "name": "request_id",
      "in": "path"
    },
    {
      "required": false,
      "schema": {
        "type": "integer",
        "maximum": 100.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/TransferPage_InvoiceDocumentRead_"
          }
        }
      }
    },
    "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_transfer_documents",
  "x-mcp-exposed": true,
  "x-public-path": "/v1/transfer_requests/{request_id}/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 GET https://api.openmerchant.dev/v1/transfer_requests/.../documents \\\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_transfer_documents\",\n    \"arguments\": {\n      \"request_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_transfer_documents\",\n  arguments: {\n  \"request_id\": \"...\"\n},\n});"
    }
  ]
}

GET /v1/transfer_requests/{request_id}/evidence

List transfer evidence

Read the next bounded page using next_offset from the request's embedded evidence section. No processing or provider calls are triggered.

Parameters, request, responses, and security

{
  "tags": [
    "transfers"
  ],
  "summary": "List transfer evidence",
  "description": "Read the next bounded page using next_offset from the request's embedded evidence section. No processing or provider calls are triggered.",
  "operationId": "v1_list_transfer_evidence",
  "parameters": [
    {
      "required": true,
      "schema": {
        "type": "string",
        "title": "Request Id"
      },
      "name": "request_id",
      "in": "path"
    },
    {
      "required": false,
      "schema": {
        "type": "integer",
        "maximum": 100.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/TransferPage_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_list_transfer_evidence",
  "x-mcp-exposed": true,
  "x-public-path": "/v1/transfer_requests/{request_id}/evidence",
  "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/transfer_requests/.../evidence \\\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_transfer_evidence\",\n    \"arguments\": {\n      \"request_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_transfer_evidence\",\n  arguments: {\n  \"request_id\": \"...\"\n},\n});"
    }
  ]
}

GET /v1/transfer_requests/{request_id}/executions

List transfer executions

Read the next bounded page using next_offset from the request's embedded executions section. No processing or provider calls are triggered.

Parameters, request, responses, and security

{
  "tags": [
    "transfers"
  ],
  "summary": "List transfer executions",
  "description": "Read the next bounded page using next_offset from the request's embedded executions section. No processing or provider calls are triggered.",
  "operationId": "v1_list_transfer_executions",
  "parameters": [
    {
      "required": true,
      "schema": {
        "type": "string",
        "title": "Request Id"
      },
      "name": "request_id",
      "in": "path"
    },
    {
      "required": false,
      "schema": {
        "type": "integer",
        "maximum": 100.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/PublicTransferPage_TransferExecutionRead_"
          }
        }
      }
    },
    "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_transfer_executions",
  "x-mcp-exposed": true,
  "x-public-path": "/v1/transfer_requests/{request_id}/executions",
  "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/transfer_requests/.../executions \\\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_transfer_executions\",\n    \"arguments\": {\n      \"request_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_transfer_executions\",\n  arguments: {\n  \"request_id\": \"...\"\n},\n});"
    }
  ]
}

GET /v1/transfer_requests/{request_id}/submissions

List transfer submissions

Read the next bounded page using next_offset from the request's embedded submissions section. No processing or provider calls are triggered.

Parameters, request, responses, and security

{
  "tags": [
    "transfers"
  ],
  "summary": "List transfer submissions",
  "description": "Read the next bounded page using next_offset from the request's embedded submissions section. No processing or provider calls are triggered.",
  "operationId": "v1_list_transfer_submissions",
  "parameters": [
    {
      "required": true,
      "schema": {
        "type": "string",
        "title": "Request Id"
      },
      "name": "request_id",
      "in": "path"
    },
    {
      "required": false,
      "schema": {
        "type": "integer",
        "maximum": 100.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/TransferPage_TransferSubmissionRead_"
          }
        }
      }
    },
    "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_transfer_submissions",
  "x-mcp-exposed": true,
  "x-public-path": "/v1/transfer_requests/{request_id}/submissions",
  "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/transfer_requests/.../submissions \\\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_transfer_submissions\",\n    \"arguments\": {\n      \"request_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_transfer_submissions\",\n  arguments: {\n  \"request_id\": \"...\"\n},\n});"
    }
  ]
}

POST /v1/transfer_requests/{request_id}/submissions

Submit transfer evidence or corrected facts

Append a packet of invoice facts and optional documents, or a correction for an associated candidate. Documents may be reused within the same account and mode; original custody, consent, and retention remain authoritative. Requires the current request revision and an idempotency key. Submission never authorizes execution.

Parameters, request, responses, and security

{
  "tags": [
    "transfers"
  ],
  "summary": "Submit transfer evidence or corrected facts",
  "description": "Append a packet of invoice facts and optional documents, or a correction for an associated candidate. Documents may be reused within the same account and mode; original custody, consent, and retention remain authoritative. Requires the current request revision and an idempotency key. Submission never authorizes execution.",
  "operationId": "v1_create_transfer_submission",
  "parameters": [
    {
      "required": true,
      "schema": {
        "type": "string",
        "title": "Request Id"
      },
      "name": "request_id",
      "in": "path"
    }
  ],
  "requestBody": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/TransferSubmissionCreate"
        }
      }
    },
    "required": true
  },
  "responses": {
    "201": {
      "description": "Successful Response",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/TransferSubmissionRead"
          }
        }
      }
    },
    "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_transfer_submission",
  "x-mcp-exposed": true,
  "x-public-path": "/v1/transfer_requests/{request_id}/submissions",
  "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/transfer_requests/.../submissions \\\n  -H 'Authorization: Bearer pr_sk_test_...' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"idempotency_key\": \"...\",\n  \"expected_revision\": \"...\"\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_transfer_submission\",\n    \"arguments\": {\n      \"request_id\": \"...\",\n      \"idempotency_key\": \"...\",\n      \"expected_revision\": \"...\"\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_transfer_submission\",\n  arguments: {\n  \"request_id\": \"...\",\n  \"idempotency_key\": \"...\",\n  \"expected_revision\": \"...\"\n},\n});"
    }
  ]
}