{
  "openapi": "3.1.0",
  "info": {
    "title": "YembiPay",
    "description": "Universal payment settlement infrastructure for the Caribbean diaspora. Accepts any payment method \u2014 USDC, USDT, ACH, wire, credit/debit cards \u2014 and settles to local Caribbean bank accounts with real-time OFAC screening, GENIUS Act compliance, AML monitoring, and per-transaction compliance certificates.",
    "version": "2.0.0"
  },
  "paths": {
    "/v2/settle": {
      "post": {
        "tags": [
          "v2-settlements"
        ],
        "summary": "Initiate a universal settlement",
        "description": "Accept any supported payment method and initiate a settlement to a Caribbean bank account. Returns immediately with a settlement_id for polling. Crypto deposits remain input_pending until an independent Base receipt and ERC-20 Transfer verifier confirms them.",
        "operationId": "initiate_settlement_v2_v2_settle_post",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SettleRequestV2"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SettleResponseV2"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "description": "A caller-generated key that permanently identifies this settlement request within the authenticated organization.",
            "schema": {
              "type": "string",
              "minLength": 16,
              "maxLength": 128,
              "pattern": "^[A-Za-z0-9._:-]+$"
            }
          }
        ]
      }
    },
    "/v2/settle/{settlement_id}": {
      "get": {
        "tags": [
          "v2-settlements"
        ],
        "summary": "Poll settlement status",
        "description": "Get the current status of a settlement. Poll this endpoint for async payments (ACH/wire).",
        "operationId": "get_settlement_status_v2_v2_settle__settlement_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "settlement_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 64,
              "title": "Settlement Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Response Get Settlement Status V2 V2 Settle  Settlement Id  Get"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v2/estimate": {
      "post": {
        "tags": [
          "v2-settlements"
        ],
        "summary": "Get fee + FX breakdown",
        "description": "Calculate the full cost breakdown for a settlement before committing. Returns input fees, platform fees, FX rate, and delivery estimate. Rate lock expires in 30 seconds \u2014 use this for display only.",
        "operationId": "estimate_v2_v2_estimate_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EstimateRequestV2"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EstimateResponseV2"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v2/payment-methods": {
      "get": {
        "tags": [
          "v2-settlements"
        ],
        "summary": "List supported payment methods",
        "description": "Returns all payment methods YembiPay supports, with live vs. coming_soon status.",
        "operationId": "list_methods_v2_v2_payment_methods_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Response List Methods V2 V2 Payment Methods Get"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v2/webhooks/stripe": {
      "post": {
        "tags": [
          "webhooks-inbound"
        ],
        "summary": "Stripe Webhook",
        "description": "Handle inbound Stripe webhook events.\n\nVerifies the Stripe-Signature header. Returns 200 immediately after\nenqueueing work \u2014 Stripe considers any non-2xx a delivery failure and\nretries with exponential backoff.",
        "operationId": "stripe_webhook_v2_webhooks_stripe_post",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/v2/webhooks/modern-treasury": {
      "post": {
        "tags": [
          "webhooks-inbound"
        ],
        "summary": "Modern Treasury Webhook",
        "description": "Handle inbound Modern Treasury webhook events.\n\nVerifies X-Signature HMAC-SHA256 and applies Expected Payment evidence.",
        "operationId": "modern_treasury_webhook_v2_webhooks_modern_treasury_post",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/v2/plaid/link-token": {
      "post": {
        "tags": [
          "plaid"
        ],
        "summary": "Create Plaid Link Token",
        "description": "Create a Plaid Link token.\n\nThe frontend passes this to the Plaid Link SDK to open the bank login UI.\nTokens expire after 30 minutes.",
        "operationId": "create_plaid_link_token_v2_plaid_link_token_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LinkTokenRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LinkTokenResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v2/plaid/exchange": {
      "post": {
        "tags": [
          "plaid"
        ],
        "summary": "Exchange Plaid Token",
        "description": "Exchange a Plaid public_token for a stored access_token.\n\nCalled after the user completes Plaid Link. The encrypted access_token\nis returned to the caller for storage in their org profile. It must be\npassed as `plaid_account_token` in subsequent ACH settlement requests.\n\nThe access token is AES-256-GCM encrypted \u2014 raw Plaid credentials are\nnever stored in plaintext in YembiPay's database.",
        "operationId": "exchange_plaid_token_v2_plaid_exchange_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExchangeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExchangeResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/consumer/auth/request-otp": {
      "post": {
        "tags": [
          "consumer-bff"
        ],
        "summary": "Request Otp Endpoint",
        "operationId": "request_otp_endpoint_consumer_auth_request_otp_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RequestOTPBody"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/consumer/auth/verify-otp": {
      "post": {
        "tags": [
          "consumer-bff"
        ],
        "summary": "Verify Otp Endpoint",
        "operationId": "verify_otp_endpoint_consumer_auth_verify_otp_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VerifyOTPBody"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/consumer/me": {
      "get": {
        "tags": [
          "consumer-bff"
        ],
        "summary": "Me",
        "operationId": "me_consumer_me_get",
        "parameters": [
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 256
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MeResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/consumer/recipients": {
      "get": {
        "tags": [
          "consumer-bff"
        ],
        "summary": "List Recipients",
        "operationId": "list_recipients_consumer_recipients_get",
        "parameters": [
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 256
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/app__api__consumer__routes__RecipientResponse"
                  },
                  "title": "Response List Recipients Consumer Recipients Get"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "consumer-bff"
        ],
        "summary": "Add Recipient",
        "operationId": "add_recipient_consumer_recipients_post",
        "parameters": [
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 256
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RecipientBody"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/app__api__consumer__routes__RecipientResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/consumer/quote": {
      "post": {
        "tags": [
          "consumer-bff"
        ],
        "summary": "Quote",
        "operationId": "quote_consumer_quote_post",
        "parameters": [
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 256
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/consumer/transfers": {
      "post": {
        "tags": [
          "consumer-bff"
        ],
        "summary": "Create Transfer",
        "operationId": "create_transfer_consumer_transfers_post",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 16,
              "maxLength": 128,
              "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]+$",
              "title": "Idempotency-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 256
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TransferBody"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/app__api__consumer__routes__TransferResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "consumer-bff"
        ],
        "summary": "List Transfers",
        "operationId": "list_transfers_consumer_transfers_get",
        "parameters": [
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 256
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/app__api__consumer__routes__TransferResponse"
                  },
                  "title": "Response List Transfers Consumer Transfers Get"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/consumer/transfers/{transfer_id}": {
      "get": {
        "tags": [
          "consumer-bff"
        ],
        "summary": "Get Transfer",
        "operationId": "get_transfer_consumer_transfers__transfer_id__get",
        "parameters": [
          {
            "name": "transfer_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Transfer Id"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 256
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/app__api__consumer__routes__TransferResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/orgs": {
      "post": {
        "tags": [
          "organizations"
        ],
        "summary": "Create Organization",
        "description": "Create a new organization and get your first API key.\n\nThis is the onboarding entry point \u2014 no auth required.\nThe response includes a raw API key that is shown ONCE.",
        "operationId": "create_organization_v1_orgs_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateOrganizationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/orgs/{org_id}": {
      "get": {
        "tags": [
          "organizations"
        ],
        "summary": "Get Organization",
        "operationId": "get_organization_v1_orgs__org_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Org Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/orgs/{org_id}/keys": {
      "post": {
        "tags": [
          "organizations"
        ],
        "summary": "Create Api Key",
        "description": "Generate a new API key for your org.",
        "operationId": "create_api_key_v1_orgs__org_id__keys_post",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Org Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateApiKeyRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "organizations"
        ],
        "summary": "List Api Keys",
        "operationId": "list_api_keys_v1_orgs__org_id__keys_get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Org Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/orgs/keys/{key_id}/rotate": {
      "post": {
        "tags": [
          "organizations"
        ],
        "summary": "Rotate Api Key",
        "description": "Rotate an API key \u2014 old key immediately invalid, new key returned.",
        "operationId": "rotate_api_key_v1_orgs_keys__key_id__rotate_post",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "key_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Key Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/orgs/keys/{key_id}": {
      "delete": {
        "tags": [
          "organizations"
        ],
        "summary": "Revoke Api Key",
        "description": "Permanently revoke an API key.",
        "operationId": "revoke_api_key_v1_orgs_keys__key_id__delete",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "key_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Key Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/recipients": {
      "post": {
        "tags": [
          "recipients"
        ],
        "summary": "Create Recipient",
        "description": "Register a new recipient (vendor/contractor) for payments.",
        "operationId": "create_recipient_v1_recipients_post",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateRecipientRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/app__schemas__recipient__RecipientResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "recipients"
        ],
        "summary": "List Recipients",
        "description": "List all recipients for the authenticated organization.",
        "operationId": "list_recipients_v1_recipients_get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 1000000,
              "minimum": 0,
              "default": 0,
              "title": "Offset"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/app__schemas__recipient__RecipientResponse"
                  },
                  "title": "Response List Recipients V1 Recipients Get"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/recipients/{recipient_id}": {
      "get": {
        "tags": [
          "recipients"
        ],
        "summary": "Get Recipient",
        "description": "Get a single recipient owned by the authenticated organization.",
        "operationId": "get_recipient_v1_recipients__recipient_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "recipient_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Recipient Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/app__schemas__recipient__RecipientResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "recipients"
        ],
        "summary": "Update Recipient",
        "description": "Update mutable fields on a recipient (name, bank, mobile details).\n\nOnly fields present in the request body are changed.",
        "operationId": "update_recipient_v1_recipients__recipient_id__put",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "recipient_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Recipient Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateRecipientRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/app__schemas__recipient__RecipientResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "recipients"
        ],
        "summary": "Deactivate Recipient",
        "description": "Soft-delete a recipient by deactivating it.\n\nThe record is retained for audit and historical settlement integrity;\nits is_active flag is set to False.",
        "operationId": "deactivate_recipient_v1_recipients__recipient_id__delete",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "recipient_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Recipient Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/app__schemas__recipient__RecipientResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/kyc/verify": {
      "post": {
        "tags": [
          "KYC/KYB"
        ],
        "summary": "Start Verification",
        "description": "Initiate KYC/KYB verification for a recipient.\n\nBody: {recipient_id, org_id, verification_type?, document_type?, document_country?}\n\nIn production: returns a URL for the recipient to upload identity documents.",
        "operationId": "start_verification_v1_kyc_verify_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StartVerificationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/kyc/{verification_id}/complete": {
      "post": {
        "tags": [
          "KYC/KYB"
        ],
        "summary": "Complete Verification Endpoint",
        "description": "Complete a verification (approve or reject).\n\nIn production: called by webhook from Persona/Onfido.\nFor MVP: called directly.\n\nBody: {status: \"verified\"|\"rejected\", verified_name?, rejection_reason?}",
        "operationId": "complete_verification_endpoint_v1_kyc__verification_id__complete_post",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "verification_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Verification Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CompleteVerificationRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/kyc/status/{recipient_id}": {
      "get": {
        "tags": [
          "KYC/KYB"
        ],
        "summary": "Check Verification",
        "description": "Check the KYC/KYB verification status of a recipient.",
        "operationId": "check_verification_v1_kyc_status__recipient_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "recipient_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Recipient Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/kyc/sumsub/applicant": {
      "post": {
        "tags": [
          "KYC/KYB"
        ],
        "summary": "Create Sumsub Applicant",
        "description": "Create a Sumsub applicant and initiate KYC verification.\n\nBody: {recipient_id, org_id, email?, phone?, country?}\n\nReturns the Sumsub applicant ID and an SDK access token for the\nfrontend to render the verification widget.",
        "operationId": "create_sumsub_applicant_v1_kyc_sumsub_applicant_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateSumsubApplicantRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/wallets": {
      "post": {
        "tags": [
          "wallets"
        ],
        "summary": "Create Wallet",
        "description": "Create a new MPC-ready Safe-Wallet for an organization.\n\nRequires at least 2 signer addresses (CEO, CFO, Compliance Officer, etc.).\nThe `required_signatures` field sets the M-of-N threshold.",
        "operationId": "create_wallet_v1_wallets_post",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateWalletRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WalletResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "wallets"
        ],
        "summary": "List Wallets",
        "description": "List all Safe-Wallets for the authenticated organization.",
        "operationId": "list_wallets_v1_wallets_get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 1000000,
              "minimum": 0,
              "default": 0,
              "title": "Offset"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WalletResponse"
                  },
                  "title": "Response List Wallets V1 Wallets Get"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/wallets/{wallet_id}": {
      "get": {
        "tags": [
          "wallets"
        ],
        "summary": "Get Wallet",
        "description": "Get a single Safe-Wallet owned by the authenticated organization.",
        "operationId": "get_wallet_v1_wallets__wallet_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "wallet_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Wallet Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WalletResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/fees/estimate": {
      "post": {
        "tags": [
          "fees"
        ],
        "summary": "Get Fee Estimate",
        "description": "Estimate total fees and recipient payout for a proposed payment.\n\nReturns:\n- Platform fee (0.5% capped at $50)\n- Gas fee (Base L2, typically < $0.01)\n- Off-ramp fee (varies by corridor)\n- FX rate and estimated local currency amount",
        "operationId": "get_fee_estimate_v1_fees_estimate_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FeeEstimateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FeeEstimateResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/caribbean/estimate": {
      "post": {
        "tags": [
          "caribbean-offramp"
        ],
        "summary": "Estimate Caribbean Offramp",
        "description": "Get a fee and FX estimate for a Caribbean off-ramp.\n\nCall this before initiating a settlement to show the sender\nwhat the recipient will receive.",
        "operationId": "estimate_caribbean_offramp_v1_caribbean_estimate_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OfframpEstimateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OfframpEstimateResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/caribbean/settle": {
      "post": {
        "tags": [
          "caribbean-offramp"
        ],
        "summary": "Settle Caribbean Offramp",
        "description": "Settle USDC into a Caribbean bank account.\n\nThis is the primary API endpoint. It:\n  1. Screens the sender wallet for sanctions\n  2. Validates Travel Rule data if amount >= $3,000\n  3. Converts USDC to local currency\n  4. Routes to JamClear (Jamaica), Safe-tt (T&T), or ECCB\n  5. Records in the shadow ledger with compliance cert\n  6. Returns settlement confirmation",
        "operationId": "settle_caribbean_offramp_v1_caribbean_settle_post",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 16,
                  "maxLength": 128,
                  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]+$"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Unique key to prevent duplicate settlements",
              "title": "Idempotency-Key"
            },
            "description": "Unique key to prevent duplicate settlements"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CaribbeanOfframpRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaribbeanOfframpResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/caribbean/certificate/{cert_id}": {
      "get": {
        "tags": [
          "caribbean-offramp"
        ],
        "summary": "Download Certificate",
        "description": "Stream the exact immutable certificate owned by the caller.",
        "operationId": "download_certificate_v1_caribbean_certificate__cert_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "cert_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 37,
              "maxLength": 37,
              "pattern": "^CERT-[0-9A-F]{32}$",
              "title": "Cert Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/caribbean/certificate/{cert_id}/verify": {
      "get": {
        "tags": [
          "caribbean-offramp"
        ],
        "summary": "Verify Certificate Endpoint",
        "description": "Verify one persisted owner-bound certificate and its stored anchor.",
        "operationId": "verify_certificate_endpoint_v1_caribbean_certificate__cert_id__verify_get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "cert_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 37,
              "maxLength": 37,
              "pattern": "^CERT-[0-9A-F]{32}$",
              "title": "Cert Id"
            }
          },
          {
            "name": "settlement_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 64,
              "title": "Settlement Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/caribbean/corridors": {
      "get": {
        "tags": [
          "caribbean-offramp"
        ],
        "summary": "List Supported Corridors",
        "description": "List all supported Caribbean off-ramp corridors with current rates.",
        "operationId": "list_supported_corridors_v1_caribbean_corridors_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/caribbean/settlements": {
      "get": {
        "tags": [
          "caribbean-offramp"
        ],
        "summary": "List Settlements",
        "description": "List settlements for the authenticated organization, newest first.\n\nPaginated via ``limit`` and ``offset`` query parameters. Only settlements\nowned by the API key's organization are returned.",
        "operationId": "list_settlements_v1_caribbean_settlements_get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 1000000,
              "minimum": 0,
              "default": 0,
              "title": "Offset"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SettlementResponse"
                  },
                  "title": "Response List Settlements V1 Caribbean Settlements Get"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/caribbean/settlements/{settlement_id}": {
      "get": {
        "tags": [
          "caribbean-offramp"
        ],
        "summary": "Get Settlement",
        "description": "Fetch a single settlement by its business key, org-scoped.",
        "operationId": "get_settlement_v1_caribbean_settlements__settlement_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "settlement_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 64,
              "title": "Settlement Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SettlementResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/transfers": {
      "post": {
        "tags": [
          "transfers"
        ],
        "summary": "Initiate Transfer",
        "description": "Initiate a USDC transfer from the corporate treasury to a vendor wallet.\n\nHeaders:\n  - `Idempotency-Key` (recommended): Prevents duplicate payments on retries.\n\nFlow:\n  1. Check idempotency cache \u2014 return cached response if replay.\n  2. Run pre-flight pipeline (Kill Switch, KYC, Approvals).\n  3. Enforce Travel Rule if amount >= $3,000.\n  4. Create a PENDING Shadow Ledger entry.\n  5. Run compliance/sanctions check.\n  6. If sanctioned \u2192 BLOCKED.\n  7. If compliant \u2192 submit on-chain tx \u2192 SUBMITTED.\n  8. Record billing usage + audit log.\n  9. Cache the response for idempotent replay.",
        "operationId": "initiate_transfer_v1_transfers_post",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 16,
                  "maxLength": 128,
                  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]+$"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Idempotency-Key"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TransferRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/app__schemas__transfer__TransferResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "transfers"
        ],
        "summary": "List Transfers",
        "description": "List transfers for the authenticated organization, newest first.\n\nPaginated via `limit` (1-200, default 50) and `offset` (default 0).",
        "operationId": "list_transfers_v1_transfers_get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 200,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0,
              "title": "Offset"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LedgerEntryResponse"
                  },
                  "title": "Response List Transfers V1 Transfers Get"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/transfers/{transfer_id}": {
      "get": {
        "tags": [
          "transfers"
        ],
        "summary": "Get Transfer",
        "description": "Fetch a single transfer (ledger entry) by id, scoped to the org.",
        "operationId": "get_transfer_v1_transfers__transfer_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "transfer_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Transfer Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LedgerEntryResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/approvals": {
      "post": {
        "tags": [
          "approvals"
        ],
        "summary": "Create Approval",
        "description": "Create an approval request for a large transfer.\n\nTransfers >= $10,000 are automatically routed here instead of\nexecuting immediately. The transfer only fires after M-of-N approvals.",
        "operationId": "create_approval_v1_approvals_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateApprovalRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/approvals/pending/{org_id}": {
      "get": {
        "tags": [
          "approvals"
        ],
        "summary": "List Pending Approvals",
        "description": "List all transfers waiting for approval.",
        "operationId": "list_pending_approvals_v1_approvals_pending__org_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Org Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/approvals/{request_id}/votes": {
      "get": {
        "tags": [
          "approvals"
        ],
        "summary": "List Votes",
        "description": "List all votes for an approval request (audit trail).",
        "operationId": "list_votes_v1_approvals__request_id__votes_get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "request_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Request Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/batch/payroll": {
      "post": {
        "tags": [
          "batch payroll"
        ],
        "summary": "Run Batch Payroll",
        "description": "Execute a batch payroll run \u2014 pay all recipients in one call.\n\nEach payment is processed independently through the full pipeline:\n1. System pause check (blocks entire batch).\n2. Look up recipient's wallet address.\n3. Check wallet freeze (Kill Switch).\n4. Check KYC verification (>= $1,000).\n5. Enforce Travel Rule if amount >= $3,000.\n6. Run compliance/sanctions check.\n7. Submit on-chain transfer.\n8. Record billing usage + audit log.\n\nOne failure does NOT block the rest of the batch.",
        "operationId": "run_batch_payroll_v1_batch_payroll_post",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 16,
                  "maxLength": 128,
                  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]+$"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Idempotency-Key"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchPayrollRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchPayrollResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/batch": {
      "get": {
        "tags": [
          "batch payroll"
        ],
        "summary": "List Batches",
        "description": "List batch payroll runs for the organization (newest first).",
        "operationId": "list_batches_v1_batch_get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 200,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0,
              "title": "Offset"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BatchRunResponse"
                  },
                  "title": "Response List Batches V1 Batch Get"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/batch/{batch_id}": {
      "get": {
        "tags": [
          "batch payroll"
        ],
        "summary": "Get Batch",
        "description": "Fetch a single batch payroll run by id, org-scoped.",
        "operationId": "get_batch_v1_batch__batch_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "batch_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Batch Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchRunResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/schedules": {
      "post": {
        "tags": [
          "payroll schedules"
        ],
        "summary": "Create Payroll Schedule",
        "description": "Create a recurring payroll schedule.\n\nBody:\n```json\n{\n  \"org_id\": \"org-001\",\n  \"name\": \"LATAM Biweekly Payroll\",\n  \"frequency\": \"biweekly\",\n  \"day_value\": 4,\n  \"payment_template\": [\n    {\"recipient_id\": \"rec-001\", \"amount_usdc\": 2400.0, \"memo\": \"Salary\"},\n    {\"recipient_id\": \"rec-002\", \"amount_usdc\": 1800.0, \"memo\": \"Salary\"}\n  ]\n}\n```\n\nFrequencies: weekly, biweekly, monthly, custom.\nday_value: For monthly = day of month (1-28). For weekly/biweekly = day of week (0=Mon, 4=Fri).",
        "operationId": "create_payroll_schedule_v1_schedules_post",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePayrollScheduleRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "payroll schedules"
        ],
        "summary": "Get Schedules",
        "description": "List all payroll schedules for an organization.",
        "operationId": "get_schedules_v1_schedules_get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "org_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Org Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/schedules/{schedule_id}/pause": {
      "patch": {
        "tags": [
          "payroll schedules"
        ],
        "summary": "Pause Schedule",
        "description": "Pause a recurring payroll schedule.",
        "operationId": "pause_schedule_v1_schedules__schedule_id__pause_patch",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "schedule_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Schedule Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/schedules/{schedule_id}/resume": {
      "patch": {
        "tags": [
          "payroll schedules"
        ],
        "summary": "Resume Schedule",
        "description": "Resume a paused payroll schedule.",
        "operationId": "resume_schedule_v1_schedules__schedule_id__resume_patch",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "schedule_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Schedule Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/schedules/{schedule_id}": {
      "get": {
        "tags": [
          "payroll schedules"
        ],
        "summary": "Get Schedule",
        "description": "Fetch a single payroll schedule by id, scoped to the caller's org.",
        "operationId": "get_schedule_v1_schedules__schedule_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "schedule_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Schedule Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayrollScheduleResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "payroll schedules"
        ],
        "summary": "Update Schedule",
        "description": "Update mutable fields of a payroll schedule.\n\nAll body fields are optional \u2014 only the fields provided are applied:\n- name: schedule label\n- frequency: weekly, biweekly, monthly, custom\n- day_value: day of month (1-28) or day of week (0=Mon, 4=Fri)\n- payment_template: list of {recipient_id, amount_usdc, memo}\n- is_active: false to pause, true to resume\n\nChanging frequency or day_value recomputes next_run_at for active schedules.",
        "operationId": "update_schedule_v1_schedules__schedule_id__put",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "schedule_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Schedule Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePayrollScheduleRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayrollScheduleResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "payroll schedules"
        ],
        "summary": "Delete Schedule",
        "description": "Soft-delete (deactivate) a payroll schedule.\n\nThe schedule is not removed \u2014 its `is_active` flag is set to False and its\nnext run is cleared so the scheduler never picks it up again. History is\nretained for audit purposes.",
        "operationId": "delete_schedule_v1_schedules__schedule_id__delete",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "schedule_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Schedule Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayrollScheduleResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/compliance/{wallet_address}": {
      "get": {
        "tags": [
          "compliance"
        ],
        "summary": "Get Compliance Status",
        "description": "Check whether a wallet address is compliant for receiving USDC payments.\n\nRuns:\n- OFAC sanctions list lookup\n- GENIUS Act DASP registry check\n- Risk scoring",
        "operationId": "get_compliance_status_v1_compliance__wallet_address__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "wallet_address",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 42,
              "maxLength": 42,
              "pattern": "^0x[0-9a-fA-F]{40}$",
              "title": "Wallet Address"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ComplianceCheckResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/ofac/ingest": {
      "post": {
        "tags": [
          "OFAC SDN"
        ],
        "summary": "Ingest Sdn List",
        "description": "Download and ingest the latest OFAC SDN list from US Treasury.\n\nThis endpoint should be called by a daily cron job in production.\nParses the official CSV and upserts ~20,000+ entries into PostgreSQL.",
        "operationId": "ingest_sdn_list_v1_ofac_ingest_post",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/ofac/stats": {
      "get": {
        "tags": [
          "OFAC SDN"
        ],
        "summary": "Sdn Stats",
        "description": "Return stats about the loaded OFAC SDN database.",
        "operationId": "sdn_stats_v1_ofac_stats_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/ofac/screen/name": {
      "get": {
        "tags": [
          "OFAC SDN"
        ],
        "summary": "Screen Name",
        "description": "Screen an entity name against the OFAC SDN list.\n\nReturns matching entries with similarity scores.\nUses normalized fuzzy matching with configurable threshold.",
        "operationId": "screen_name_v1_ofac_screen_name_get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "name",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 2,
              "maxLength": 256,
              "title": "Name"
            }
          },
          {
            "name": "threshold",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "maximum": 1.0,
              "minimum": 0.5,
              "default": 0.7,
              "title": "Threshold"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/ofac/screen/wallet/{wallet_address}": {
      "get": {
        "tags": [
          "OFAC SDN"
        ],
        "summary": "Deep Screen Wallet",
        "description": "Deep compliance check \u2014 full OFAC SDN screening.\n\nChecks wallet address against SDN crypto addresses and optionally\nscreens entity name for fuzzy matches. This is the production-grade\ncheck used before large transfers.",
        "operationId": "deep_screen_wallet_v1_ofac_screen_wallet__wallet_address__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "wallet_address",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 42,
              "maxLength": 42,
              "pattern": "^0x[0-9a-fA-F]{40}$",
              "title": "Wallet Address"
            }
          },
          {
            "name": "entity_name",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 256
                },
                {
                  "type": "null"
                }
              ],
              "title": "Entity Name"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/kill-switch/freeze": {
      "post": {
        "tags": [
          "kill-switch"
        ],
        "summary": "Freeze Wallet",
        "description": "Freeze a wallet \u2014 all transfers to/from this address are blocked.",
        "operationId": "freeze_wallet_v1_kill_switch_freeze_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FreezeWalletRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/kill-switch/unfreeze/{freeze_id}": {
      "post": {
        "tags": [
          "kill-switch"
        ],
        "summary": "Lift Freeze",
        "description": "Lift a wallet freeze \u2014 requires compliance officer authorization.",
        "operationId": "lift_freeze_v1_kill_switch_unfreeze__freeze_id__post",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "freeze_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Freeze Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LiftFreezeRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/kill-switch/check/{wallet_address}": {
      "get": {
        "tags": [
          "kill-switch"
        ],
        "summary": "Check Wallet",
        "description": "Check if a wallet is frozen.",
        "operationId": "check_wallet_v1_kill_switch_check__wallet_address__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "wallet_address",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 42,
              "maxLength": 42,
              "pattern": "^0x[0-9a-fA-F]{40}$",
              "title": "Wallet Address"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/kill-switch/freezes": {
      "get": {
        "tags": [
          "kill-switch"
        ],
        "summary": "List Freezes",
        "description": "List all active wallet freezes.",
        "operationId": "list_freezes_v1_kill_switch_freezes_get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "wallet_address",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 42,
                  "maxLength": 42,
                  "pattern": "^0x[0-9a-fA-F]{40}$"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Wallet Address"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/kill-switch/pause": {
      "post": {
        "tags": [
          "kill-switch"
        ],
        "summary": "Activate Global Pause",
        "description": "EMERGENCY: Halt ALL transfers system-wide.",
        "operationId": "activate_global_pause_v1_kill_switch_pause_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GlobalPauseRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/kill-switch/resume/{pause_id}": {
      "post": {
        "tags": [
          "kill-switch"
        ],
        "summary": "Deactivate Global Pause",
        "description": "Resume transfers after an emergency pause.",
        "operationId": "deactivate_global_pause_v1_kill_switch_resume__pause_id__post",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "pause_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Pause Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeactivatePauseRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/kill-switch/status": {
      "get": {
        "tags": [
          "kill-switch"
        ],
        "summary": "System Status",
        "description": "Get overall kill switch status \u2014 is the system paused?",
        "operationId": "system_status_v1_kill_switch_status_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/accounting/connect": {
      "post": {
        "tags": [
          "accounting"
        ],
        "summary": "Connect Accounting",
        "description": "Connect an accounting system via OAuth.\n\nIn production: redirects to QuickBooks/Xero OAuth flow.\nFor MVP: accepts tokens directly.\n\nBody: {org_id, provider, access_token, refresh_token, realm_id?}",
        "operationId": "connect_accounting_v1_accounting_connect_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConnectAccountingRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/accounting/connection/{org_id}": {
      "get": {
        "tags": [
          "accounting"
        ],
        "summary": "Get Accounting Connection",
        "description": "Check if an org has an active accounting connection.",
        "operationId": "get_accounting_connection_v1_accounting_connection__org_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Org Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/accounting/invoices/sync": {
      "post": {
        "tags": [
          "accounting"
        ],
        "summary": "Sync Invoices Endpoint",
        "description": "Sync invoices from QuickBooks/Xero.\n\nIn production: pulls open invoices via the accounting API.\nFor MVP: accepts invoice data directly.\n\nBody: {org_id, invoices: [{external_id, vendor_name, amount_usd, due_date?}]}",
        "operationId": "sync_invoices_endpoint_v1_accounting_invoices_sync_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SyncInvoicesRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/accounting/reconcile/{org_id}": {
      "post": {
        "tags": [
          "accounting"
        ],
        "summary": "Reconcile Endpoint",
        "description": "Auto-reconcile Shadow Ledger entries against open invoices.\n\nMatches USDC payments to invoices by amount and marks them as\nreconciled. This is the feature that makes the CFO never leave.\n\nIn production: also calls QuickBooks/Xero API to mark invoices as paid.",
        "operationId": "reconcile_endpoint_v1_accounting_reconcile__org_id__post",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Org Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/accounting/reconciliation/{org_id}": {
      "get": {
        "tags": [
          "accounting"
        ],
        "summary": "Reconciliation Status",
        "description": "Get reconciliation summary \u2014 how many invoices are matched vs open.",
        "operationId": "reconciliation_status_v1_accounting_reconciliation__org_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Org Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/proofs/generate": {
      "post": {
        "tags": [
          "ZK audit proofs"
        ],
        "summary": "Generate Proof",
        "description": "Generate a ZK audit proof for a period.\n\nBody: {org_id, period}\nPeriod format: \"2026-Q1\" (quarterly) or \"2026-02\" (monthly)\n\nReturns a proof that can be shared with regulators.\nThe regulator can verify every transaction was compliant\nwithout seeing your vendor list or payment amounts.",
        "operationId": "generate_proof_v1_proofs_generate_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GenerateProofRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/proofs/verify/{proof_id}": {
      "get": {
        "tags": [
          "ZK audit proofs"
        ],
        "summary": "Verify Proof Endpoint",
        "description": "Verify a ZK audit proof.\n\nReturns whether the proof is internally consistent.\nA regulator can call this to confirm the proof hasn't been tampered with.",
        "operationId": "verify_proof_endpoint_v1_proofs_verify__proof_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "proof_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Proof Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/proofs/{org_id}": {
      "get": {
        "tags": [
          "ZK audit proofs"
        ],
        "summary": "List Org Proofs",
        "description": "List all generated proofs for an organization.",
        "operationId": "list_org_proofs_v1_proofs__org_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Org Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/billing/usage/{org_id}": {
      "get": {
        "tags": [
          "billing"
        ],
        "summary": "Get Usage",
        "description": "Get usage metrics for a billing period (defaults to current month).",
        "operationId": "get_usage_v1_billing_usage__org_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Org Id"
            }
          },
          {
            "name": "period",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 7,
                  "maxLength": 7,
                  "pattern": "^[0-9]{4}-(?:0[1-9]|1[0-2])$"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Period"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/billing/invoices/generate": {
      "post": {
        "tags": [
          "billing"
        ],
        "summary": "Generate Invoice",
        "description": "Generate a monthly invoice for an org.",
        "operationId": "generate_invoice_v1_billing_invoices_generate_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GenerateInvoiceRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/billing/invoices/{invoice_id}/issue": {
      "post": {
        "tags": [
          "billing"
        ],
        "summary": "Issue Invoice",
        "description": "Mark a draft invoice as issued.",
        "operationId": "issue_invoice_v1_billing_invoices__invoice_id__issue_post",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "invoice_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Invoice Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/billing/invoices/{invoice_id}/paid": {
      "post": {
        "tags": [
          "billing"
        ],
        "summary": "Mark Paid",
        "description": "Mark an invoice as paid.",
        "operationId": "mark_paid_v1_billing_invoices__invoice_id__paid_post",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "invoice_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Invoice Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/billing/invoices/{org_id}": {
      "get": {
        "tags": [
          "billing"
        ],
        "summary": "List Invoices",
        "description": "List all invoices for an org.",
        "operationId": "list_invoices_v1_billing_invoices__org_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Org Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/dashboard/{org_id}/summary": {
      "get": {
        "tags": [
          "dashboard"
        ],
        "summary": "Org Summary",
        "description": "Dashboard home screen \u2014 key metrics at a glance.\n\nReturns: total transactions, volume, blocked count, recipient count,\npending yield-back rebates.",
        "operationId": "org_summary_v1_dashboard__org_id__summary_get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Org Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/dashboard/{org_id}/compliance-report": {
      "get": {
        "tags": [
          "dashboard"
        ],
        "summary": "Compliance Report",
        "description": "Compliance report for auditors.\n\nIncludes: compliance rate, blocked transaction details, OFAC SDN\ndatabase health, and breakdown by status.",
        "operationId": "compliance_report_v1_dashboard__org_id__compliance_report_get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Org Id"
            }
          },
          {
            "name": "period",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 7,
                  "maxLength": 7,
                  "pattern": "^[0-9]{4}-(?:0[1-9]|1[0-2])$"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Filter by month (YYYY-MM)",
              "title": "Period"
            },
            "description": "Filter by month (YYYY-MM)"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/dashboard/{org_id}/volume-by-country": {
      "get": {
        "tags": [
          "dashboard"
        ],
        "summary": "Volume By Country",
        "description": "Payment volume broken down by recipient country.\n\nShows which corridors have the most volume \u2014 useful for\ncorridor-specific fee optimization and compliance prioritization.",
        "operationId": "volume_by_country_v1_dashboard__org_id__volume_by_country_get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Org Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/dashboard/{org_id}/rebates": {
      "get": {
        "tags": [
          "dashboard"
        ],
        "summary": "Rebate History",
        "description": "Yield-back rebate history \u2014 accumulated rebates by period.\n\nShows monthly volume, rebate rate, calculated rebate amount,\nand whether it's been distributed yet.",
        "operationId": "rebate_history_v1_dashboard__org_id__rebates_get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Org Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 36,
              "default": 12,
              "title": "Limit"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/ledger/entry/{entry_id}": {
      "get": {
        "tags": [
          "ledger"
        ],
        "summary": "Get Transfer Status",
        "description": "Get the status of a single transfer by ledger entry ID.",
        "operationId": "get_transfer_status_v1_ledger_entry__entry_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "entry_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Entry Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/ledger/{org_id}": {
      "get": {
        "tags": [
          "ledger"
        ],
        "summary": "Get Org Ledger",
        "description": "Return recent Shadow Ledger entries for an organization.\n\nThis is the GAAP-compliant audit trail that maps on-chain transactions\nto internal org IDs and compliance certificates.",
        "operationId": "get_org_ledger_v1_ledger__org_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Org Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 200,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/audit-log/{org_id}": {
      "get": {
        "tags": [
          "audit-log"
        ],
        "summary": "Get Audit Log",
        "description": "Query the audit log for an organization.",
        "operationId": "get_audit_log_v1_audit_log__org_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Org Id"
            }
          },
          {
            "name": "action",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ],
              "title": "Action"
            }
          },
          {
            "name": "resource_type",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ],
              "title": "Resource Type"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 500,
              "minimum": 1,
              "default": 100,
              "title": "Limit"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 1000000,
              "minimum": 0,
              "default": 0,
              "title": "Offset"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/audit-log/{org_id}/count": {
      "get": {
        "tags": [
          "audit-log"
        ],
        "summary": "Count Audit Entries",
        "description": "Count audit log entries for an org.",
        "operationId": "count_audit_entries_v1_audit_log__org_id__count_get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Org Id"
            }
          },
          {
            "name": "action",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ],
              "title": "Action"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/audit-log/{org_id}/integrity": {
      "get": {
        "tags": [
          "audit-log"
        ],
        "summary": "Verify Audit Integrity",
        "description": "SOC 2 CC6.3 \u2014 Verify audit log hash chain integrity.\n\nWalks the entire audit chain for an org and verifies that each\nentry's hash matches the recomputed value. Any mismatch indicates\nthe log has been tampered with.",
        "operationId": "verify_audit_integrity_v1_audit_log__org_id__integrity_get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Org Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/webhooks": {
      "get": {
        "tags": [
          "webhooks"
        ],
        "summary": "List Webhooks",
        "description": "List all webhook subscriptions for an organization.\n\nReturns both active and paused subscriptions.",
        "operationId": "list_webhooks_v1_webhooks_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/WebhookResponse"
                  },
                  "type": "array",
                  "title": "Response List Webhooks V1 Webhooks Get"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      },
      "post": {
        "tags": [
          "webhooks"
        ],
        "summary": "Register Webhook",
        "description": "Register a webhook URL to receive payment status notifications.\n\nEvents delivered:\n- settlement.created, settlement.completed, settlement.failed\n- transfer.submitted, transfer.confirmed, transfer.failed, transfer.blocked\n- offramp.initiated, offramp.completed\n- batch.completed\n- system.wallet_frozen, system.depeg_warning, system.service_resumed\n\nEach delivery includes an HMAC-SHA256 signature in the\nX-YembiPay-Signature header so you can verify authenticity.",
        "operationId": "register_webhook_v1_webhooks_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateWebhookRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookCreateResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/webhooks/{webhook_id}": {
      "get": {
        "tags": [
          "webhooks"
        ],
        "summary": "Get Webhook",
        "description": "Get details of a specific webhook subscription.",
        "operationId": "get_webhook_v1_webhooks__webhook_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "webhook_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Webhook Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "webhooks"
        ],
        "summary": "Update Webhook",
        "description": "Update a webhook subscription \u2014 pause, resume, or change URL.\n\nBody fields (all optional):\n- is_active: false to pause, true to resume\n- url: new endpoint URL",
        "operationId": "update_webhook_v1_webhooks__webhook_id__patch",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "webhook_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Webhook Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateWebhookRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "webhooks"
        ],
        "summary": "Delete Webhook",
        "description": "Delete a webhook subscription permanently.\n\nDelivery history is retained for audit purposes.",
        "operationId": "delete_webhook_v1_webhooks__webhook_id__delete",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "webhook_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Webhook Id"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/webhooks/{webhook_id}/deliveries": {
      "get": {
        "tags": [
          "webhooks"
        ],
        "summary": "List Deliveries",
        "description": "Get delivery history for a webhook subscription.\n\nReturns the most recent deliveries with status codes and timestamps.",
        "operationId": "list_deliveries_v1_webhooks__webhook_id__deliveries_get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "webhook_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Webhook Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/aml/check": {
      "post": {
        "tags": [
          "aml"
        ],
        "summary": "Run Aml Check",
        "description": "Run AML checks (velocity, structuring, CTR, jurisdiction) on a transfer.",
        "operationId": "run_aml_check_v1_aml_check_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AMLCheckRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/aml/alerts/{org_id}": {
      "get": {
        "tags": [
          "aml"
        ],
        "summary": "List Alerts",
        "description": "List AML alerts for an organization.",
        "operationId": "list_alerts_v1_aml_alerts__org_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Org Id"
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 32
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 200,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/aml/alerts/{alert_id}/review": {
      "post": {
        "tags": [
          "aml"
        ],
        "summary": "Review Alert",
        "description": "Review and update an AML alert status.",
        "operationId": "review_alert_v1_aml_alerts__alert_id__review_post",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "alert_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Alert Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReviewAlertRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/aml/sar": {
      "post": {
        "tags": [
          "aml"
        ],
        "summary": "Create Sar Filing",
        "description": "Create a Suspicious Activity Report (SAR) filing.",
        "operationId": "create_sar_filing_v1_aml_sar_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateSARRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/aml/sar/{sar_id}/submit": {
      "post": {
        "tags": [
          "aml"
        ],
        "summary": "Submit Sar Filing",
        "description": "Submit a draft SAR to FinCEN.",
        "operationId": "submit_sar_filing_v1_aml_sar__sar_id__submit_post",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "sar_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Sar Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/aml/sar/{org_id}": {
      "get": {
        "tags": [
          "aml"
        ],
        "summary": "List Sar Filings",
        "description": "List SAR filings for an organization.",
        "operationId": "list_sar_filings_v1_aml_sar__org_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Org Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 200,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/aml/velocity-limits": {
      "post": {
        "tags": [
          "aml"
        ],
        "summary": "Set Velocity Limits",
        "description": "Set or update velocity limits for an org or recipient.",
        "operationId": "set_velocity_limits_v1_aml_velocity_limits_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetVelocityLimitRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/treasury/balance/{org_id}": {
      "get": {
        "tags": [
          "treasury"
        ],
        "summary": "Get Balance",
        "description": "Get treasury balance for an organization.",
        "operationId": "get_balance_v1_treasury_balance__org_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,35}$",
              "title": "Org Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/treasury/check-funds/{org_id}": {
      "get": {
        "tags": [
          "treasury"
        ],
        "summary": "Check Funds",
        "description": "Check if an org has sufficient funds for a transfer.",
        "operationId": "check_funds_v1_treasury_check_funds__org_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,35}$",
              "title": "Org Id"
            }
          },
          {
            "name": "amount",
            "in": "query",
            "required": true,
            "schema": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "string"
                }
              ],
              "gt": 0,
              "le": "100000.000000",
              "max_digits": 12,
              "decimal_places": 6,
              "x-yembipay-max-input-characters": 64,
              "title": "Amount"
            }
          },
          {
            "name": "fee",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "string"
                }
              ],
              "ge": 0,
              "le": "100000.000000",
              "max_digits": 12,
              "decimal_places": 6,
              "x-yembipay-max-input-characters": 64,
              "default": "0",
              "title": "Fee"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/treasury/transactions/{org_id}": {
      "get": {
        "tags": [
          "treasury"
        ],
        "summary": "List Transactions",
        "description": "Get treasury transaction history for an org.",
        "operationId": "list_transactions_v1_treasury_transactions__org_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,35}$",
              "title": "Org Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 200,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/users/invite": {
      "post": {
        "tags": [
          "users"
        ],
        "summary": "Invite User",
        "description": "Invite a user to an organization.",
        "operationId": "invite_user_v1_users_invite_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InviteUserRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/users/{org_id}": {
      "get": {
        "tags": [
          "users"
        ],
        "summary": "List Users",
        "description": "List all users for an organization.",
        "operationId": "list_users_v1_users__org_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "Org Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/users/{user_id}/role": {
      "patch": {
        "tags": [
          "users"
        ],
        "summary": "Update Role",
        "description": "Update a user's role.",
        "operationId": "update_role_v1_users__user_id__role_patch",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "User Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateRoleRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/users/{user_id}": {
      "delete": {
        "tags": [
          "users"
        ],
        "summary": "Deactivate User",
        "description": "Deactivate a user.",
        "operationId": "deactivate_user_v1_users__user_id__delete",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "title": "User Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/users/login": {
      "post": {
        "tags": [
          "users"
        ],
        "summary": "Login",
        "description": "Authenticate a user (MVP \u2014 returns user info, production uses JWT).",
        "operationId": "login_v1_users_login_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/users/check-permission": {
      "post": {
        "tags": [
          "users"
        ],
        "summary": "Check Permission",
        "description": "Check if a role has permission for an action.",
        "operationId": "check_permission_v1_users_check_permission_post",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "role",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/UserRole"
            }
          },
          {
            "name": "action",
            "in": "query",
            "required": true,
            "schema": {
              "enum": [
                "manage_org",
                "manage_users",
                "manage_keys",
                "manage_billing",
                "view_dashboard",
                "initiate_transfers",
                "manage_compliance",
                "view_ledger",
                "manage_aml",
                "manage_treasury"
              ],
              "type": "string",
              "title": "Action"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/portal/token": {
      "post": {
        "tags": [
          "recipient-portal"
        ],
        "summary": "Create Portal Token",
        "description": "Generate a portal access token for a recipient.",
        "operationId": "create_portal_token_v1_portal_token_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePortalTokenRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/portal/me": {
      "get": {
        "tags": [
          "recipient-portal"
        ],
        "summary": "Portal Me",
        "description": "Get recipient info via portal token.",
        "operationId": "portal_me_v1_portal_me_get",
        "parameters": [
          {
            "name": "X-Portal-Token",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 52,
              "maxLength": 52,
              "pattern": "^rpt_[0-9a-f]{48}$",
              "title": "X-Portal-Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/portal/payments": {
      "get": {
        "tags": [
          "recipient-portal"
        ],
        "summary": "Portal Payments",
        "description": "Get payment history for a recipient via portal token.",
        "operationId": "portal_payments_v1_portal_payments_get",
        "parameters": [
          {
            "name": "X-Portal-Token",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 52,
              "maxLength": 52,
              "pattern": "^rpt_[0-9a-f]{48}$",
              "title": "X-Portal-Token"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/regulatory/report": {
      "get": {
        "tags": [
          "regulatory"
        ],
        "summary": "Regulatory Report",
        "description": "Generate a regulatory compliance report.\n\nReturns transaction volumes, compliance screening stats, blocked\ntransaction counts, and AML alerts for the specified period.\n\nThis is the report Caribbean regulatory sandboxes require for\nongoing compliance monitoring.",
        "operationId": "regulatory_report_v1_regulatory_report_get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "period",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "daily",
                "weekly",
                "monthly"
              ],
              "type": "string",
              "description": "Report period: daily, weekly, monthly",
              "default": "monthly",
              "title": "Period"
            },
            "description": "Report period: daily, weekly, monthly"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/regulatory/volume-status": {
      "get": {
        "tags": [
          "regulatory"
        ],
        "summary": "Volume Status",
        "description": "Get current transaction volume usage against regulatory caps.\n\nReturns daily and monthly volume used vs limits. Only meaningful\nin regulatory_sandbox mode \u2014 returns zeros in regular sandbox.",
        "operationId": "volume_status_v1_regulatory_volume_status_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/regulatory/client-assets": {
      "get": {
        "tags": [
          "regulatory"
        ],
        "summary": "Client Asset Segregation",
        "description": "Client asset segregation report \u2014 BMA DABA requirement.\n\nShows per-org client balances and verifies that all client assets\nare properly segregated from YembiPay's operational funds.",
        "operationId": "client_asset_segregation_v1_regulatory_client_assets_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/regulatory/client-assets/verify": {
      "get": {
        "tags": [
          "regulatory"
        ],
        "summary": "Verify Asset Segregation",
        "description": "Verify client asset segregation compliance.\n\nReturns pass/fail \u2014 any org with negative client balance\nindicates a segregation violation.",
        "operationId": "verify_asset_segregation_v1_regulatory_client_assets_verify_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/regulatory/corridors/compliance": {
      "get": {
        "tags": [
          "regulatory"
        ],
        "summary": "Corridor Compliance Summary",
        "description": "Compliance rules summary for all Caribbean corridors.\n\nReturns jurisdiction-specific requirements for regulator review.",
        "operationId": "corridor_compliance_summary_v1_regulatory_corridors_compliance_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/task-quarantine": {
      "get": {
        "tags": [
          "task-quarantine"
        ],
        "summary": "List Task Quarantine",
        "operationId": "list_task_quarantine_v1_task_quarantine_get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 200,
              "minimum": 1,
              "default": 100,
              "title": "Limit"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/task-quarantine/{task_id}": {
      "get": {
        "tags": [
          "task-quarantine"
        ],
        "summary": "Get Task Quarantine",
        "operationId": "get_task_quarantine_v1_task_quarantine__task_id__get",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "title": "Task Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/task-quarantine/{task_id}/replay": {
      "post": {
        "tags": [
          "task-quarantine"
        ],
        "summary": "Replay Task Quarantine",
        "operationId": "replay_task_quarantine_v1_task_quarantine__task_id__replay_post",
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "title": "Task Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReplayTaskDeliveryRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/kyc/sumsub/webhook": {
      "post": {
        "tags": [
          "KYC Webhooks"
        ],
        "summary": "Sumsub Webhook",
        "description": "Handle Sumsub verification webhooks.\n\nSumsub sends webhooks when applicant status changes:\n- applicantReviewed: Final decision (GREEN/RED)\n- applicantPending: Under review\n- applicantCreated: New applicant\n- applicantOnHold: Needs manual review\n\nThe payload is signed with HMAC-SHA1 \u2014 we verify before processing.",
        "operationId": "sumsub_webhook_v1_kyc_sumsub_webhook_post",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/v1/leads": {
      "post": {
        "tags": [
          "leads"
        ],
        "summary": "Create Lead",
        "description": "Persist a landing-page lead. No auth required (public form).",
        "operationId": "create_lead_v1_leads_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateLeadRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LeadResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/health": {
      "get": {
        "summary": "Health",
        "operationId": "health_health_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/health/deep": {
      "get": {
        "summary": "Deep Health",
        "description": "Readiness check for durable dependencies and safety controls.",
        "operationId": "deep_health_health_deep_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/health/workers": {
      "get": {
        "summary": "Worker Health",
        "description": "Check Celery worker health via broker ping.",
        "operationId": "worker_health_health_workers_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/sandbox/reset": {
      "post": {
        "summary": "Reset Sandbox",
        "description": "Reset sandbox test data. Local sandbox only.",
        "operationId": "reset_sandbox_v1_sandbox_reset_post",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/system/version": {
      "get": {
        "summary": "System Version V1",
        "description": "SOC 2 CC8.1 \u2014 deployment verification.",
        "operationId": "system_version_v1_v1_system_version_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1/system/metrics": {
      "get": {
        "summary": "System Metrics",
        "description": "Platform metrics for investor decks and regulatory reports.",
        "operationId": "system_metrics_v1_system_metrics_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/verify/{cert_hash}": {
      "get": {
        "summary": "Public Certificate Verification",
        "description": "Public certificate verification \u2014 no authentication required.\n\nAnyone with a certificate can verify it against the on-chain anchor.",
        "operationId": "public_certificate_verification_verify__cert_hash__get",
        "parameters": [
          {
            "name": "cert_hash",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "title": "Cert Hash"
            }
          },
          {
            "name": "settlement_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 64,
              "title": "Settlement Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "AMLCheckRequest": {
        "properties": {
          "org_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,35}$",
            "title": "Org Id"
          },
          "recipient_id": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 36,
                "minLength": 1,
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,35}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Recipient Id"
          },
          "recipient_country": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2,
                "minLength": 2,
                "pattern": "^[A-Z]{2}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Recipient Country"
          },
          "amount_usdc": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "string"
              }
            ],
            "title": "Amount Usdc",
            "decimal_places": 6,
            "gt": 0,
            "le": "100000.000000",
            "max_digits": 12,
            "x-yembipay-max-input-characters": 64
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "org_id",
          "amount_usdc"
        ],
        "title": "AMLCheckRequest"
      },
      "BatchPaymentItem": {
        "properties": {
          "recipient_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,35}$",
            "title": "Recipient Id",
            "description": "Recipient ID from the recipients table"
          },
          "amount_usdc": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "string"
              }
            ],
            "title": "Amount Usdc",
            "decimal_places": 6,
            "gt": 0,
            "le": "100000.000000",
            "max_digits": 12,
            "x-yembipay-max-input-characters": 64
          },
          "memo": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 256,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Memo",
            "description": "Invoice number or note"
          },
          "travel_rule": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TravelRuleData"
              },
              {
                "type": "null"
              }
            ],
            "description": "Required if amount >= $3,000"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "recipient_id",
          "amount_usdc"
        ],
        "title": "BatchPaymentItem",
        "description": "A single payment within a batch."
      },
      "BatchPaymentResult": {
        "properties": {
          "recipient_id": {
            "type": "string",
            "title": "Recipient Id"
          },
          "ledger_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ledger Id"
          },
          "amount_usdc": {
            "type": "number",
            "title": "Amount Usdc"
          },
          "status": {
            "type": "string",
            "title": "Status"
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          }
        },
        "type": "object",
        "required": [
          "recipient_id",
          "ledger_id",
          "amount_usdc",
          "status"
        ],
        "title": "BatchPaymentResult"
      },
      "BatchPayrollRequest": {
        "properties": {
          "sender_org_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,35}$",
            "title": "Sender Org Id"
          },
          "payments": {
            "items": {
              "$ref": "#/components/schemas/BatchPaymentItem"
            },
            "type": "array",
            "maxItems": 500,
            "minItems": 1,
            "title": "Payments"
          },
          "idempotency_key": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 128,
                "minLength": 16,
                "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]+$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Idempotency Key",
            "description": "Prevents duplicate batch submissions on retry"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "sender_org_id",
          "payments"
        ],
        "title": "BatchPayrollRequest",
        "description": "Pay multiple recipients in a single API call.\n\nThe CFO submits one request with all payments for a pay period.\nEach item is processed independently \u2014 one failure doesn't block the rest."
      },
      "BatchPayrollResponse": {
        "properties": {
          "batch_id": {
            "type": "string",
            "title": "Batch Id"
          },
          "total_payments": {
            "type": "integer",
            "title": "Total Payments"
          },
          "succeeded": {
            "type": "integer",
            "title": "Succeeded"
          },
          "failed": {
            "type": "integer",
            "title": "Failed"
          },
          "blocked": {
            "type": "integer",
            "title": "Blocked"
          },
          "total_usdc": {
            "type": "number",
            "title": "Total Usdc"
          },
          "results": {
            "items": {
              "$ref": "#/components/schemas/BatchPaymentResult"
            },
            "type": "array",
            "title": "Results"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          }
        },
        "type": "object",
        "required": [
          "batch_id",
          "total_payments",
          "succeeded",
          "failed",
          "blocked",
          "total_usdc",
          "results",
          "created_at"
        ],
        "title": "BatchPayrollResponse"
      },
      "BatchRunResponse": {
        "properties": {
          "batch_id": {
            "type": "string",
            "title": "Batch Id"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "total_payments": {
            "type": "integer",
            "title": "Total Payments"
          },
          "succeeded": {
            "type": "integer",
            "title": "Succeeded"
          },
          "failed": {
            "type": "integer",
            "title": "Failed"
          },
          "blocked": {
            "type": "integer",
            "title": "Blocked"
          },
          "total_usdc": {
            "type": "number",
            "title": "Total Usdc"
          },
          "status": {
            "type": "string",
            "title": "Status"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          }
        },
        "type": "object",
        "required": [
          "batch_id",
          "org_id",
          "total_payments",
          "succeeded",
          "failed",
          "blocked",
          "total_usdc",
          "status",
          "created_at"
        ],
        "title": "BatchRunResponse",
        "description": "Persisted summary of a batch payroll run (GET /batch, GET /batch/{id})."
      },
      "CaribbeanOfframpRequest": {
        "properties": {
          "amount_usdc": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100000.0,
                "exclusiveMinimum": 0.0
              },
              {
                "type": "string"
              }
            ],
            "title": "Amount Usdc",
            "description": "Amount in USDC to send",
            "x-yembipay-max-input-characters": 64
          },
          "sender_org_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,35}$",
            "title": "Sender Org Id",
            "description": "Sending organization ID"
          },
          "sender_wallet": {
            "type": "string",
            "maxLength": 42,
            "minLength": 42,
            "pattern": "^0x[a-fA-F0-9]{40}$",
            "title": "Sender Wallet",
            "description": "Sender USDC wallet address"
          },
          "recipient_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,35}$",
            "title": "Recipient Id",
            "description": "Internal recipient identifier"
          },
          "recipient_account": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "title": "Recipient Account",
            "description": "Recipient bank account number"
          },
          "recipient_bank_code": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Recipient Bank Code",
            "description": "Bank SWIFT/routing code"
          },
          "country_code": {
            "type": "string",
            "maxLength": 2,
            "minLength": 2,
            "pattern": "^[A-Z]{2}$",
            "title": "Country Code",
            "description": "ISO 3166-1 alpha-2 country code (JM, TT, GY, etc.)"
          },
          "reference": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 256,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Reference",
            "description": "Invoice or payment reference"
          },
          "originator_name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 256,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Originator Name",
            "description": "Originator full name (Travel Rule)"
          },
          "originator_address": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 512,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Originator Address",
            "description": "Originator address (Travel Rule)"
          },
          "beneficiary_name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 256,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Beneficiary Name",
            "description": "Beneficiary full name (Travel Rule)"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "amount_usdc",
          "sender_org_id",
          "sender_wallet",
          "recipient_id",
          "recipient_account",
          "country_code"
        ],
        "title": "CaribbeanOfframpRequest",
        "description": "Request to settle USDC into a Caribbean bank account."
      },
      "CaribbeanOfframpResponse": {
        "properties": {
          "success": {
            "type": "boolean",
            "title": "Success"
          },
          "ledger_entry_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ledger Entry Id"
          },
          "tx_hash": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tx Hash"
          },
          "compliance_cert_id": {
            "type": "string",
            "title": "Compliance Cert Id"
          },
          "compliance_status": {
            "type": "string",
            "title": "Compliance Status"
          },
          "amount_usdc": {
            "type": "number",
            "title": "Amount Usdc"
          },
          "amount_local": {
            "type": "number",
            "title": "Amount Local"
          },
          "local_currency": {
            "type": "string",
            "title": "Local Currency"
          },
          "fx_rate": {
            "type": "number",
            "title": "Fx Rate"
          },
          "offramp_fee_usdc": {
            "type": "number",
            "title": "Offramp Fee Usdc"
          },
          "settlement_rail": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Settlement Rail"
          },
          "settlement_channel": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Settlement Channel"
          },
          "deposit_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deposit Id"
          },
          "certificate_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Certificate Url"
          },
          "status": {
            "type": "string",
            "title": "Status"
          },
          "message": {
            "type": "string",
            "title": "Message"
          }
        },
        "type": "object",
        "required": [
          "success",
          "compliance_cert_id",
          "compliance_status",
          "amount_usdc",
          "amount_local",
          "local_currency",
          "fx_rate",
          "offramp_fee_usdc",
          "settlement_rail",
          "settlement_channel",
          "deposit_id",
          "status",
          "message"
        ],
        "title": "CaribbeanOfframpResponse",
        "description": "Response confirming a Caribbean off-ramp settlement."
      },
      "CollectionExecutionMode": {
        "type": "string",
        "enum": [
          "unspecified",
          "simulation",
          "provider_test",
          "live"
        ],
        "title": "CollectionExecutionMode",
        "description": "How an input collection was executed.\n\n``UNSPECIFIED`` preserves compatibility with adapters that have not yet been\nmigrated to explicit provider-mode reporting. ACH never returns it."
      },
      "CompleteVerificationRequest": {
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "verified",
              "rejected"
            ],
            "title": "Status"
          },
          "verified_name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 256,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Verified Name"
          },
          "rejection_reason": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 4000,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Rejection Reason"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "status"
        ],
        "title": "CompleteVerificationRequest",
        "description": "Body for completing a verification (approve or reject)."
      },
      "ComplianceCheckResponse": {
        "properties": {
          "wallet_address": {
            "type": "string",
            "title": "Wallet Address"
          },
          "is_compliant": {
            "type": "boolean",
            "title": "Is Compliant"
          },
          "is_sanctioned": {
            "type": "boolean",
            "title": "Is Sanctioned"
          },
          "genius_act_registered": {
            "type": "boolean",
            "title": "Genius Act Registered"
          },
          "screening_status": {
            "type": "string",
            "enum": [
              "pass",
              "block",
              "hold",
              "unavailable"
            ],
            "title": "Screening Status"
          },
          "risk_score": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 0.0,
            "title": "Risk Score",
            "description": "Compliance signal score retained for API compatibility: 0 means verified clear, 85 means a high-similarity SDN name requires review, and 100 means blocked/unverifiable. It is never derived from a random wallet-address hash.",
            "default": 0
          },
          "details": {
            "type": "string",
            "title": "Details"
          },
          "ofac_dataset_generation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ofac Dataset Generation"
          },
          "ofac_dataset_attempt_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ofac Dataset Attempt Id"
          },
          "ofac_dataset_sha256": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ofac Dataset Sha256"
          },
          "ofac_dataset_verified_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ofac Dataset Verified At"
          },
          "ofac_dataset_fresh_until": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ofac Dataset Fresh Until"
          },
          "ofac_dataset_scope": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "active_versioned_generation",
                  "local_legacy_unverified"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Ofac Dataset Scope"
          }
        },
        "type": "object",
        "required": [
          "wallet_address",
          "is_compliant",
          "is_sanctioned",
          "genius_act_registered",
          "screening_status",
          "details"
        ],
        "title": "ComplianceCheckResponse"
      },
      "ConnectAccountingRequest": {
        "properties": {
          "org_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "title": "Org Id"
          },
          "provider": {
            "type": "string",
            "enum": [
              "quickbooks",
              "xero"
            ],
            "title": "Provider"
          },
          "access_token": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Access Token"
          },
          "refresh_token": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Refresh Token"
          },
          "realm_id": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Realm Id"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "org_id",
          "provider",
          "access_token",
          "refresh_token"
        ],
        "title": "ConnectAccountingRequest",
        "description": "Connect an accounting system via OAuth (or direct tokens for MVP)."
      },
      "CreateApiKeyRequest": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 128,
            "minLength": 1,
            "title": "Name"
          },
          "scope": {
            "type": "string",
            "enum": [
              "full",
              "transfers",
              "read_only",
              "compliance"
            ],
            "title": "Scope"
          },
          "environment": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "sandbox",
                  "regulatory_sandbox",
                  "live"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Environment"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "name",
          "scope"
        ],
        "title": "CreateApiKeyRequest",
        "description": "Generate an additional API key for an organization."
      },
      "CreateApprovalRequest": {
        "properties": {
          "org_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,35}$",
            "title": "Org Id"
          },
          "recipient_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,35}$",
            "title": "Recipient Id"
          },
          "recipient_wallet": {
            "type": "string",
            "maxLength": 42,
            "minLength": 42,
            "pattern": "^0x[0-9a-fA-F]{40}$",
            "title": "Recipient Wallet"
          },
          "amount_usdc": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "string"
              }
            ],
            "title": "Amount Usdc",
            "decimal_places": 6,
            "gt": 0,
            "le": "100000.000000",
            "max_digits": 12,
            "x-yembipay-max-input-characters": 64
          },
          "memo": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 1000
              },
              {
                "type": "null"
              }
            ],
            "title": "Memo"
          },
          "required_approvals": {
            "type": "integer",
            "maximum": 20.0,
            "minimum": 2.0,
            "title": "Required Approvals",
            "default": 2
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "org_id",
          "recipient_id",
          "recipient_wallet",
          "amount_usdc"
        ],
        "title": "CreateApprovalRequest",
        "description": "Create an approval request for a large transfer."
      },
      "CreateLeadRequest": {
        "properties": {
          "email": {
            "type": "string",
            "maxLength": 256,
            "minLength": 3,
            "pattern": "^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$",
            "title": "Email"
          },
          "name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 256
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "company": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 256
              },
              {
                "type": "null"
              }
            ],
            "title": "Company"
          },
          "message": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ],
            "title": "Message"
          },
          "source": {
            "type": "string",
            "maxLength": 64,
            "title": "Source",
            "default": "landing"
          }
        },
        "type": "object",
        "required": [
          "email"
        ],
        "title": "CreateLeadRequest",
        "description": "Public landing-page form submission.\n\nNo auth \u2014 this is a marketing form. Field limits act as basic abuse\nguards against oversized payloads."
      },
      "CreateOrganizationRequest": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 256,
            "minLength": 1,
            "title": "Name"
          },
          "slug": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$",
            "title": "Slug"
          },
          "email": {
            "type": "string",
            "maxLength": 254,
            "minLength": 3,
            "pattern": "^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$",
            "title": "Email"
          },
          "country": {
            "type": "string",
            "maxLength": 2,
            "minLength": 2,
            "pattern": "^[A-Z]{2}$",
            "title": "Country"
          },
          "tier": {
            "type": "string",
            "enum": [
              "free",
              "starter",
              "growth",
              "enterprise"
            ],
            "title": "Tier",
            "default": "free"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "name",
          "slug",
          "email",
          "country"
        ],
        "title": "CreateOrganizationRequest",
        "description": "Create a new organization and issue its first API key."
      },
      "CreatePayrollScheduleRequest": {
        "properties": {
          "org_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "title": "Org Id"
          },
          "name": {
            "type": "string",
            "maxLength": 128,
            "minLength": 1,
            "title": "Name"
          },
          "frequency": {
            "type": "string",
            "enum": [
              "weekly",
              "biweekly",
              "monthly",
              "custom"
            ],
            "title": "Frequency"
          },
          "day_value": {
            "type": "integer",
            "maximum": 28.0,
            "minimum": 0.0,
            "title": "Day Value"
          },
          "payment_template": {
            "items": {
              "$ref": "#/components/schemas/BatchPaymentItem"
            },
            "type": "array",
            "maxItems": 500,
            "minItems": 1,
            "title": "Payment Template"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "org_id",
          "name",
          "frequency",
          "day_value",
          "payment_template"
        ],
        "title": "CreatePayrollScheduleRequest",
        "description": "Create a recurring payroll schedule.\n\nFrequencies: weekly, biweekly, monthly, custom.\nday_value: For monthly = day of month (1-28). For weekly/biweekly = day of\nweek (0=Mon, 4=Fri)."
      },
      "CreatePortalTokenRequest": {
        "properties": {
          "recipient_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "title": "Recipient Id"
          },
          "org_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "title": "Org Id"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "recipient_id",
          "org_id"
        ],
        "title": "CreatePortalTokenRequest"
      },
      "CreateRecipientRequest": {
        "properties": {
          "org_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "title": "Org Id"
          },
          "legal_name": {
            "type": "string",
            "maxLength": 256,
            "minLength": 1,
            "title": "Legal Name"
          },
          "email": {
            "type": "string",
            "maxLength": 256,
            "minLength": 3,
            "pattern": "^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$",
            "title": "Email"
          },
          "country_code": {
            "type": "string",
            "maxLength": 2,
            "minLength": 2,
            "pattern": "^[A-Za-z]{2}$",
            "title": "Country Code"
          },
          "payout_method": {
            "type": "string",
            "enum": [
              "usdc_wallet",
              "local_bank",
              "mobile_money"
            ],
            "title": "Payout Method",
            "default": "local_bank"
          },
          "wallet_address": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 42,
                "minLength": 42,
                "pattern": "^0x[0-9a-fA-F]{40}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Wallet Address"
          },
          "bank_name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 256
              },
              {
                "type": "null"
              }
            ],
            "title": "Bank Name"
          },
          "bank_account_number": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64
              },
              {
                "type": "null"
              }
            ],
            "title": "Bank Account Number"
          },
          "bank_routing_code": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64
              },
              {
                "type": "null"
              }
            ],
            "title": "Bank Routing Code"
          },
          "bank_currency": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 3,
                "minLength": 3,
                "pattern": "^[A-Za-z]{3}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bank Currency"
          },
          "mobile_provider": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64
              },
              {
                "type": "null"
              }
            ],
            "title": "Mobile Provider"
          },
          "mobile_number": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 32
              },
              {
                "type": "null"
              }
            ],
            "title": "Mobile Number"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "org_id",
          "legal_name",
          "email",
          "country_code"
        ],
        "title": "CreateRecipientRequest"
      },
      "CreateSARRequest": {
        "properties": {
          "org_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "title": "Org Id"
          },
          "alert_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "title": "Alert Id"
          },
          "subject_type": {
            "type": "string",
            "enum": [
              "recipient",
              "org"
            ],
            "title": "Subject Type",
            "description": "recipient | org"
          },
          "subject_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "title": "Subject Id"
          },
          "subject_name": {
            "type": "string",
            "maxLength": 256,
            "minLength": 1,
            "title": "Subject Name"
          },
          "narrative": {
            "type": "string",
            "maxLength": 10000,
            "minLength": 10,
            "title": "Narrative"
          },
          "amount_involved_usdc": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "string"
              }
            ],
            "title": "Amount Involved Usdc",
            "decimal_places": 6,
            "gt": 0,
            "le": "1000000000.000000",
            "max_digits": 16,
            "x-yembipay-max-input-characters": 64
          },
          "date_range_start": {
            "type": "string",
            "format": "date-time",
            "title": "Date Range Start"
          },
          "date_range_end": {
            "type": "string",
            "format": "date-time",
            "title": "Date Range End"
          },
          "filed_by": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "title": "Filed By"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "org_id",
          "alert_id",
          "subject_type",
          "subject_id",
          "subject_name",
          "narrative",
          "amount_involved_usdc",
          "date_range_start",
          "date_range_end",
          "filed_by"
        ],
        "title": "CreateSARRequest"
      },
      "CreateSumsubApplicantRequest": {
        "properties": {
          "recipient_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "title": "Recipient Id"
          },
          "org_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "title": "Org Id"
          },
          "verification_type": {
            "type": "string",
            "enum": [
              "kyc",
              "kyb"
            ],
            "title": "Verification Type",
            "default": "kyc"
          },
          "email": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 254,
                "minLength": 3,
                "pattern": "^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Email"
          },
          "phone": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 32,
                "minLength": 7
              },
              {
                "type": "null"
              }
            ],
            "title": "Phone"
          },
          "country": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 3,
                "minLength": 2,
                "pattern": "^[A-Za-z]{2,3}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Country"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "recipient_id",
          "org_id"
        ],
        "title": "CreateSumsubApplicantRequest",
        "description": "Body for creating a Sumsub applicant and initiating KYC verification."
      },
      "CreateWalletRequest": {
        "properties": {
          "org_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "title": "Org Id",
            "description": "Organization ID that owns this wallet"
          },
          "label": {
            "type": "string",
            "maxLength": 128,
            "minLength": 1,
            "title": "Label",
            "description": "Human-readable label (e.g. 'LATAM Payroll')"
          },
          "signer_addresses": {
            "items": {
              "type": "string",
              "maxLength": 42,
              "minLength": 42,
              "pattern": "^0x[0-9a-fA-F]{40}$"
            },
            "type": "array",
            "maxItems": 20,
            "minItems": 2,
            "title": "Signer Addresses",
            "description": "Ethereum addresses of MPC key-share holders (min 2)"
          },
          "required_signatures": {
            "type": "integer",
            "maximum": 20.0,
            "minimum": 2.0,
            "title": "Required Signatures",
            "description": "Number of signers required to approve a transfer",
            "default": 2
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "org_id",
          "label",
          "signer_addresses"
        ],
        "title": "CreateWalletRequest"
      },
      "CreateWebhookRequest": {
        "properties": {
          "org_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "title": "Org Id"
          },
          "url": {
            "type": "string",
            "maxLength": 512,
            "minLength": 1,
            "title": "Url",
            "description": "HTTPS endpoint to receive events"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "org_id",
          "url"
        ],
        "title": "CreateWebhookRequest"
      },
      "DeactivatePauseRequest": {
        "properties": {},
        "additionalProperties": false,
        "type": "object",
        "title": "DeactivatePauseRequest",
        "description": "Resume transfers after an emergency pause."
      },
      "EstimateRequestV2": {
        "properties": {
          "payment_method": {
            "type": "string",
            "maxLength": 32,
            "minLength": 1,
            "pattern": "^[a-z][a-z0-9_]{0,31}$",
            "title": "Payment Method"
          },
          "amount": {
            "anyOf": [
              {
                "type": "number",
                "exclusiveMinimum": 0.0
              },
              {
                "type": "string"
              }
            ],
            "title": "Amount",
            "x-yembipay-max-input-characters": 64
          },
          "input_currency": {
            "type": "string",
            "maxLength": 8,
            "minLength": 2,
            "pattern": "^[A-Z][A-Z0-9]{1,7}$",
            "title": "Input Currency",
            "default": "USD"
          },
          "corridor": {
            "type": "string",
            "maxLength": 2,
            "minLength": 2,
            "pattern": "^[A-Z]{2}$",
            "title": "Corridor"
          },
          "card_metadata": {
            "anyOf": [
              {
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Card Metadata"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "payment_method",
          "amount",
          "corridor"
        ],
        "title": "EstimateRequestV2",
        "description": "Request a fee + FX breakdown before settling."
      },
      "EstimateResponseV2": {
        "properties": {
          "payment_method": {
            "type": "string",
            "title": "Payment Method"
          },
          "amount_usd": {
            "type": "string",
            "title": "Amount Usd"
          },
          "input_fee_usd": {
            "type": "string",
            "title": "Input Fee Usd"
          },
          "input_fee_note": {
            "type": "string",
            "title": "Input Fee Note"
          },
          "platform_fee_usd": {
            "type": "string",
            "title": "Platform Fee Usd"
          },
          "platform_fee_note": {
            "type": "string",
            "title": "Platform Fee Note"
          },
          "net_amount_usd": {
            "type": "string",
            "title": "Net Amount Usd"
          },
          "fx_rate": {
            "type": "string",
            "title": "Fx Rate"
          },
          "amount_local": {
            "type": "string",
            "title": "Amount Local"
          },
          "local_currency": {
            "type": "string",
            "title": "Local Currency"
          },
          "corridor": {
            "type": "string",
            "title": "Corridor"
          },
          "rate_lock_expires_in_seconds": {
            "type": "integer",
            "title": "Rate Lock Expires In Seconds"
          },
          "hold_days": {
            "type": "integer",
            "title": "Hold Days"
          },
          "total_cost_usd": {
            "type": "string",
            "title": "Total Cost Usd"
          }
        },
        "type": "object",
        "required": [
          "payment_method",
          "amount_usd",
          "input_fee_usd",
          "input_fee_note",
          "platform_fee_usd",
          "platform_fee_note",
          "net_amount_usd",
          "fx_rate",
          "amount_local",
          "local_currency",
          "corridor",
          "rate_lock_expires_in_seconds",
          "hold_days",
          "total_cost_usd"
        ],
        "title": "EstimateResponseV2",
        "description": "Detailed fee breakdown for display before settlement."
      },
      "ExchangeRequest": {
        "properties": {
          "org_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "title": "Org Id"
          },
          "public_token": {
            "type": "string",
            "maxLength": 2048,
            "minLength": 1,
            "title": "Public Token"
          },
          "account_id": {
            "type": "string",
            "maxLength": 128,
            "minLength": 1,
            "title": "Account Id"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "org_id",
          "public_token",
          "account_id"
        ],
        "title": "ExchangeRequest"
      },
      "ExchangeResponse": {
        "properties": {
          "access_token_encrypted": {
            "type": "string",
            "title": "Access Token Encrypted"
          },
          "account_id": {
            "type": "string",
            "title": "Account Id"
          },
          "institution_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Institution Name"
          },
          "linked_at": {
            "type": "string",
            "title": "Linked At"
          }
        },
        "type": "object",
        "required": [
          "access_token_encrypted",
          "account_id",
          "linked_at"
        ],
        "title": "ExchangeResponse"
      },
      "FeeEstimateRequest": {
        "properties": {
          "amount_usdc": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "string"
              }
            ],
            "title": "Amount Usdc",
            "decimal_places": 6,
            "gt": 0,
            "le": "100000.000000",
            "max_digits": 12,
            "x-yembipay-max-input-characters": 64
          },
          "recipient_country": {
            "type": "string",
            "maxLength": 2,
            "minLength": 2,
            "pattern": "^[A-Za-z]{2}$",
            "title": "Recipient Country"
          },
          "payout_method": {
            "type": "string",
            "enum": [
              "usdc_wallet",
              "local_bank",
              "mobile_money"
            ],
            "title": "Payout Method",
            "default": "local_bank"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "amount_usdc",
          "recipient_country"
        ],
        "title": "FeeEstimateRequest"
      },
      "FeeEstimateResponse": {
        "properties": {
          "amount_usdc": {
            "type": "number",
            "title": "Amount Usdc"
          },
          "recipient_country": {
            "type": "string",
            "title": "Recipient Country"
          },
          "payout_method": {
            "type": "string",
            "title": "Payout Method"
          },
          "platform_fee_usdc": {
            "type": "number",
            "title": "Platform Fee Usdc",
            "description": "YembiPay's 0.5% fee (capped at $50)"
          },
          "gas_fee_usdc": {
            "type": "number",
            "title": "Gas Fee Usdc",
            "description": "Estimated Base L2 gas cost in USDC"
          },
          "offramp_fee_usdc": {
            "type": "number",
            "title": "Offramp Fee Usdc",
            "description": "Estimated off-ramp / FX conversion cost"
          },
          "total_fee_usdc": {
            "type": "number",
            "title": "Total Fee Usdc"
          },
          "total_cost_usdc": {
            "type": "number",
            "title": "Total Cost Usdc",
            "description": "amount + total fees"
          },
          "estimated_local_amount": {
            "type": "number",
            "title": "Estimated Local Amount",
            "description": "Estimated amount in local currency"
          },
          "local_currency": {
            "type": "string",
            "title": "Local Currency",
            "description": "ISO 4217 currency code"
          },
          "fx_rate": {
            "type": "number",
            "title": "Fx Rate",
            "description": "Estimated USD \u2192 local currency rate"
          }
        },
        "type": "object",
        "required": [
          "amount_usdc",
          "recipient_country",
          "payout_method",
          "platform_fee_usdc",
          "gas_fee_usdc",
          "offramp_fee_usdc",
          "total_fee_usdc",
          "total_cost_usdc",
          "estimated_local_amount",
          "local_currency",
          "fx_rate"
        ],
        "title": "FeeEstimateResponse"
      },
      "FreezeWalletRequest": {
        "properties": {
          "wallet_address": {
            "type": "string",
            "maxLength": 42,
            "minLength": 42,
            "pattern": "^0x[0-9a-fA-F]{40}$",
            "title": "Wallet Address"
          },
          "reason": {
            "type": "string",
            "enum": [
              "ofac_hit",
              "manual_review",
              "suspicious_activity",
              "law_enforcement",
              "kyc_failure"
            ],
            "title": "Reason"
          },
          "org_id": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 36,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Org Id"
          },
          "details": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ],
            "title": "Details"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "wallet_address",
          "reason"
        ],
        "title": "FreezeWalletRequest",
        "description": "Freeze a wallet \u2014 all transfers to/from this address are blocked."
      },
      "GenerateInvoiceRequest": {
        "properties": {
          "org_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "title": "Org Id"
          },
          "period": {
            "type": "string",
            "maxLength": 7,
            "minLength": 7,
            "pattern": "^[0-9]{4}-(?:0[1-9]|1[0-2])$",
            "title": "Period"
          },
          "tier": {
            "type": "string",
            "enum": [
              "free",
              "starter",
              "growth",
              "enterprise"
            ],
            "title": "Tier"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "org_id",
          "period",
          "tier"
        ],
        "title": "GenerateInvoiceRequest",
        "description": "Body for generating a monthly invoice for an org."
      },
      "GenerateProofRequest": {
        "properties": {
          "org_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "title": "Org Id"
          },
          "period": {
            "type": "string",
            "maxLength": 7,
            "minLength": 7,
            "pattern": "^(?:[0-9]{4}-(?:0[1-9]|1[0-2])|[0-9]{4}-Q[1-4])$",
            "title": "Period"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "org_id",
          "period"
        ],
        "title": "GenerateProofRequest",
        "description": "Generate a ZK audit proof for a period.\n\nPeriod format: \"2026-Q1\" (quarterly) or \"2026-02\" (monthly)."
      },
      "GlobalPauseRequest": {
        "properties": {
          "reason": {
            "type": "string",
            "maxLength": 2000,
            "minLength": 1,
            "title": "Reason"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "reason"
        ],
        "title": "GlobalPauseRequest",
        "description": "EMERGENCY: Halt ALL transfers system-wide."
      },
      "HTTPValidationError": {
        "properties": {
          "detail": {
            "items": {
              "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
          }
        },
        "type": "object",
        "title": "HTTPValidationError"
      },
      "InviteUserRequest": {
        "properties": {
          "org_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "title": "Org Id"
          },
          "email": {
            "type": "string",
            "maxLength": 254,
            "minLength": 3,
            "pattern": "^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$",
            "title": "Email"
          },
          "full_name": {
            "type": "string",
            "maxLength": 256,
            "minLength": 1,
            "title": "Full Name"
          },
          "role": {
            "$ref": "#/components/schemas/UserRole",
            "description": "owner | admin | finance | compliance | viewer"
          },
          "password": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 72,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Password"
          },
          "invited_by": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 36,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Invited By"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "org_id",
          "email",
          "full_name",
          "role"
        ],
        "title": "InviteUserRequest"
      },
      "InvoiceSyncItem": {
        "properties": {
          "external_id": {
            "type": "string",
            "maxLength": 128,
            "minLength": 1,
            "title": "External Id"
          },
          "vendor_name": {
            "type": "string",
            "maxLength": 256,
            "minLength": 1,
            "title": "Vendor Name"
          },
          "amount_usd": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "string"
              }
            ],
            "title": "Amount Usd",
            "decimal_places": 6,
            "gt": 0,
            "le": "1000000000.000000",
            "max_digits": 16,
            "x-yembipay-max-input-characters": 64
          },
          "currency": {
            "type": "string",
            "maxLength": 3,
            "minLength": 3,
            "pattern": "^[A-Z]{3}$",
            "title": "Currency",
            "default": "USD"
          },
          "due_date": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 10,
                "minLength": 10,
                "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Due Date"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "external_id",
          "vendor_name",
          "amount_usd"
        ],
        "title": "InvoiceSyncItem",
        "description": "One bounded provider invoice accepted by the MVP sync endpoint."
      },
      "LeadResponse": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "status": {
            "type": "string",
            "title": "Status"
          }
        },
        "type": "object",
        "required": [
          "id",
          "status"
        ],
        "title": "LeadResponse"
      },
      "LedgerEntryResponse": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "tx_hash": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tx Hash"
          },
          "amount_usdc": {
            "type": "number",
            "title": "Amount Usdc"
          },
          "sender_org_id": {
            "type": "string",
            "title": "Sender Org Id"
          },
          "recipient_id": {
            "type": "string",
            "title": "Recipient Id"
          },
          "recipient_wallet": {
            "type": "string",
            "title": "Recipient Wallet"
          },
          "compliance_cert_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Compliance Cert Id"
          },
          "status": {
            "type": "string",
            "title": "Status"
          },
          "error_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error Reason"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "title": "Updated At"
          }
        },
        "type": "object",
        "required": [
          "id",
          "tx_hash",
          "amount_usdc",
          "sender_org_id",
          "recipient_id",
          "recipient_wallet",
          "compliance_cert_id",
          "status",
          "error_reason",
          "created_at",
          "updated_at"
        ],
        "title": "LedgerEntryResponse",
        "description": "A persisted transfer as stored in the shadow ledger.\n\nThe transfer id returned by ``POST /transfers`` is the ledger entry id."
      },
      "LiftFreezeRequest": {
        "properties": {
          "lift_reason": {
            "type": "string",
            "maxLength": 2000,
            "minLength": 1,
            "title": "Lift Reason"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "lift_reason"
        ],
        "title": "LiftFreezeRequest",
        "description": "Lift a wallet freeze \u2014 requires compliance officer authorization."
      },
      "LinkTokenRequest": {
        "properties": {
          "org_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "title": "Org Id"
          },
          "user_client_id": {
            "type": "string",
            "maxLength": 128,
            "minLength": 1,
            "title": "User Client Id",
            "default": "default"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "org_id"
        ],
        "title": "LinkTokenRequest"
      },
      "LinkTokenResponse": {
        "properties": {
          "link_token": {
            "type": "string",
            "title": "Link Token"
          },
          "expiration": {
            "type": "string",
            "title": "Expiration"
          },
          "request_id": {
            "type": "string",
            "title": "Request Id"
          }
        },
        "type": "object",
        "required": [
          "link_token",
          "expiration",
          "request_id"
        ],
        "title": "LinkTokenResponse"
      },
      "LoginRequest": {
        "properties": {
          "email": {
            "type": "string",
            "maxLength": 254,
            "minLength": 3,
            "pattern": "^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$",
            "title": "Email"
          },
          "password": {
            "type": "string",
            "maxLength": 72,
            "minLength": 1,
            "title": "Password"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "email",
          "password"
        ],
        "title": "LoginRequest"
      },
      "MeResponse": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "phone": {
            "type": "string",
            "title": "Phone"
          },
          "full_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Full Name"
          },
          "kyc_status": {
            "type": "string",
            "title": "Kyc Status"
          },
          "kyc_tier": {
            "type": "string",
            "title": "Kyc Tier"
          },
          "daily_limit_usd": {
            "type": "number",
            "title": "Daily Limit Usd"
          }
        },
        "type": "object",
        "required": [
          "id",
          "phone",
          "full_name",
          "kyc_status",
          "kyc_tier",
          "daily_limit_usd"
        ],
        "title": "MeResponse"
      },
      "OfframpEstimateRequest": {
        "properties": {
          "amount_usdc": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "string"
              }
            ],
            "title": "Amount Usdc",
            "decimal_places": 6,
            "gt": 0,
            "le": "100000.000000",
            "max_digits": 12,
            "x-yembipay-max-input-characters": 64
          },
          "country_code": {
            "type": "string",
            "maxLength": 2,
            "minLength": 2,
            "pattern": "^[A-Z]{2}$",
            "title": "Country Code"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "amount_usdc",
          "country_code"
        ],
        "title": "OfframpEstimateRequest",
        "description": "Request for a fee/FX estimate before committing."
      },
      "OfframpEstimateResponse": {
        "properties": {
          "amount_usdc": {
            "type": "number",
            "title": "Amount Usdc"
          },
          "local_currency": {
            "type": "string",
            "title": "Local Currency"
          },
          "fx_rate": {
            "type": "number",
            "title": "Fx Rate"
          },
          "offramp_fee_usdc": {
            "type": "number",
            "title": "Offramp Fee Usdc"
          },
          "offramp_fee_pct": {
            "type": "number",
            "title": "Offramp Fee Pct"
          },
          "estimated_local_amount": {
            "type": "number",
            "title": "Estimated Local Amount"
          },
          "settlement_rail": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Settlement Rail"
          },
          "is_caribbean": {
            "type": "boolean",
            "title": "Is Caribbean"
          }
        },
        "type": "object",
        "required": [
          "amount_usdc",
          "local_currency",
          "fx_rate",
          "offramp_fee_usdc",
          "offramp_fee_pct",
          "estimated_local_amount",
          "settlement_rail",
          "is_caribbean"
        ],
        "title": "OfframpEstimateResponse",
        "description": "Fee and FX estimate for a Caribbean off-ramp."
      },
      "PayrollScheduleResponse": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "frequency": {
            "type": "string",
            "title": "Frequency"
          },
          "day_value": {
            "type": "integer",
            "title": "Day Value"
          },
          "payment_template": {
            "items": {},
            "type": "array",
            "title": "Payment Template"
          },
          "is_active": {
            "type": "boolean",
            "title": "Is Active"
          },
          "next_run_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Run At"
          },
          "last_run_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Run At"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          }
        },
        "type": "object",
        "required": [
          "id",
          "org_id",
          "name",
          "frequency",
          "day_value",
          "payment_template",
          "is_active",
          "created_at"
        ],
        "title": "PayrollScheduleResponse",
        "description": "Full representation of a payroll schedule."
      },
      "QuoteBody": {
        "properties": {
          "recipient_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 36,
            "title": "Recipient Id"
          },
          "total_debit_usd": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "string"
              }
            ],
            "title": "Total Debit Usd",
            "decimal_places": 6,
            "ge": "0.01",
            "le": "10000.0",
            "max_digits": 11,
            "x-yembipay-max-input-characters": 64
          },
          "corridor": {
            "type": "string",
            "maxLength": 5,
            "minLength": 5,
            "pattern": "^US-[A-Z]{2}$",
            "title": "Corridor"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "recipient_id",
          "total_debit_usd",
          "corridor"
        ],
        "title": "QuoteBody"
      },
      "QuoteResponse": {
        "properties": {
          "contract_version": {
            "type": "string",
            "title": "Contract Version"
          },
          "quote_authorization_id": {
            "type": "string",
            "title": "Quote Authorization Id"
          },
          "recipient_id": {
            "type": "string",
            "title": "Recipient Id"
          },
          "corridor": {
            "type": "string",
            "title": "Corridor"
          },
          "total_debit_usd": {
            "type": "number",
            "title": "Total Debit Usd"
          },
          "fee_usd": {
            "type": "number",
            "title": "Fee Usd"
          },
          "net_send_usd": {
            "type": "number",
            "title": "Net Send Usd"
          },
          "fx_rate": {
            "type": "number",
            "title": "Fx Rate"
          },
          "recipient_amount": {
            "type": "number",
            "title": "Recipient Amount"
          },
          "recipient_currency": {
            "type": "string",
            "title": "Recipient Currency"
          },
          "rate_source": {
            "type": "string",
            "title": "Rate Source"
          },
          "rate_source_as_of": {
            "type": "string",
            "title": "Rate Source As Of"
          },
          "rate_source_valid_until": {
            "type": "string",
            "title": "Rate Source Valid Until"
          },
          "quote_issued_at": {
            "type": "string",
            "title": "Quote Issued At"
          },
          "expires_at": {
            "type": "string",
            "title": "Expires At"
          },
          "environment": {
            "type": "string",
            "title": "Environment"
          },
          "pricing_mode": {
            "type": "string",
            "title": "Pricing Mode"
          },
          "is_simulation": {
            "type": "boolean",
            "title": "Is Simulation"
          }
        },
        "type": "object",
        "required": [
          "contract_version",
          "quote_authorization_id",
          "recipient_id",
          "corridor",
          "total_debit_usd",
          "fee_usd",
          "net_send_usd",
          "fx_rate",
          "recipient_amount",
          "recipient_currency",
          "rate_source",
          "rate_source_as_of",
          "rate_source_valid_until",
          "quote_issued_at",
          "expires_at",
          "environment",
          "pricing_mode",
          "is_simulation"
        ],
        "title": "QuoteResponse"
      },
      "RecipientBody": {
        "properties": {
          "full_name": {
            "type": "string",
            "maxLength": 255,
            "minLength": 1,
            "title": "Full Name"
          },
          "country_code": {
            "type": "string",
            "maxLength": 2,
            "minLength": 2,
            "pattern": "^[A-Za-z]{2}$",
            "title": "Country Code"
          },
          "bank_account": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "title": "Bank Account"
          },
          "bank_code": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64
              },
              {
                "type": "null"
              }
            ],
            "title": "Bank Code"
          },
          "relationship": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64
              },
              {
                "type": "null"
              }
            ],
            "title": "Relationship"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "full_name",
          "country_code",
          "bank_account"
        ],
        "title": "RecipientBody"
      },
      "ReplayTaskDeliveryRequest": {
        "properties": {
          "reason": {
            "type": "string",
            "maxLength": 53,
            "minLength": 8,
            "title": "Reason",
            "description": "Opaque incident reference only, for example INC-2026-1234"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "reason"
        ],
        "title": "ReplayTaskDeliveryRequest"
      },
      "RequestOTPBody": {
        "properties": {
          "phone": {
            "type": "string",
            "maxLength": 64,
            "minLength": 8,
            "title": "Phone"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "phone"
        ],
        "title": "RequestOTPBody"
      },
      "ReviewAlertRequest": {
        "properties": {
          "reviewer_id": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "title": "Reviewer Id"
          },
          "status": {
            "type": "string",
            "enum": [
              "open",
              "under_review",
              "escalated",
              "dismissed",
              "sar_filed"
            ],
            "title": "Status",
            "description": "open | under_review | escalated | dismissed | sar_filed"
          },
          "notes": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 4000,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Notes"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "reviewer_id",
          "status"
        ],
        "title": "ReviewAlertRequest"
      },
      "SessionResponse": {
        "properties": {
          "session_token": {
            "type": "string",
            "title": "Session Token"
          },
          "consumer_id": {
            "type": "string",
            "title": "Consumer Id"
          },
          "is_new": {
            "type": "boolean",
            "title": "Is New"
          }
        },
        "type": "object",
        "required": [
          "session_token",
          "consumer_id",
          "is_new"
        ],
        "title": "SessionResponse"
      },
      "SetVelocityLimitRequest": {
        "properties": {
          "org_id": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 36,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Org Id"
          },
          "recipient_id": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 36,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Recipient Id"
          },
          "max_daily_usdc": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "string"
              }
            ],
            "title": "Max Daily Usdc",
            "default": "50000",
            "decimal_places": 6,
            "gt": 0,
            "le": "100000000.000000",
            "max_digits": 15,
            "x-yembipay-max-input-characters": 64
          },
          "max_weekly_usdc": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "string"
              }
            ],
            "title": "Max Weekly Usdc",
            "default": "200000",
            "decimal_places": 6,
            "gt": 0,
            "le": "100000000.000000",
            "max_digits": 15,
            "x-yembipay-max-input-characters": 64
          },
          "max_monthly_usdc": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "string"
              }
            ],
            "title": "Max Monthly Usdc",
            "default": "500000",
            "decimal_places": 6,
            "gt": 0,
            "le": "100000000.000000",
            "max_digits": 15,
            "x-yembipay-max-input-characters": 64
          },
          "max_daily_count": {
            "type": "integer",
            "maximum": 10000.0,
            "minimum": 1.0,
            "title": "Max Daily Count",
            "default": 50
          },
          "max_single_usdc": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "string"
              }
            ],
            "title": "Max Single Usdc",
            "default": "50000",
            "decimal_places": 6,
            "gt": 0,
            "le": "100000000.000000",
            "max_digits": 15,
            "x-yembipay-max-input-characters": 64
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "SetVelocityLimitRequest"
      },
      "SettleRequestV2": {
        "properties": {
          "payment_method": {
            "type": "string",
            "maxLength": 32,
            "minLength": 1,
            "pattern": "^[a-z][a-z0-9_]{0,31}$",
            "title": "Payment Method",
            "description": "Payment method: 'usdc', 'usdt', 'card', 'ach', 'wire'",
            "examples": [
              "usdc",
              "card",
              "ach"
            ]
          },
          "amount": {
            "anyOf": [
              {
                "type": "number",
                "exclusiveMinimum": 0.0
              },
              {
                "type": "string"
              }
            ],
            "title": "Amount",
            "x-yembipay-max-input-characters": 64
          },
          "input_currency": {
            "type": "string",
            "maxLength": 8,
            "minLength": 2,
            "pattern": "^[A-Z][A-Z0-9]{1,7}$",
            "title": "Input Currency",
            "description": "Currency of the input amount: 'USD', 'USDC', 'EUR'",
            "default": "USD"
          },
          "sender_org_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,35}$",
            "title": "Sender Org Id",
            "description": "Sending organization ID"
          },
          "sender_identifier": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 256,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Sender Identifier",
            "description": "Wallet address (crypto), omit for cards/ACH (Stripe handles it)"
          },
          "recipient_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,35}$",
            "title": "Recipient Id",
            "description": "YembiPay recipient ID"
          },
          "corridor": {
            "type": "string",
            "maxLength": 2,
            "minLength": 2,
            "pattern": "^[A-Z]{2}$",
            "title": "Corridor",
            "description": "Destination country code: 'JM', 'TT'"
          },
          "reference": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 256,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Reference",
            "description": "Your reference / invoice number"
          },
          "originator_name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 256,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Originator Name",
            "description": "Sender full legal name"
          },
          "originator_dob": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 10,
                "minLength": 10,
                "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Originator Dob",
            "description": "Sender date of birth: YYYY-MM-DD"
          },
          "originator_address": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 512,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Originator Address",
            "description": "Sender address"
          },
          "beneficiary_name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 256,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Beneficiary Name",
            "description": "Recipient full name"
          },
          "card_token": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 255,
                "minLength": 4,
                "pattern": "^pm_[A-Za-z0-9_]+$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Card Token",
            "description": "Stripe PaymentMethod ID (pm_...) \u2014 never send raw card numbers"
          },
          "card_metadata": {
            "anyOf": [
              {
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Card Metadata",
            "description": "Stripe card metadata (country, brand) for fee calculation"
          },
          "plaid_account_token": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 255,
                "minLength": 4,
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Plaid Account Token",
            "description": "Plaid bank account token from /v2/plaid/exchange"
          },
          "wire_reference": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 23,
                "minLength": 23,
                "pattern": "^YP-[A-Z2-7]{20}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Wire Reference",
            "description": "Wire reference number (YP-XXXXXXXX format). If omitted, one will be generated and returned in the response."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "payment_method",
          "amount",
          "sender_org_id",
          "recipient_id",
          "corridor"
        ],
        "title": "SettleRequestV2",
        "description": "Universal settle request \u2014 accepts any supported payment method."
      },
      "SettleResponseV2": {
        "properties": {
          "success": {
            "type": "boolean",
            "title": "Success"
          },
          "settlement_id": {
            "type": "string",
            "title": "Settlement Id"
          },
          "status": {
            "type": "string",
            "title": "Status"
          },
          "input_type": {
            "type": "string",
            "title": "Input Type"
          },
          "execution_mode": {
            "$ref": "#/components/schemas/CollectionExecutionMode"
          },
          "amount_usd": {
            "type": "string",
            "title": "Amount Usd"
          },
          "input_fee_usd": {
            "type": "string",
            "title": "Input Fee Usd"
          },
          "platform_fee_usd": {
            "type": "string",
            "title": "Platform Fee Usd"
          },
          "net_amount_usd": {
            "type": "string",
            "title": "Net Amount Usd"
          },
          "amount_local": {
            "type": "string",
            "title": "Amount Local"
          },
          "local_currency": {
            "type": "string",
            "title": "Local Currency"
          },
          "fx_rate": {
            "type": "string",
            "title": "Fx Rate"
          },
          "rate_lock_id": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9_-]+$",
            "title": "Rate Lock Id"
          },
          "rate_lock_expires_at": {
            "type": "string",
            "format": "date-time",
            "title": "Rate Lock Expires At"
          },
          "corridor": {
            "type": "string",
            "title": "Corridor"
          },
          "hold_until": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Hold Until"
          },
          "estimated_delivery": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Estimated Delivery"
          },
          "compliance_cert_id": {
            "type": "string",
            "title": "Compliance Cert Id"
          },
          "certificate_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Certificate Url"
          },
          "provider_reference": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Provider Reference"
          },
          "wire_instructions": {
            "anyOf": [
              {
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Wire Instructions"
          },
          "message": {
            "type": "string",
            "title": "Message"
          }
        },
        "type": "object",
        "required": [
          "success",
          "settlement_id",
          "status",
          "input_type",
          "execution_mode",
          "amount_usd",
          "input_fee_usd",
          "platform_fee_usd",
          "net_amount_usd",
          "amount_local",
          "local_currency",
          "fx_rate",
          "rate_lock_id",
          "rate_lock_expires_at",
          "corridor",
          "compliance_cert_id",
          "message"
        ],
        "title": "SettleResponseV2",
        "description": "Universal settle response."
      },
      "SettlementResponse": {
        "properties": {
          "settlement_id": {
            "type": "string",
            "title": "Settlement Id"
          },
          "status": {
            "type": "string",
            "title": "Status"
          },
          "corridor": {
            "type": "string",
            "title": "Corridor"
          },
          "amount_usdc": {
            "type": "number",
            "title": "Amount Usdc"
          },
          "sender_org_id": {
            "type": "string",
            "title": "Sender Org Id"
          },
          "recipient_id": {
            "type": "string",
            "title": "Recipient Id"
          },
          "recipient_wallet": {
            "type": "string",
            "title": "Recipient Wallet"
          },
          "input_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Input Type"
          },
          "input_method": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Input Method"
          },
          "tx_hash": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tx Hash"
          },
          "cert_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cert Id"
          },
          "fx_rate": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fx Rate"
          },
          "currency": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Currency"
          },
          "amount_local": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Amount Local"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          },
          "completed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Completed At"
          }
        },
        "type": "object",
        "required": [
          "settlement_id",
          "status",
          "corridor",
          "amount_usdc",
          "sender_org_id",
          "recipient_id",
          "recipient_wallet",
          "created_at"
        ],
        "title": "SettlementResponse",
        "description": "Typed, org-scoped view of a settlement row.\n\nBuilt from the Settlement ORM model via ``model_validate`` (pydantic v2\n``from_attributes``). Only safe, partner-facing fields are exposed."
      },
      "StartVerificationRequest": {
        "properties": {
          "recipient_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "title": "Recipient Id"
          },
          "org_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "title": "Org Id"
          },
          "verification_type": {
            "type": "string",
            "enum": [
              "kyc",
              "kyb"
            ],
            "title": "Verification Type",
            "default": "kyc"
          },
          "document_type": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 32,
                "minLength": 1,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Document Type"
          },
          "document_country": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2,
                "minLength": 2,
                "pattern": "^[A-Za-z]{2}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Document Country"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "recipient_id",
          "org_id"
        ],
        "title": "StartVerificationRequest",
        "description": "Body for initiating KYC/KYB verification for a recipient."
      },
      "SyncInvoicesRequest": {
        "properties": {
          "org_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "title": "Org Id"
          },
          "invoices": {
            "items": {
              "$ref": "#/components/schemas/InvoiceSyncItem"
            },
            "type": "array",
            "maxItems": 500,
            "title": "Invoices"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "org_id",
          "invoices"
        ],
        "title": "SyncInvoicesRequest",
        "description": "Sync open invoices from QuickBooks/Xero."
      },
      "TransferBody": {
        "properties": {
          "recipient_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 36,
            "title": "Recipient Id"
          },
          "quote_authorization_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 36,
            "pattern": "^cqa_[0-9a-f]{32}$",
            "title": "Quote Authorization Id"
          },
          "total_debit_usd": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "string"
              }
            ],
            "title": "Total Debit Usd",
            "decimal_places": 6,
            "ge": "0.01",
            "le": "10000.0",
            "max_digits": 11,
            "x-yembipay-max-input-characters": 64
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "recipient_id",
          "quote_authorization_id",
          "total_debit_usd"
        ],
        "title": "TransferBody"
      },
      "TransferRequest": {
        "properties": {
          "sender_org_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,35}$",
            "title": "Sender Org Id",
            "description": "Org initiating the payment"
          },
          "recipient_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,35}$",
            "title": "Recipient Id",
            "description": "Internal ID of the recipient/vendor"
          },
          "recipient_wallet": {
            "type": "string",
            "maxLength": 42,
            "minLength": 42,
            "pattern": "^0x[0-9a-fA-F]{40}$",
            "title": "Recipient Wallet",
            "description": "Destination wallet address (0x...)"
          },
          "amount_usdc": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100000.0,
                "exclusiveMinimum": 0.0
              },
              {
                "type": "string"
              }
            ],
            "title": "Amount Usdc",
            "description": "Amount in USDC",
            "x-yembipay-max-input-characters": 64
          },
          "travel_rule": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TravelRuleData"
              },
              {
                "type": "null"
              }
            ],
            "description": "Required for transfers >= $3,000 (FATF Travel Rule / GENIUS Act)"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "sender_org_id",
          "recipient_id",
          "recipient_wallet",
          "amount_usdc"
        ],
        "title": "TransferRequest"
      },
      "TravelRuleData": {
        "properties": {
          "amount_usdc": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "string"
              }
            ],
            "title": "Amount Usdc",
            "decimal_places": 6,
            "gt": 0,
            "le": "100000.000000",
            "max_digits": 12,
            "x-yembipay-max-input-characters": 64
          },
          "originator_name": {
            "type": "string",
            "maxLength": 256,
            "minLength": 1,
            "title": "Originator Name",
            "description": "Full legal name of the sending entity"
          },
          "originator_account": {
            "type": "string",
            "maxLength": 42,
            "minLength": 42,
            "pattern": "^0x[0-9a-fA-F]{40}$",
            "title": "Originator Account",
            "description": "Wallet address of the originator"
          },
          "originator_org_id": {
            "type": "string",
            "maxLength": 36,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,35}$",
            "title": "Originator Org Id",
            "description": "Internal org ID of the originator"
          },
          "originator_country": {
            "type": "string",
            "maxLength": 2,
            "minLength": 2,
            "pattern": "^[A-Z]{2}$",
            "title": "Originator Country",
            "description": "ISO 3166-1 alpha-2 country code"
          },
          "beneficiary_name": {
            "type": "string",
            "maxLength": 256,
            "minLength": 1,
            "title": "Beneficiary Name",
            "description": "Full legal name of the receiving entity/person"
          },
          "beneficiary_account": {
            "type": "string",
            "maxLength": 42,
            "minLength": 42,
            "pattern": "^0x[0-9a-fA-F]{40}$",
            "title": "Beneficiary Account",
            "description": "Wallet address of the beneficiary"
          },
          "beneficiary_country": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2,
                "minLength": 2,
                "pattern": "^[A-Z]{2}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Beneficiary Country",
            "description": "ISO 3166-1 alpha-2"
          },
          "originating_vasp_id": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "title": "Originating Vasp Id",
            "description": "DASP/VASP registration ID of the originating service"
          },
          "beneficiary_vasp_id": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Beneficiary Vasp Id",
            "description": "DASP/VASP registration ID of the beneficiary service"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "amount_usdc",
          "originator_name",
          "originator_account",
          "originator_org_id",
          "originator_country",
          "beneficiary_name",
          "beneficiary_account",
          "originating_vasp_id"
        ],
        "title": "TravelRuleData",
        "description": "IVMS101-style originator/beneficiary information.\n\nRequired for any USDC transfer >= $3,000 (FinCEN threshold)."
      },
      "UpdatePayrollScheduleRequest": {
        "properties": {
          "name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 128,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "frequency": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "weekly",
                  "biweekly",
                  "monthly",
                  "custom"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Frequency"
          },
          "day_value": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 28.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Day Value"
          },
          "payment_template": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/BatchPaymentItem"
                },
                "type": "array",
                "maxItems": 500,
                "minItems": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Payment Template"
          },
          "is_active": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Active"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "UpdatePayrollScheduleRequest",
        "description": "Update mutable fields of a payroll schedule. All fields optional \u2014\nonly the fields provided are applied."
      },
      "UpdateRecipientRequest": {
        "properties": {
          "legal_name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 256,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Legal Name"
          },
          "email": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 256,
                "minLength": 3,
                "pattern": "^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Email"
          },
          "country_code": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2,
                "minLength": 2,
                "pattern": "^[A-Za-z]{2}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Country Code"
          },
          "payout_method": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "usdc_wallet",
                  "local_bank",
                  "mobile_money"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Payout Method"
          },
          "wallet_address": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 42,
                "minLength": 42,
                "pattern": "^0x[0-9a-fA-F]{40}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Wallet Address"
          },
          "bank_name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 256
              },
              {
                "type": "null"
              }
            ],
            "title": "Bank Name"
          },
          "bank_account_number": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64
              },
              {
                "type": "null"
              }
            ],
            "title": "Bank Account Number"
          },
          "bank_routing_code": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64
              },
              {
                "type": "null"
              }
            ],
            "title": "Bank Routing Code"
          },
          "bank_currency": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 3,
                "minLength": 3,
                "pattern": "^[A-Za-z]{3}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bank Currency"
          },
          "mobile_provider": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64
              },
              {
                "type": "null"
              }
            ],
            "title": "Mobile Provider"
          },
          "mobile_number": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 32
              },
              {
                "type": "null"
              }
            ],
            "title": "Mobile Number"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "UpdateRecipientRequest",
        "description": "Mutable recipient fields. All optional \u2014 only provided fields are applied."
      },
      "UpdateRoleRequest": {
        "properties": {
          "role": {
            "$ref": "#/components/schemas/UserRole"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "role"
        ],
        "title": "UpdateRoleRequest"
      },
      "UpdateWebhookRequest": {
        "properties": {
          "url": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 512,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Url",
            "description": "New endpoint URL"
          },
          "is_active": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Active",
            "description": "Set false to pause, true to resume"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "UpdateWebhookRequest"
      },
      "UserRole": {
        "type": "string",
        "enum": [
          "owner",
          "admin",
          "finance",
          "compliance",
          "viewer"
        ],
        "title": "UserRole"
      },
      "ValidationError": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          },
          "input": {
            "title": "Input"
          },
          "ctx": {
            "type": "object",
            "title": "Context"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "VerifyOTPBody": {
        "properties": {
          "phone": {
            "type": "string",
            "maxLength": 64,
            "minLength": 8,
            "title": "Phone"
          },
          "code": {
            "type": "string",
            "maxLength": 6,
            "minLength": 6,
            "pattern": "^[0-9]{6}$",
            "title": "Code"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "phone",
          "code"
        ],
        "title": "VerifyOTPBody"
      },
      "WalletResponse": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "wallet_address": {
            "type": "string",
            "title": "Wallet Address"
          },
          "label": {
            "type": "string",
            "title": "Label"
          },
          "signer_addresses": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Signer Addresses"
          },
          "required_signatures": {
            "type": "integer",
            "title": "Required Signatures"
          },
          "is_active": {
            "type": "boolean",
            "title": "Is Active"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          }
        },
        "type": "object",
        "required": [
          "id",
          "org_id",
          "wallet_address",
          "label",
          "signer_addresses",
          "required_signatures",
          "is_active",
          "created_at"
        ],
        "title": "WalletResponse"
      },
      "WebhookCreateResponse": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "url": {
            "type": "string",
            "title": "Url"
          },
          "is_active": {
            "type": "boolean",
            "title": "Is Active"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          },
          "secret": {
            "type": "string",
            "title": "Secret"
          }
        },
        "type": "object",
        "required": [
          "id",
          "org_id",
          "url",
          "is_active",
          "created_at",
          "secret"
        ],
        "title": "WebhookCreateResponse"
      },
      "WebhookResponse": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "url": {
            "type": "string",
            "title": "Url"
          },
          "is_active": {
            "type": "boolean",
            "title": "Is Active"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          }
        },
        "type": "object",
        "required": [
          "id",
          "org_id",
          "url",
          "is_active",
          "created_at"
        ],
        "title": "WebhookResponse"
      },
      "app__api__consumer__routes__RecipientResponse": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "full_name": {
            "type": "string",
            "title": "Full Name"
          },
          "country_code": {
            "type": "string",
            "title": "Country Code"
          },
          "bank_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bank Code"
          },
          "relationship": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Relationship"
          }
        },
        "type": "object",
        "required": [
          "id",
          "full_name",
          "country_code",
          "bank_code",
          "relationship"
        ],
        "title": "RecipientResponse"
      },
      "app__api__consumer__routes__TransferResponse": {
        "properties": {
          "contract_version": {
            "type": "string",
            "title": "Contract Version"
          },
          "id": {
            "type": "string",
            "title": "Id"
          },
          "recipient_id": {
            "type": "string",
            "title": "Recipient Id"
          },
          "corridor": {
            "type": "string",
            "title": "Corridor"
          },
          "total_debit_usd": {
            "type": "number",
            "title": "Total Debit Usd"
          },
          "fee_usd": {
            "type": "number",
            "title": "Fee Usd"
          },
          "net_send_usd": {
            "type": "number",
            "title": "Net Send Usd"
          },
          "fx_rate": {
            "type": "number",
            "title": "Fx Rate"
          },
          "recipient_amount": {
            "type": "number",
            "title": "Recipient Amount"
          },
          "recipient_currency": {
            "type": "string",
            "title": "Recipient Currency"
          },
          "status": {
            "type": "string",
            "title": "Status"
          },
          "settlement_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Settlement Id"
          },
          "created_at": {
            "type": "string",
            "title": "Created At"
          },
          "quote_authorization_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Quote Authorization Id"
          },
          "rate_source": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rate Source"
          },
          "rate_source_as_of": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rate Source As Of"
          },
          "rate_source_valid_until": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rate Source Valid Until"
          },
          "quote_issued_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Quote Issued At"
          },
          "expires_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Expires At"
          },
          "environment": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Environment"
          },
          "pricing_mode": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pricing Mode"
          },
          "is_simulation": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Simulation"
          }
        },
        "type": "object",
        "required": [
          "contract_version",
          "id",
          "recipient_id",
          "corridor",
          "total_debit_usd",
          "fee_usd",
          "net_send_usd",
          "fx_rate",
          "recipient_amount",
          "recipient_currency",
          "status",
          "settlement_id",
          "created_at",
          "quote_authorization_id",
          "rate_source",
          "rate_source_as_of",
          "rate_source_valid_until",
          "quote_issued_at",
          "expires_at",
          "environment",
          "pricing_mode",
          "is_simulation"
        ],
        "title": "TransferResponse"
      },
      "app__schemas__recipient__RecipientResponse": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "legal_name": {
            "type": "string",
            "title": "Legal Name"
          },
          "email": {
            "type": "string",
            "title": "Email"
          },
          "country_code": {
            "type": "string",
            "title": "Country Code"
          },
          "payout_method": {
            "type": "string",
            "title": "Payout Method"
          },
          "wallet_address": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Wallet Address"
          },
          "bank_currency": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bank Currency"
          },
          "is_verified": {
            "type": "boolean",
            "title": "Is Verified"
          },
          "is_active": {
            "type": "boolean",
            "title": "Is Active"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          }
        },
        "type": "object",
        "required": [
          "id",
          "org_id",
          "legal_name",
          "email",
          "country_code",
          "payout_method",
          "wallet_address",
          "bank_currency",
          "is_verified",
          "is_active",
          "created_at"
        ],
        "title": "RecipientResponse"
      },
      "app__schemas__transfer__TransferResponse": {
        "properties": {
          "ledger_id": {
            "type": "string",
            "title": "Ledger Id"
          },
          "tx_hash": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tx Hash"
          },
          "amount_usdc": {
            "type": "number",
            "title": "Amount Usdc"
          },
          "status": {
            "type": "string",
            "title": "Status"
          },
          "compliance_cert_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Compliance Cert Id"
          },
          "error_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error Reason"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          }
        },
        "type": "object",
        "required": [
          "ledger_id",
          "tx_hash",
          "amount_usdc",
          "status",
          "compliance_cert_id",
          "error_reason",
          "created_at"
        ],
        "title": "TransferResponse"
      }
    },
    "securitySchemes": {
      "APIKeyHeader": {
        "type": "apiKey",
        "in": "header",
        "name": "X-API-Key"
      }
    }
  }
}