{"openapi":"3.0.0","paths":{"/customers":{"get":{"description":"Returns a paginated list of customers belonging to the authenticated organization. Customers are created after a successful onboarding application. Each customer has a type (business or individual) with the corresponding profile populated. Supports cursor-based pagination and filtering by type. Give `search` to match customers by business legal name or trade name, or by an individual's full name or first and last name.","operationId":"CustomersController_findAll_v2","parameters":[{"name":"cursor","required":false,"in":"query","description":"Opaque cursor from a previous response. Send `meta.nextCursor` with `direction=forward` to read the next page, or `meta.previousCursor` with `direction=backward` to read the previous page.","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of results to return (1-100)","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"direction","required":false,"in":"query","description":"Which side of the cursor to read: `forward` returns the rows after it, `backward` the rows before it. Rows come back in list order either way. Without a cursor, `forward` starts at the first row and `backward` at the end of the list.","schema":{"enum":["forward","backward"],"type":"string"}},{"name":"search","required":false,"in":"query","description":"Case-insensitive substring match on the business legal name and trade name, and on the individual full name or first and last name.","schema":{"type":"string"}},{"name":"clientReferenceId","required":false,"in":"query","description":"Filter to the customer with this client reference ID. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces.","schema":{"type":"string"}},{"name":"type","required":false,"in":"query","description":"Filter by one or more customer types.","schema":{"type":"array","items":{"type":"string","enum":["business","individual"]}}},{"name":"sortBy","required":false,"in":"query","schema":{"enum":["createdAt","updatedAt","type"],"type":"string"}},{"name":"sortOrder","required":false,"in":"query","schema":{"enum":["asc","desc"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerPaginatedResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**INVALID_CURSOR**: The pagination cursor provided in the request is malformed or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"List customers","tags":["Customers"]}},"/customers/{id}":{"get":{"description":"Retrieves the full details of a single customer, including their business or individual profile and active features.","operationId":"CustomersController_findById_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"200":{"description":"The requested customer","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BusinessCustomerResponseDto"},{"$ref":"#/components/schemas/IndividualCustomerResponseDto"}],"discriminator":{"propertyName":"type","mapping":{"business":"#/components/schemas/BusinessCustomerResponseDto","individual":"#/components/schemas/IndividualCustomerResponseDto"}}}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**CUSTOMER_NOT_FOUND**: No customer exists with the specified ID, or the customer belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CUSTOMER_NOT_FOUND","title":"Customer Not Found","status":404,"detail":"No customer exists with the specified ID, or the customer belongs to a different organization.","resolution":"Verify the customer ID is correct. Use the list customers endpoint to find valid customer IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#customer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Get a customer by ID","tags":["Customers"]}},"/customers/{customerId}/updates":{"post":{"description":"Post-onboarding KYC update. Body shape matches `POST /v2/onboarding` (partial: send only the fields you want to change). Discover the available fields via `GET /v2/onboarding/requirements` with the customer's country; the update flow reuses the CUSTOMER_ONBOARDING rule set. For `companyClassification.primaryIndustry` and `businessActivity.regulatedOrRestrictedActivities`, discover the current catalog options via `GET /v2/onboarding/policy-subjects`. The business envelopes and requirement discovery above apply to a business customer only. For an individual customer, edit the account holder as a single `ownership.persons` entry whose `id` is the `individualId` from the customer read, with no `roles` and only the person fields to change; sending a business envelope, a second person, a `roles`-bearing person, or a missing/foreign id returns 400. An individual update can also send `activity` and `regulatoryHistory` with only the answers that change; a leaf an individual does not have returns 400, and `activity` on a business customer returns 400. An individual update that changes the account holder's tax ID, or the name, birth date or nationality of an account holder with no tax ID, returns 409 when another customer or a live onboarding in the organization is the same person. An update lists each person once: a new person with the same name, birth date and nationality as another listed person returns 400 at that person, and so does a new person with the tax ID of another listed person or of a former owner. A new person who is a stored owner (the same tax ID, or with no tax ID the same email, name and birth date) returns 400 at its `taxIdNumber`, or at the person when it sends no tax ID; send that owner's `id` to edit them. A tax ID is one value: an update that leaves a person with only part of `taxIdType`, `taxIdNumber` and `taxIdCountry` returns 400 at each missing field. An individual update that makes enhanced due diligence apply (a PEP declaration, or a residence in a country that calls for it) owes `activity.sourceOfWealth` and the evidence documents onboarding asks for, and waits for an operator review. `documentIds` alone (no `ownership`) is a valid document-only update.","operationId":"CustomersController_submitUpdate_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"Idempotency-Key","in":"header","description":"Caller-generated unique key that lets the server safely replay this request. The original response is returned for 30 days on any retry with the same key from the same organization, with the response header `Idempotency-Replayed: true`. Required on every state-changing money-moving or resource-creating POST.","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,128}$","minLength":1,"maxLength":128,"example":"01J7B3K2X9M8N5P6Q7R8S9T0V1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerUpdateSubmitDto"}}}},"responses":{"202":{"description":"The submitted customer-update application","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CustomerOnboardingApplicationDto"},{"$ref":"#/components/schemas/CustomerUpdateApplicationDto"},{"$ref":"#/components/schemas/VirtualAccountFeatureApplicationDto"},{"$ref":"#/components/schemas/CryptoWalletFeatureApplicationDto"},{"$ref":"#/components/schemas/YieldFeatureApplicationDto"}],"discriminator":{"propertyName":"type"}}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.\n\n**IDEMPOTENCY_KEY_REQUIRED**: This endpoint requires an Idempotency-Key header to prevent duplicate processing. Generate a unique key per logical request and resend the request.\n\n**IDEMPOTENCY_KEY_INVALID**: The Idempotency-Key header value did not match the required shape (1-128 characters, letters / digits / underscore / dot / colon / hyphen).\n\n**IDEMPOTENCY_BODY_TOO_NESTED**: The request body exceeds the maximum nesting depth allowed by the idempotency fingerprint hasher. Deeply-nested arrays or objects are rejected as a malformed payload.\n\n**DOCUMENT_IDS_NOT_FOUND**: One or more document IDs provided in the request do not exist or do not belong to this customer.\n\n**INVALID_LEGAL_STRUCTURE**: The submitted `companyClassification.legalStructure` is not a valid local structure for the registered country. Valid options are surfaced by the discovery endpoint (`/v2/onboarding/requirements?country=...`); the submission must use one of those exact option values.\n\n**INVALID_POLICY_SUBJECT**: The submitted catalog-backed classification key (e.g. `companyClassification.primaryIndustry`) is unknown, retired, not directly selectable, or does not match the field's expected subject kind. Valid options are surfaced by the discovery endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**CUSTOMER_NOT_FOUND**: No customer exists with the specified ID, or the customer belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CUSTOMER_NOT_FOUND","title":"Customer Not Found","status":404,"detail":"No customer exists with the specified ID, or the customer belongs to a different organization.","resolution":"Verify the customer ID is correct. Use the list customers endpoint to find valid customer IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#customer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**IDEMPOTENCY_KEY_CONFLICT**: The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.\n\n**IDEMPOTENCY_KEY_REQUEST_IN_PROGRESS**: An earlier request with this idempotency key has not finished, or stopped before its result was recorded. In the second case it may or may not have completed its work.\n\n**CUSTOMER_UPDATE_ALREADY_PENDING**: An update application for this customer is already pending or processing. Only one update can be in flight per customer.\n\n**CUSTOMER_ALREADY_ONBOARDED**: An approved customer already exists for this organization for the same person: the same tax identifier, or, for a person with no tax identifier, the same first name, last name, birth date and nationality.\n\n**ONBOARDING_ALREADY_SUBMITTED**: The onboarding application has already been submitted and cannot be submitted again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"IDEMPOTENCY_KEY_CONFLICT","title":"Idempotency Key Conflict","status":409,"detail":"The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.","resolution":"Use a fresh idempotency key for the new request, or replay the original request unchanged.","docs":"https://v2.docs.conduit.financial/errors#idempotency-key-conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"422":{"description":"**CUSTOMER_NOT_ONBOARDED**: This operation requires the customer to have completed onboarding, but the customer has not been fully onboarded yet.\n\n**ONBOARDING_NOT_READY**: The onboarding submission cannot be completed because one or more required fields or documents are still missing, or a submitted value is not one of the accepted options for a closed-set field (e.g. a country-specific field like `companyClassification.legalStructure`). Each blocker is reported per field in `errors[]` with a `category` and, for closed-set fields, the accepted `allowedValues`.\n\n**NATIONALITY_NOT_SUPPORTED**: Conduit does not onboard an individual of the nationality the application declares, and an individual customer update cannot change the account holder to that nationality. The refusal is deterministic: it does not resolve on retry with the same nationality. Discovery for an individual lists only the nationalities Conduit accepts.\n\n**RESIDENCE_NOT_SUPPORTED**: Conduit does not onboard an individual resident in the country the application declares as the account holder's address, and an individual customer update cannot move the account holder to that country. The refusal is deterministic: it does not resolve on retry with the same country. Discovery for an individual answers 404 for that country and lists only the countries of residence Conduit accepts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"CUSTOMER_NOT_ONBOARDED","title":"Customer Not Onboarded","status":422,"detail":"This operation requires the customer to have completed onboarding, but the customer has not been fully onboarded yet.","resolution":"Complete the customer onboarding process before attempting this operation. See the onboarding guide for the required steps.","docs":"https://v2.docs.conduit.financial/errors/customer-not-onboarded","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Submit a customer update application","tags":["Customers"]}},"/customers/{customerId}/wallets/registered-addresses":{"post":{"description":"Registers a wallet address for the customer after sanctions screening. Returns 201 when the address is registered immediately (synchronous clear) and 202 when the screening is still in progress; the address becomes registered once the screening clears. Re-registering an address with the same details returns the existing record; different details return 409.","operationId":"RegisteredAddressesCustomerController_create_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"Idempotency-Key","in":"header","description":"Caller-generated unique key that lets the server safely replay this request. The original response is returned for 30 days on any retry with the same key from the same organization, with the response header `Idempotency-Replayed: true`. Required on every state-changing money-moving or resource-creating POST.","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,128}$","minLength":1,"maxLength":128,"example":"01J7B3K2X9M8N5P6Q7R8S9T0V1"}}],"requestBody":{"required":true,"description":"Discriminated by `type`: `self_custody` requires `selfCustodyAttestation: true`; `third_party` requires `originatorDetails` for travel-rule disclosure. Both values are lowercase and are matched exactly.","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CreateSelfCustodyAddressDto"},{"$ref":"#/components/schemas/CreateThirdPartyAddressDto"}],"discriminator":{"propertyName":"type"}}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisteredAddressResponseDto"}}}},"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisteredAddressResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.\n\n**IDEMPOTENCY_KEY_REQUIRED**: This endpoint requires an Idempotency-Key header to prevent duplicate processing. Generate a unique key per logical request and resend the request.\n\n**IDEMPOTENCY_KEY_INVALID**: The Idempotency-Key header value did not match the required shape (1-128 characters, letters / digits / underscore / dot / colon / hyphen).\n\n**IDEMPOTENCY_BODY_TOO_NESTED**: The request body exceeds the maximum nesting depth allowed by the idempotency fingerprint hasher. Deeply-nested arrays or objects are rejected as a malformed payload.\n\n**INVALID_ADDRESS_FORMAT**: The provided blockchain address does not match the expected format for the specified chain.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.\n\n**CAPABILITY_SUSPENDED**: This account is currently restricted from this action: a money movement, or opening a new account, wallet, customer or payout destination.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**CUSTOMER_NOT_FOUND**: No customer exists with the specified ID, or the customer belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CUSTOMER_NOT_FOUND","title":"Customer Not Found","status":404,"detail":"No customer exists with the specified ID, or the customer belongs to a different organization.","resolution":"Verify the customer ID is correct. Use the list customers endpoint to find valid customer IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#customer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**IDEMPOTENCY_KEY_CONFLICT**: The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.\n\n**IDEMPOTENCY_KEY_REQUEST_IN_PROGRESS**: An earlier request with this idempotency key has not finished, or stopped before its result was recorded. In the second case it may or may not have completed its work.\n\n**REGISTERED_ADDRESS_SUSPENDED**: This address is currently suspended for the customer and cannot be re-registered.\n\n**REGISTERED_ADDRESS_COMPLIANCE_REJECTED**: This address could not be registered for the customer following compliance screening.\n\n**REGISTERED_ADDRESS_CONFLICT**: This address is already registered for the customer with different details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"IDEMPOTENCY_KEY_CONFLICT","title":"Idempotency Key Conflict","status":409,"detail":"The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.","resolution":"Use a fresh idempotency key for the new request, or replay the original request unchanged.","docs":"https://v2.docs.conduit.financial/errors#idempotency-key-conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"503":{"description":"**SERVICE_UNAVAILABLE**: The service is temporarily unable to handle your request due to maintenance or capacity constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"SERVICE_UNAVAILABLE","title":"Service Unavailable","status":503,"detail":"The service is temporarily unable to handle your request due to maintenance or capacity constraints.","resolution":"Retry the request using exponential backoff. When the response carries a `Retry-After` header (also in the `retryAfterSeconds` body field), wait at least that long before retrying. Check the status page for any ongoing incidents.","docs":"https://v2.docs.conduit.financial/errors#service-unavailable","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Register a wallet address for a customer","tags":["Registered Addresses"]},"get":{"description":"Returns the registered wallet addresses for a customer, scoped to the authenticated organization.","operationId":"RegisteredAddressesCustomerController_list_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"cursor","required":false,"in":"query","description":"Opaque cursor from a previous response. Send `meta.nextCursor` with `direction=forward` to read the next page, or `meta.previousCursor` with `direction=backward` to read the previous page.","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of results to return (1-100)","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"direction","required":false,"in":"query","description":"Which side of the cursor to read: `forward` returns the rows after it, `backward` the rows before it. Rows come back in list order either way. Without a cursor, `forward` starts at the first row and `backward` at the end of the list.","schema":{"enum":["forward","backward"],"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"array","items":{"type":"string","enum":["registered","pending_screening","suspended","revoked"]}}},{"name":"chain","required":false,"in":"query","schema":{"type":"array","items":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]}}},{"name":"sortOrder","required":false,"in":"query","schema":{"enum":["asc","desc"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisteredAddressListResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**INVALID_CURSOR**: The pagination cursor provided in the request is malformed or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**CUSTOMER_NOT_FOUND**: No customer exists with the specified ID, or the customer belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CUSTOMER_NOT_FOUND","title":"Customer Not Found","status":404,"detail":"No customer exists with the specified ID, or the customer belongs to a different organization.","resolution":"Verify the customer ID is correct. Use the list customers endpoint to find valid customer IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#customer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"List registered addresses for a customer","tags":["Registered Addresses"]}},"/customers/{customerId}/wallets/claim-non-custodial":{"post":{"description":"Initiates a multi-signer non-custodial provisioning flow. Returns 202 with a claimId; per-signer verification URLs are delivered via wallet_signer.invited webhooks.\n\nA business customer's roster has exactly 2 admins (`400 ROSTER_BELOW_MIN_ADMINS` with fewer, `400 ROSTER_ABOVE_MAX_ADMINS` with more); every other member is a signer. An individual customer's roster has exactly one admin and at most one person. The person is the member under the individual's email on file, with `credentialType: \"passkey\"`, and must be the admin; every other member is an api_key member with `role: \"signer\"`. With no person, which only programmatic unattended allows, the admin is one api_key member. Any other roster returns `422 INDIVIDUAL_ROSTER_INVALID`, and so does a later add of a passkey member or an admin, or a promote to admin. Unlike a business, an individual's roster cannot have the person and an api_key admin together. The person enrolls two passkeys (for example on two devices) before the wallet activates, so one lost device does not lose the funds. Conduit can never sign or change the wallet alone.\n\nValid roster shapes depend on the customer's signing mode, which Conduit sets per organization (with an optional per-customer override) — confirm the customer's configured mode before building the roster: **passkey required** — any api_key member returns `422 SIGNING_MODE_ROSTER_INVALID`; **programmatic** — api_key members must have `role: \"signer\"` (an api_key admin returns `422 SIGNING_MODE_ROSTER_INVALID`); **programmatic unattended** — api_key admins are allowed. In every mode the active signers of any credential type must be able to reach `signingThreshold`; passkeys count toward it. Each api_key member carries a `publicKey` — the compressed public key, 33 bytes / 66 hex chars, `02`/`03` prefix, on the curve of its `signatureScheme` (`p256` by default, or `secp256k1` / `secp256k1_eip191`) — and is active at claim — an all-machine roster activates the wallets without an enrollment phase; mixed rosters wait on every passkey enrollment. Omitting `chains` provisions the default set: `base`, `ethereum`, `polygon`, `tron`. A default chain that does not settle in the environment is left out. A chain whose addresses need a one-time on-chain setup is not in the default set: name it in `chains`. Its wallet reads `pending` until the signers approve that setup, announced by `wallet.awaiting_setup_signature`. See [Programmatic payout signing](/guides/machine-signer-stamping) and [Add a crypto wallet](/guides/add-crypto-wallet).","operationId":"WalletsCustomerController_claimNonCustodial_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"Idempotency-Key","in":"header","description":"Caller-generated unique key that lets the server safely replay this request. The original response is returned for 30 days on any retry with the same key from the same organization, with the response header `Idempotency-Replayed: true`. Required on every state-changing money-moving or resource-creating POST.","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,128}$","minLength":1,"maxLength":128,"example":"01J7B3K2X9M8N5P6Q7R8S9T0V1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimNonCustodialDto"}}}},"responses":{"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimNonCustodialResponse"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.\n\n**IDEMPOTENCY_KEY_REQUIRED**: This endpoint requires an Idempotency-Key header to prevent duplicate processing. Generate a unique key per logical request and resend the request.\n\n**IDEMPOTENCY_KEY_INVALID**: The Idempotency-Key header value did not match the required shape (1-128 characters, letters / digits / underscore / dot / colon / hyphen).\n\n**IDEMPOTENCY_BODY_TOO_NESTED**: The request body exceeds the maximum nesting depth allowed by the idempotency fingerprint hasher. Deeply-nested arrays or objects are rejected as a malformed payload.\n\n**ROSTER_BELOW_MIN_ADMINS**: A business customer's non-custodial roster has exactly 2 admins, so no single person can lose access to the wallet. This roster has fewer.\n\n**ROSTER_ABOVE_MAX_ADMINS**: A business customer's non-custodial roster has exactly 2 admins. This roster has more. Every other member is a signer.\n\n**THRESHOLD_EXCEEDS_ROSTER**: The requested `signingThreshold` is greater than the number of signers in the roster, which would make signing impossible.\n\n**SIGNER_EMAIL_DUPLICATE**: The roster contains two or more signers with the same email address. Each signer must map to a distinct human.\n\n**API_KEY_PUBLIC_KEY_REQUIRED**: credentialType=api_key requires a publicKey (a compressed public key in hex, on the curve of the selected signatureScheme).\n\n**API_KEY_PUBLIC_KEY_INVALID**: The provided `publicKey` is not a valid compressed public key on the selected scheme's curve. Expected 66 hex characters (33 bytes) with a `02` or `03` prefix, on the curve of the selected `signatureScheme`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.\n\n**CAPABILITY_SUSPENDED**: This account is currently restricted from this action: a money movement, or opening a new account, wallet, customer or payout destination.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**CUSTOMER_NOT_FOUND**: No customer exists with the specified ID, or the customer belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CUSTOMER_NOT_FOUND","title":"Customer Not Found","status":404,"detail":"No customer exists with the specified ID, or the customer belongs to a different organization.","resolution":"Verify the customer ID is correct. Use the list customers endpoint to find valid customer IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#customer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**IDEMPOTENCY_KEY_CONFLICT**: The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.\n\n**IDEMPOTENCY_KEY_REQUEST_IN_PROGRESS**: An earlier request with this idempotency key has not finished, or stopped before its result was recorded. In the second case it may or may not have completed its work.\n\n**CUSTOMER_ALREADY_NON_CUSTODIAL**: Non-custodial control has already been claimed for this customer; the claim endpoint provisions only fresh customers.\n\n**CUSTOMER_ALREADY_CUSTODIAL**: This customer already has a custodial wallet account from initial onboarding. The claim endpoint provisions only fresh customers; an existing custodial wallet cannot be claimed as non-custodial.\n\n**CLAIM_RESUME_ROSTER_MISMATCH**: A stranded claim can be retried, but only with the same roster, signing threshold, and chains it was originally submitted with. This retry differs from what was committed, so it was refused — resuming with a different roster would register signers the wallet provider never provisioned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"IDEMPOTENCY_KEY_CONFLICT","title":"Idempotency Key Conflict","status":409,"detail":"The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.","resolution":"Use a fresh idempotency key for the new request, or replay the original request unchanged.","docs":"https://v2.docs.conduit.financial/errors#idempotency-key-conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"422":{"description":"**CUSTOMER_KYB_INCOMPLETE**: Non-custodial control can only be claimed after the customer's KYB application has been approved.\n\n**CRYPTO_FEATURE_NOT_APPROVED**: Non-custodial control can only be claimed after the customer's CRYPTO_WALLET feature application has been approved. Either no feature application exists yet, or it is still pending review.\n\n**SIGNING_MODE_ROSTER_INVALID**: The submitted signer roster is not valid for this customer's configured signing mode. In PASSKEY_REQUIRED mode all signers must be passkeys; in PROGRAMMATIC mode machine (api_key) signers must have role=signer and governance admins must be passkeys.\n\n**INDIVIDUAL_ROSTER_INVALID**: An individual customer's self-managed wallet has exactly one admin and at most one person. The person signs with passkeys, under the email on file, and is the admin. With no person, which only the programmatic unattended signing mode allows, the admin is one api_key key. Every other member is an api_key signer. After the claim, the roster can only gain api_key signers.\n\n**API_KEY_CREDENTIAL_NOT_SUPPORTED**: The request includes a machine signer (`credentialType: api_key`) in a context where api_key signers cannot be enrolled. This is reserved for future compatibility and should not be seen in normal operation.\n\n**API_KEY_PUBLIC_KEY_DUPLICATE**: Two api_key (machine) roster members were submitted with the same `publicKey`. Each machine signer must have a distinct public key.\n\n**NON_CUSTODIAL_CHAIN_NOT_SUPPORTED**: The customer's non-custodial wallet account cannot hold a wallet on this chain yet: the chain needs a signing limit that the account's admins have not approved. No wallet was created.\n\n**CHAIN_NOT_SUPPORTED**: This environment does not serve that chain, or that asset on that chain, so it cannot carry out this request. Other chains and assets this environment serves are unaffected, and the same request on one of them is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CUSTOMER_KYB_INCOMPLETE","title":"Customer KYB Incomplete","status":422,"detail":"Non-custodial control can only be claimed after the customer's KYB application has been approved.","resolution":"Complete and submit the customer's KYB application, wait for approval, and retry the claim once the customer is active.","docs":"https://v2.docs.conduit.financial/errors#customer-kyb-incomplete","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"503":{"description":"**ASSET_CHAIN_PAUSED**: Conduit has temporarily paused this asset on this chain, or the whole chain, so it cannot accept this request now. Asset and chain pairs that are not paused stay available.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ASSET_CHAIN_PAUSED","title":"Asset Chain Paused","status":503,"detail":"Conduit has temporarily paused this asset on this chain, or the whole chain, so it cannot accept this request now. Asset and chain pairs that are not paused stay available.","resolution":"Retry the same request later; it succeeds once Conduit lifts the pause. Use an asset and chain pair that is not paused if you cannot wait.","docs":"https://v2.docs.conduit.financial/errors#asset-chain-paused","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Claim non-custodial control for a customer","tags":["Wallets"]}},"/customers/{customerId}/wallets":{"post":{"description":"Creates a new blockchain wallet for the customer on the specified chain. By default the customer must first claim non-custodial control via POST /v2/customers/{id}/wallets/claim-non-custodial; for organizations enabled for custodial wallets, the account is provisioned on the first call to this endpoint with no claim required. An idempotency-key header is required. For post-activation non-custodial accounts, returns 202 with a ceremonyId and a verificationUrl when admin approval is needed. While the provisioning activity is still being set up there is no approval link to return, so the call is refused with a retryable 409 CEREMONY_IN_FLIGHT — retry shortly and the 202 arrives once the link exists. The admin approval link is also delivered on the `wallet_ceremony.awaiting_admin_approval` webhook. Once your sandbox has real testnet custody, a customer whose wallet account was provisioned under the old mock custody is refused with 422 LEGACY_MOCK_WALLET_UNSUPPORTED — create the wallet under a new sandbox customer.","operationId":"WalletsCustomerController_createWallet_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"Idempotency-Key","in":"header","description":"Caller-generated unique key that lets the server safely replay this request. The original response is returned for 30 days on any retry with the same key from the same organization, with the response header `Idempotency-Replayed: true`. Required on every state-changing money-moving or resource-creating POST.","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,128}$","minLength":1,"maxLength":128,"example":"01J7B3K2X9M8N5P6Q7R8S9T0V1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWalletDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletResponse"}}}},"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletCreateCeremonyPendingResponse"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.\n\n**IDEMPOTENCY_KEY_REQUIRED**: This endpoint requires an Idempotency-Key header to prevent duplicate processing. Generate a unique key per logical request and resend the request.\n\n**IDEMPOTENCY_KEY_INVALID**: The Idempotency-Key header value did not match the required shape (1-128 characters, letters / digits / underscore / dot / colon / hyphen).\n\n**IDEMPOTENCY_BODY_TOO_NESTED**: The request body exceeds the maximum nesting depth allowed by the idempotency fingerprint hasher. Deeply-nested arrays or objects are rejected as a malformed payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.\n\n**FEATURE_NOT_ENABLED**: Your account does not have access to this feature. Features are enabled on a per-account basis.\n\n**CAPABILITY_SUSPENDED**: This account is currently restricted from this action: a money movement, or opening a new account, wallet, customer or payout destination.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**CUSTOMER_NOT_FOUND**: No customer exists with the specified ID, or the customer belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CUSTOMER_NOT_FOUND","title":"Customer Not Found","status":404,"detail":"No customer exists with the specified ID, or the customer belongs to a different organization.","resolution":"Verify the customer ID is correct. Use the list customers endpoint to find valid customer IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#customer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**IDEMPOTENCY_KEY_CONFLICT**: The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.\n\n**IDEMPOTENCY_KEY_REQUEST_IN_PROGRESS**: An earlier request with this idempotency key has not finished, or stopped before its result was recorded. In the second case it may or may not have completed its work.\n\n**WALLET_PROVIDER_CONFLICT**: The customer's wallet account is in a state — suspended, frozen, or errored — that cannot create wallets. This is distinct from an account that is still provisioning.\n\n**WALLET_ACCOUNT_NOT_READY**: The customer's wallet account is still provisioning and is not yet active, so wallet addresses cannot be created on it. Either a non-custodial claim is in flight and the account has not been created yet, or the account exists and is awaiting signer passkey enrollment.\n\n**WALLET_AWAITING_ADMIN_APPROVAL**: This wallet is being provisioned through a ceremony that is awaiting admin approval.\n\n**CEREMONY_IN_FLIGHT**: A ceremony for this account is already in progress and the request would duplicate it. This happens for a signer roster change (a concurrent promote or demote of the same signer), or for a wallet create when a wallet for the same account is already being created (for example, requesting a second EVM chain while the first EVM chain's wallet is still being set up — the EVM chains share one address), or for a wallet create and a wallet rotation on the same wallet, or on a chain that shares its address, while either one waits for admin approval. The request is rejected until the in-flight ceremony finishes.\n\n**CONFLICT**: The request conflicts with the current state of the resource. This usually means a duplicate or a state transition that is not allowed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"IDEMPOTENCY_KEY_CONFLICT","title":"Idempotency Key Conflict","status":409,"detail":"The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.","resolution":"Use a fresh idempotency key for the new request, or replay the original request unchanged.","docs":"https://v2.docs.conduit.financial/errors#idempotency-key-conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"422":{"description":"**WALLET_NO_PROVIDER_ACCOUNT**: The customer does not yet have a wallet account on the underlying provider. Wallet addresses cannot be created until the customer claims non-custodial control.\n\n**WALLET_PROVISIONING_REJECTED**: The custody provider rejected the wallet creation; no wallet was created and no funds were moved.\n\n**CRYPTO_WALLET_CONSENSUS_REQUIRED**: This wallet operation needs a customer admin's approval before it can complete; it could not be finished synchronously. No funds were moved and no wallet was created.\n\n**LEGACY_MOCK_WALLET_UNSUPPORTED**: A wallet the order funds from, or that its crypto autoPayout would send from, was created with legacy mock custody and can no longer transact now that sandbox crypto is real testnet. The same code refuses a new wallet for a customer whose wallet account is on legacy mock custody, because that account cannot hold a real testnet wallet. A mock wallet holds no real signing key, so it cannot sign a payout, and any real testnet funds sent to its address stay stranded there because nothing can sign to move them out.\n\n**NON_CUSTODIAL_CHAIN_NOT_SUPPORTED**: The customer's non-custodial wallet account cannot hold a wallet on this chain yet: the chain needs a signing limit that the account's admins have not approved. No wallet was created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"WALLET_NO_PROVIDER_ACCOUNT","title":"Wallet Account Not Provisioned","status":422,"detail":"The customer does not yet have a wallet account on the underlying provider. Wallet addresses cannot be created until the customer claims non-custodial control.","resolution":"Submit a non-custodial claim via POST /v2/customers/:id/wallets/claim-non-custodial to provision the wallet account, then retry creating the wallet.","docs":"https://v2.docs.conduit.financial/errors#wallet-no-provider-account","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"503":{"description":"**CHAIN_ACTIVATION_UNAVAILABLE**: The wallet record was created, but the on-chain account behind it could not be opened because the funding account Conduit sponsors new accounts from is not available. No funds were moved. The error detail names the chain.\n\n**ASSET_CHAIN_PAUSED**: Conduit has temporarily paused this asset on this chain, or the whole chain, so it cannot accept this request now. Asset and chain pairs that are not paused stay available.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CHAIN_ACTIVATION_UNAVAILABLE","title":"Chain Activation Unavailable","status":503,"detail":"The wallet record was created, but the on-chain account behind it could not be opened because the funding account Conduit sponsors new accounts from is not available. No funds were moved. The error detail names the chain.","resolution":"Retry the same request shortly. The wallet keeps the same ID and the retry completes the on-chain setup. If it persists, contact support.","docs":"https://v2.docs.conduit.financial/errors#chain-activation-unavailable","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Create a wallet","tags":["Wallets"]},"get":{"description":"Returns a paginated list of wallets belonging to the customer. Requires the crypto wallets feature to be active.","operationId":"WalletsCustomerController_listWallets_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"cursor","required":false,"in":"query","description":"Opaque cursor from a previous response. Send `meta.nextCursor` with `direction=forward` to read the next page, or `meta.previousCursor` with `direction=backward` to read the previous page.","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of results to return (1-100)","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"direction","required":false,"in":"query","description":"Which side of the cursor to read: `forward` returns the rows after it, `backward` the rows before it. Rows come back in list order either way. Without a cursor, `forward` starts at the first row and `backward` at the end of the list.","schema":{"enum":["forward","backward"],"type":"string"}},{"name":"clientReferenceId","required":false,"in":"query","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletListResponse"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**FEATURE_NOT_ENABLED**: Your account does not have access to this feature. Features are enabled on a per-account basis.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**CUSTOMER_NOT_FOUND**: No customer exists with the specified ID, or the customer belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CUSTOMER_NOT_FOUND","title":"Customer Not Found","status":404,"detail":"No customer exists with the specified ID, or the customer belongs to a different organization.","resolution":"Verify the customer ID is correct. Use the list customers endpoint to find valid customer IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#customer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"List customer wallets","tags":["Wallets"]}},"/customers/{customerId}/wallets/claims":{"get":{"description":"Returns a paginated list of the customer's non-custodial claims (newest first) so you can poll provisioning/activation status. Also delivered as claim.completed / claim.failed webhooks.","operationId":"WalletsCustomerController_listClaims_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"cursor","required":false,"in":"query","description":"Opaque cursor from a previous response. Send `meta.nextCursor` with `direction=forward` to read the next page, or `meta.previousCursor` with `direction=backward` to read the previous page.","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of results to return (1-100)","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"direction","required":false,"in":"query","description":"Which side of the cursor to read: `forward` returns the rows after it, `backward` the rows before it. Rows come back in list order either way. Without a cursor, `forward` starts at the first row and `backward` at the end of the list.","schema":{"enum":["forward","backward"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimStatusListResponse"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**INVALID_CURSOR**: The pagination cursor provided in the request is malformed or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**CUSTOMER_NOT_FOUND**: No customer exists with the specified ID, or the customer belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CUSTOMER_NOT_FOUND","title":"Customer Not Found","status":404,"detail":"No customer exists with the specified ID, or the customer belongs to a different organization.","resolution":"Verify the customer ID is correct. Use the list customers endpoint to find valid customer IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#customer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"List non-custodial claims","tags":["Wallets"]}},"/customers/{customerId}/wallets/claims/{claimId}":{"get":{"description":"Retrieves a non-custodial claim's status (provisioning / completed / failed), the requested chains, the activated wallet IDs once complete, any failure reason, and per-signer enrollment status so a stalled claim is diagnosable.","operationId":"WalletsCustomerController_getClaim_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"claimId","required":true,"in":"path","schema":{"type":"string","example":"wcc_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimStatusResponse"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**CLAIM_NOT_FOUND**: No non-custodial claim exists with the specified ID for this customer.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CLAIM_NOT_FOUND","title":"Claim Not Found","status":404,"detail":"No non-custodial claim exists with the specified ID for this customer.","resolution":"Verify the claimId returned by POST /v2/customers/:id/wallets/claim-non-custodial and that it belongs to this customer.","docs":"https://v2.docs.conduit.financial/errors#claim-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Get a non-custodial claim by ID","tags":["Wallets"]}},"/customers/{customerId}/wallets/{walletId}":{"get":{"description":"Retrieves the full details of a wallet including its chain, address, and current status.","operationId":"WalletsCustomerController_getWallet_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"walletId","required":true,"in":"path","schema":{"type":"string","example":"wlt_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletResponse"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**FEATURE_NOT_ENABLED**: Your account does not have access to this feature. Features are enabled on a per-account basis.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**WALLET_NOT_FOUND**: No wallet exists with the specified ID, or the wallet belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"WALLET_NOT_FOUND","title":"Wallet Not Found","status":404,"detail":"No wallet exists with the specified ID, or the wallet belongs to a different organization.","resolution":"Verify the wallet ID is correct. Use the list wallets endpoint to find valid wallet IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#wallet-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Get a wallet by ID","tags":["Wallets"]}},"/customers/{customerId}/wallets/{walletId}/balances":{"get":{"description":"Returns what the wallet holds, one element for each asset. Give `date` to read what it held at the end of that UTC day. Omit `date` to read what it holds now, which is the same figure the wallet resource carries.","operationId":"WalletsCustomerController_getWalletBalances_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"walletId","required":true,"in":"path","schema":{"type":"string","example":"wlt_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"date","required":false,"in":"query","description":"A past UTC day, as YYYY-MM-DD. The reply holds what the account held at the end of that day. Omit it to read what the account holds now.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountBalancesResponse"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**FEATURE_NOT_ENABLED**: Your account does not have access to this feature. Features are enabled on a per-account basis.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**WALLET_NOT_FOUND**: No wallet exists with the specified ID, or the wallet belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"WALLET_NOT_FOUND","title":"Wallet Not Found","status":404,"detail":"No wallet exists with the specified ID, or the wallet belongs to a different organization.","resolution":"Verify the wallet ID is correct. Use the list wallets endpoint to find valid wallet IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#wallet-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Get wallet balances","tags":["Wallets"]}},"/customers/{customerId}/wallets/{walletId}/statement":{"get":{"description":"Returns every transaction that completed on the wallet in one asset over a period, oldest first, with what the wallet held before and after. A line is one transaction, dated by its `completedAt`, so a transaction that completes in a month is on that month's statement and in the `completedAfter` / `completedBefore` list for that month. Give `from` and `to` as UTC days; both are included, `to` must be fully in the past, and the period holds at most 92 days. The wallet is on one chain, so no chain is named; an asset that is not on it returns 400 `UNSUPPORTED_ASSET`. Follow `meta.nextCursor` for the next page; `openingBalance`, `closingBalance` and `totals` cover the whole period on every page.","operationId":"WalletsCustomerController_getWalletStatement_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"walletId","required":true,"in":"path","schema":{"type":"string","example":"wlt_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"from","required":true,"in":"query","description":"The first UTC day the statement covers, as YYYY-MM-DD. The day is included.","schema":{"type":"string"}},{"name":"to","required":true,"in":"query","description":"The last UTC day the statement covers, as YYYY-MM-DD. The day is included and must be fully in the past. The period holds at most 92 days.","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","description":"Opaque cursor from a previous response. Send `meta.nextCursor` with the same query to read the next page. A statement reads forward only.","schema":{"type":"string"}},{"name":"asset","required":true,"in":"query","description":"The asset the statement covers, as an asset code. Case-insensitive. The wallet is on one chain, so the chain is not a parameter.","schema":{"enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountStatementResponse"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**UNSUPPORTED_ASSET**: The requested asset and chain combination is not supported for this operation.\n\n**INVALID_CURSOR**: The pagination cursor provided in the request is malformed or has expired.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**FEATURE_NOT_ENABLED**: Your account does not have access to this feature. Features are enabled on a per-account basis.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**WALLET_NOT_FOUND**: No wallet exists with the specified ID, or the wallet belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"WALLET_NOT_FOUND","title":"Wallet Not Found","status":404,"detail":"No wallet exists with the specified ID, or the wallet belongs to a different organization.","resolution":"Verify the wallet ID is correct. Use the list wallets endpoint to find valid wallet IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#wallet-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Get a wallet statement","tags":["Wallets"]}},"/customers/{customerId}/wallets/{walletId}/rotate":{"post":{"description":"Triggers a key rotation for the wallet. The wallet address may change after rotation. Use this when a wallet's signing key needs to be replaced. For a non-custodial wallet account that needs admin approval, returns 202 with a ceremonyId and a verificationUrl; the rotation completes when an admin approves, and is refused at approval if the wallet can no longer be rotated.","operationId":"WalletsCustomerController_rotateWallet_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"walletId","required":true,"in":"path","schema":{"type":"string","example":"wlt_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"Idempotency-Key","in":"header","description":"Caller-generated unique key that lets the server safely replay this request. The original response is returned for 30 days on any retry with the same key from the same organization, with the response header `Idempotency-Replayed: true`. Required on every state-changing money-moving or resource-creating POST.","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,128}$","minLength":1,"maxLength":128,"example":"01J7B3K2X9M8N5P6Q7R8S9T0V1"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletResponse"}}}},"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletCreateCeremonyPendingResponse"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.\n\n**IDEMPOTENCY_KEY_REQUIRED**: This endpoint requires an Idempotency-Key header to prevent duplicate processing. Generate a unique key per logical request and resend the request.\n\n**IDEMPOTENCY_KEY_INVALID**: The Idempotency-Key header value did not match the required shape (1-128 characters, letters / digits / underscore / dot / colon / hyphen).\n\n**IDEMPOTENCY_BODY_TOO_NESTED**: The request body exceeds the maximum nesting depth allowed by the idempotency fingerprint hasher. Deeply-nested arrays or objects are rejected as a malformed payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.\n\n**CAPABILITY_SUSPENDED**: This account is currently restricted from this action: a money movement, or opening a new account, wallet, customer or payout destination.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**WALLET_NOT_FOUND**: No wallet exists with the specified ID, or the wallet belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"WALLET_NOT_FOUND","title":"Wallet Not Found","status":404,"detail":"No wallet exists with the specified ID, or the wallet belongs to a different organization.","resolution":"Verify the wallet ID is correct. Use the list wallets endpoint to find valid wallet IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#wallet-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**IDEMPOTENCY_KEY_CONFLICT**: The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.\n\n**IDEMPOTENCY_KEY_REQUEST_IN_PROGRESS**: An earlier request with this idempotency key has not finished, or stopped before its result was recorded. In the second case it may or may not have completed its work.\n\n**WALLET_NOT_ROTATABLE**: Only an active wallet can be rotated. The wallet is no longer active — it may already have been rotated or disabled. An admin approving a rotation also gets this error when the wallet can no longer be rotated at approval time (for example, it now holds a balance or the customer is restricted); the rotation is then cancelled and the wallet does not change.\n\n**WALLET_ROTATION_IN_PROGRESS**: A rotation for this wallet is already running. Concurrent rotations of the same wallet are rejected until the in-flight one completes.\n\n**CEREMONY_IN_FLIGHT**: A ceremony for this account is already in progress and the request would duplicate it. This happens for a signer roster change (a concurrent promote or demote of the same signer), or for a wallet create when a wallet for the same account is already being created (for example, requesting a second EVM chain while the first EVM chain's wallet is still being set up — the EVM chains share one address), or for a wallet create and a wallet rotation on the same wallet, or on a chain that shares its address, while either one waits for admin approval. The request is rejected until the in-flight ceremony finishes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"IDEMPOTENCY_KEY_CONFLICT","title":"Idempotency Key Conflict","status":409,"detail":"The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.","resolution":"Use a fresh idempotency key for the new request, or replay the original request unchanged.","docs":"https://v2.docs.conduit.financial/errors#idempotency-key-conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"422":{"description":"**WALLET_ROTATION_BLOCKED_BALANCE**: The wallet holds a balance (available, pending, or frozen) above the asset's dust floor and cannot be rotated. Rotation would strand those funds on the retired wallet record. A leftover at or below the dust floor does not block rotation — it is too small to be worth a transfer, so nothing will ever move it.\n\n**WALLET_ROTATION_BLOCKED_RETURN**: The wallet received a coin that Conduit does not support, and Conduit is returning it to its sender, can still return it, or cannot yet prove whether an earlier return sent it. Rotation would leave the coin on a wallet that Conduit can no longer send from.\n\n**WALLET_PROVISIONING_REJECTED**: The custody provider rejected the wallet creation; no wallet was created and no funds were moved.\n\n**CRYPTO_WALLET_CONSENSUS_REQUIRED**: This wallet operation needs a customer admin's approval before it can complete; it could not be finished synchronously. No funds were moved and no wallet was created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"WALLET_ROTATION_BLOCKED_BALANCE","title":"Wallet Rotation Blocked: Balance Above Dust","status":422,"detail":"The wallet holds a balance (available, pending, or frozen) above the asset's dust floor and cannot be rotated. Rotation would strand those funds on the retired wallet record. A leftover at or below the dust floor does not block rotation — it is too small to be worth a transfer, so nothing will ever move it.","resolution":"Move the funds out of the wallet (e.g. via a payout) and wait for any in-flight deposits to settle, then retry the rotation. Compliance-frozen balances must be released before rotation is possible.","docs":"https://v2.docs.conduit.financial/errors#wallet-rotation-blocked-balance","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"503":{"description":"**ASSET_CHAIN_PAUSED**: Conduit has temporarily paused this asset on this chain, or the whole chain, so it cannot accept this request now. Asset and chain pairs that are not paused stay available.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ASSET_CHAIN_PAUSED","title":"Asset Chain Paused","status":503,"detail":"Conduit has temporarily paused this asset on this chain, or the whole chain, so it cannot accept this request now. Asset and chain pairs that are not paused stay available.","resolution":"Retry the same request later; it succeeds once Conduit lifts the pause. Use an asset and chain pair that is not paused if you cannot wait.","docs":"https://v2.docs.conduit.financial/errors#asset-chain-paused","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Rotate a wallet","tags":["Wallets"]}},"/customers/{customerId}/wallet-signers":{"post":{"description":"Adds a new signer to the customer's wallet infrastructure. An add to a live (already-active) roster typically needs one admin approval — see [Multi-signer wallets](/concepts/multi-signer-wallets). The synchronous response returns a `verificationUrl` whose audience is given by `urlAudience`: a passkey signer gets their own enrollment link (`urlAudience: \"signer\"`, also delivered via the `wallet_signer.invited` webhook) — deliver it to the signer. For a passkey signer added to a live roster this `\"signer\"` link is the FIRST of two steps, not full self-service: once the signer enrolls their passkey the add parks a roster-add ceremony for a customer admin's co-stamp, and that admin link arrives ONLY on the `wallet_ceremony.awaiting_admin_approval` webhook (carrying the ceremony's `ceremonyId`), never in this response. An api_key signer that parks for admin approval instead returns the admin co-stamp link inline (`urlAudience: \"admin\"`, also delivered via the `wallet_ceremony.awaiting_admin_approval` webhook) — deliver it to an admin; a synchronously-admitted api_key signer returns null/null. A parked api_key add whose activity is still resolving at the custody provider ALSO returns null/null, but with `awaitingProvider: true` set — that flag is what distinguishes \"nothing to do, fully admitted\" from \"nothing to do yet, still resolving\" until the admin link becomes available (poll `reissue-admin-approval`, which mints it once the provider settles). If the admin webhook is lost, recover the admin link with `POST /wallet-signers/{signerId}/reissue-admin-approval`. When an api_key add parks on a roster that carries an ACTIVE api_key admin, the response ADDS `machineApproval` (a token + `approvalMaterial`) alongside that admin link and webhook: stamp the material with an ACTIVE api_key admin key and POST `{ method: \"api_key\", credential }` to `/v2/verifications/{token}/complete` (credential is `{ signedBody, stamp, organizationId }` as a nested JSON object; a JSON string of the same is deprecated and will be rejected in a future release) to activate the signer without opening the link — the same stamp-and-approve step every machine governance ceremony uses. Conduit never emails anyone — your platform delivers the link. Route by `urlAudience`, never assume the URL is the signer's.\n\nA later add is always a signer: a business has exactly 2 admins, so `role: \"admin\"` returns `409 ROOT_AT_CAPACITY_SWAP_REQUIRED`. To make someone an admin, add them as a signer, then promote them in place of an admin. The same signing-mode roster rules as the claim apply to later adds: api_key signers are only valid under a programmatic signing mode, and api_key admins only under programmatic unattended — otherwise `422 SIGNING_MODE_ROSTER_INVALID`. An api_key signer must include `publicKey`, the compressed public key (33 bytes / 66 hex chars, `02`/`03` prefix) on the curve of its `signatureScheme` — `p256` (the default), `secp256k1`, or `secp256k1_eip191` (an EVM wallet personal-message signature); a key already on an active signer returns `409 API_KEY_PUBLIC_KEY_IN_USE`. See [Programmatic payout signing](/guides/machine-signer-stamping).","operationId":"WalletSignersController_addSigner_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"Idempotency-Key","in":"header","description":"Caller-generated unique key that lets the server safely replay this request. The original response is returned for 30 days on any retry with the same key from the same organization, with the response header `Idempotency-Replayed: true`. Required on every state-changing money-moving or resource-creating POST.","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,128}$","minLength":1,"maxLength":128,"example":"01J7B3K2X9M8N5P6Q7R8S9T0V1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddWalletSignerDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddWalletSignerResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.\n\n**IDEMPOTENCY_KEY_REQUIRED**: This endpoint requires an Idempotency-Key header to prevent duplicate processing. Generate a unique key per logical request and resend the request.\n\n**IDEMPOTENCY_KEY_INVALID**: The Idempotency-Key header value did not match the required shape (1-128 characters, letters / digits / underscore / dot / colon / hyphen).\n\n**IDEMPOTENCY_BODY_TOO_NESTED**: The request body exceeds the maximum nesting depth allowed by the idempotency fingerprint hasher. Deeply-nested arrays or objects are rejected as a malformed payload.\n\n**API_KEY_PUBLIC_KEY_REQUIRED**: credentialType=api_key requires a publicKey (a compressed public key in hex, on the curve of the selected signatureScheme).\n\n**API_KEY_PUBLIC_KEY_INVALID**: The provided `publicKey` is not a valid compressed public key on the selected scheme's curve. Expected 66 hex characters (33 bytes) with a `02` or `03` prefix, on the curve of the selected `signatureScheme`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.\n\n**FEATURE_NOT_ENABLED**: Your account does not have access to this feature. Features are enabled on a per-account basis.\n\n**CAPABILITY_SUSPENDED**: This account is currently restricted from this action: a money movement, or opening a new account, wallet, customer or payout destination.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**CUSTOMER_NOT_FOUND**: No customer exists with the specified ID, or the customer belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CUSTOMER_NOT_FOUND","title":"Customer Not Found","status":404,"detail":"No customer exists with the specified ID, or the customer belongs to a different organization.","resolution":"Verify the customer ID is correct. Use the list customers endpoint to find valid customer IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#customer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**IDEMPOTENCY_KEY_CONFLICT**: The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.\n\n**IDEMPOTENCY_KEY_REQUEST_IN_PROGRESS**: An earlier request with this idempotency key has not finished, or stopped before its result was recorded. In the second case it may or may not have completed its work.\n\n**ROOT_AT_CAPACITY_SWAP_REQUIRED**: A business has exactly 2 admins, so a signer becomes an admin only by replacing one of them in the same ceremony. Adding a new member as an admin is not possible after the claim.\n\n**API_KEY_PUBLIC_KEY_IN_USE**: The `publicKey` on this add-signer request is already held by another active api_key signer on the customer's roster. Each machine signer must have a distinct public key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"IDEMPOTENCY_KEY_CONFLICT","title":"Idempotency Key Conflict","status":409,"detail":"The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.","resolution":"Use a fresh idempotency key for the new request, or replay the original request unchanged.","docs":"https://v2.docs.conduit.financial/errors#idempotency-key-conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"422":{"description":"**SIGNERS_NOT_SUPPORTED**: Signers can only be managed on non-custodial wallets. This customer's wallet is custodial, so the backend signs on its behalf.\n\n**INDIVIDUAL_ROSTER_INVALID**: An individual customer's self-managed wallet has exactly one admin and at most one person. The person signs with passkeys, under the email on file, and is the admin. With no person, which only the programmatic unattended signing mode allows, the admin is one api_key key. Every other member is an api_key signer. After the claim, the roster can only gain api_key signers.\n\n**UNPROCESSABLE_ENTITY**: The request was well-formed but could not be processed due to semantic errors or business rule violations.\n\n**API_KEY_CREDENTIAL_NOT_SUPPORTED**: The request includes a machine signer (`credentialType: api_key`) in a context where api_key signers cannot be enrolled. This is reserved for future compatibility and should not be seen in normal operation.\n\n**WALLET_NO_PROVIDER_ACCOUNT**: The customer does not yet have a wallet account on the underlying provider. Wallet addresses cannot be created until the customer claims non-custodial control.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"SIGNERS_NOT_SUPPORTED","title":"Signers Not Supported","status":422,"detail":"Signers can only be managed on non-custodial wallets. This customer's wallet is custodial, so the backend signs on its behalf.","resolution":"Claim the wallet as non-custodial via POST /v2/customers/:id/wallets/claim-non-custodial before adding or removing signers.","docs":"https://v2.docs.conduit.financial/errors#signers-not-supported","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Add a signer to a customer's wallets","tags":["Wallet Signers"]},"get":{"description":"Returns a paginated list of all current signers for the customer's wallets (excludes removed and errored signers).","operationId":"WalletSignersController_listSigners_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"cursor","required":false,"in":"query","description":"Opaque cursor from a previous response. Send `meta.nextCursor` with `direction=forward` to read the next page, or `meta.previousCursor` with `direction=backward` to read the previous page.","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of results to return (1-100)","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"direction","required":false,"in":"query","description":"Which side of the cursor to read: `forward` returns the rows after it, `backward` the rows before it. Rows come back in list order either way. Without a cursor, `forward` starts at the first row and `backward` at the end of the list.","schema":{"enum":["forward","backward"],"type":"string"}},{"name":"sortOrder","required":false,"in":"query","schema":{"enum":["asc","desc"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletSignerListResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**INVALID_CURSOR**: The pagination cursor provided in the request is malformed or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**FEATURE_NOT_ENABLED**: Your account does not have access to this feature. Features are enabled on a per-account basis.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**CUSTOMER_NOT_FOUND**: No customer exists with the specified ID, or the customer belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CUSTOMER_NOT_FOUND","title":"Customer Not Found","status":404,"detail":"No customer exists with the specified ID, or the customer belongs to a different organization.","resolution":"Verify the customer ID is correct. Use the list customers endpoint to find valid customer IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#customer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"List signers for a customer's wallets","tags":["Wallet Signers"]}},"/customers/{customerId}/wallet-signers/{signerId}/reissue-invite":{"post":{"description":"Returns a working verification link + expiry for a signer still completing enrollment — recovery for a lost `wallet_signer.invited` delivery. Idempotent: a live pending invite is returned unchanged; otherwise a fresh link is minted (carrying the signer's email so the verify portal is not blocked) and a `wallet_signer.invited` webhook fires. Returns the signer's own enrollment link (`urlAudience: \"signer\"`). 409 `SIGNER_PENDING_ADMIN_APPROVAL` when the signer has already enrolled a passkey on a live roster and is parked for an admin co-stamp — the blocker is an admin approval, so use `reissue-admin-approval` to recover the admin link instead. 409 `SIGNER_NOT_ENROLLABLE` if the signer is already active / being removed / errored; 404 if the signer is not on this customer.","operationId":"WalletSignersController_reissueInvite_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"signerId","required":true,"in":"path","schema":{"type":"string","example":"wsg_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"Idempotency-Key","in":"header","description":"Caller-generated unique key that lets the server safely replay this request. The original response is returned for 30 days on any retry with the same key from the same organization, with the response header `Idempotency-Replayed: true`. Required on every state-changing money-moving or resource-creating POST.","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,128}$","minLength":1,"maxLength":128,"example":"01J7B3K2X9M8N5P6Q7R8S9T0V1"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReissueInviteResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.\n\n**IDEMPOTENCY_KEY_REQUIRED**: This endpoint requires an Idempotency-Key header to prevent duplicate processing. Generate a unique key per logical request and resend the request.\n\n**IDEMPOTENCY_KEY_INVALID**: The Idempotency-Key header value did not match the required shape (1-128 characters, letters / digits / underscore / dot / colon / hyphen).\n\n**IDEMPOTENCY_BODY_TOO_NESTED**: The request body exceeds the maximum nesting depth allowed by the idempotency fingerprint hasher. Deeply-nested arrays or objects are rejected as a malformed payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**SIGNER_NOT_FOUND**: No signer exists with the specified ID for this wallet.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"SIGNER_NOT_FOUND","title":"Signer Not Found","status":404,"detail":"No signer exists with the specified ID for this wallet.","resolution":"Verify the signer ID is correct and that it belongs to the specified wallet.","docs":"https://v2.docs.conduit.financial/errors#signer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**IDEMPOTENCY_KEY_CONFLICT**: The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.\n\n**IDEMPOTENCY_KEY_REQUEST_IN_PROGRESS**: An earlier request with this idempotency key has not finished, or stopped before its result was recorded. In the second case it may or may not have completed its work.\n\n**SIGNER_NOT_ENROLLABLE**: The signer is not in a state that admits enrollment, so there is no invite to reissue (it is already active, being removed, removed, or errored).\n\n**SIGNER_PENDING_ADMIN_APPROVAL**: The signer has enrolled a passkey on a live roster and is now parked for a customer admin's co-stamp — the blocker is an admin approval, not a lost enrollment invite. Reissuing the signer invite would send the wrong link.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"IDEMPOTENCY_KEY_CONFLICT","title":"Idempotency Key Conflict","status":409,"detail":"The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.","resolution":"Use a fresh idempotency key for the new request, or replay the original request unchanged.","docs":"https://v2.docs.conduit.financial/errors#idempotency-key-conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Reissue a wallet signer's enrollment invite","tags":["Wallet Signers"]}},"/customers/{customerId}/wallet-signers/{signerId}/reissue-admin-approval":{"post":{"description":"Re-fetches the live admin co-stamp link for a signer parked pending an admin approval, and re-emits the matching awaiting-approval webhook — recovery for a client that lost that webhook. Deliver the returned `adminVerificationUrl` to a customer admin (never the signer). Covers both parked add shapes: a new signer joining the roster with their first credential (re-emits `wallet_ceremony.awaiting_admin_approval` carrying the `ceremonyId`) and an extra passkey for a signer who is already enrolled, such as a second device (re-emits the signer-scoped `wallet_signer.awaiting_admin_approval` keyed on `signerId`, with `ceremonyId: null`). The link is unchanged on repeat calls (no rotation). Also the recovery lever for a parked add whose signing activity was still resolving at the custody provider when it parked (`awaitingProvider: true`, no link minted yet): calling this endpoint re-checks that activity's live status and mints the admin link on the spot once it is ready to be approved, rather than always waiting for the webhook. 409 `SIGNER_NO_PENDING_ADMIN_APPROVAL` when the signer is not awaiting an admin co-stamp, including while that activity is still resolving and not yet ready to be approved (retry shortly); 404 if the signer is not on this customer.","operationId":"WalletSignersController_reissueAdminApproval_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"signerId","required":true,"in":"path","schema":{"type":"string","example":"wsg_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"Idempotency-Key","in":"header","description":"Caller-generated unique key that lets the server safely replay this request. The original response is returned for 30 days on any retry with the same key from the same organization, with the response header `Idempotency-Replayed: true`. Required on every state-changing money-moving or resource-creating POST.","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,128}$","minLength":1,"maxLength":128,"example":"01J7B3K2X9M8N5P6Q7R8S9T0V1"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReissueAdminApprovalResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.\n\n**IDEMPOTENCY_KEY_REQUIRED**: This endpoint requires an Idempotency-Key header to prevent duplicate processing. Generate a unique key per logical request and resend the request.\n\n**IDEMPOTENCY_KEY_INVALID**: The Idempotency-Key header value did not match the required shape (1-128 characters, letters / digits / underscore / dot / colon / hyphen).\n\n**IDEMPOTENCY_BODY_TOO_NESTED**: The request body exceeds the maximum nesting depth allowed by the idempotency fingerprint hasher. Deeply-nested arrays or objects are rejected as a malformed payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**SIGNER_NOT_FOUND**: No signer exists with the specified ID for this wallet.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"SIGNER_NOT_FOUND","title":"Signer Not Found","status":404,"detail":"No signer exists with the specified ID for this wallet.","resolution":"Verify the signer ID is correct and that it belongs to the specified wallet.","docs":"https://v2.docs.conduit.financial/errors#signer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**IDEMPOTENCY_KEY_CONFLICT**: The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.\n\n**IDEMPOTENCY_KEY_REQUEST_IN_PROGRESS**: An earlier request with this idempotency key has not finished, or stopped before its result was recorded. In the second case it may or may not have completed its work.\n\n**SIGNER_NO_PENDING_ADMIN_APPROVAL**: The signer has no live admin-approval awaiting a co-stamp, so there is no admin link to recover.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"IDEMPOTENCY_KEY_CONFLICT","title":"Idempotency Key Conflict","status":409,"detail":"The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.","resolution":"Use a fresh idempotency key for the new request, or replay the original request unchanged.","docs":"https://v2.docs.conduit.financial/errors#idempotency-key-conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Recover a signer's pending admin-approval link","tags":["Wallet Signers"]}},"/customers/{customerId}/wallet-signers/{signerId}/recovery":{"post":{"description":"Starts a recovery for an admin who lost one of their passkeys, such as an individual customer's one person, and returns the signer's recovery link. Deliver `verificationUrl` to the signer. On the link the signer creates a new passkey and confirms the change with the passkey they kept; that confirmation is the admin approval. After a cooling-off period Conduit co-approves, the new passkey is added and the lost one is removed (`wallet_ceremony.completed`). Idempotent: while the recovery waits for the new passkey, a repeat call with a new `idempotency-key` returns the live link, or a fresh link when it expired, and a fresh link fires `wallet_signer.recovery_opened`. `409 RECOVERY_REQUIRES_ROOT_ADMIN` when the signer is not an admin. `409 CEREMONY_IN_FLIGHT` when the new passkey already exists and the recovery waits for the cooling-off, or another change to the wallet is in progress. `409 RECOVERY_UNAVAILABLE` when Conduit holds the recovery for review. A signer who lost every passkey cannot use this link; contact Conduit support.","operationId":"WalletSignersController_startRecovery_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"signerId","required":true,"in":"path","schema":{"type":"string","example":"wsg_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"Idempotency-Key","in":"header","description":"Caller-generated unique key that lets the server safely replay this request. The original response is returned for 30 days on any retry with the same key from the same organization, with the response header `Idempotency-Replayed: true`. Required on every state-changing money-moving or resource-creating POST.","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,128}$","minLength":1,"maxLength":128,"example":"01J7B3K2X9M8N5P6Q7R8S9T0V1"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignerRecoveryResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.\n\n**IDEMPOTENCY_KEY_REQUIRED**: This endpoint requires an Idempotency-Key header to prevent duplicate processing. Generate a unique key per logical request and resend the request.\n\n**IDEMPOTENCY_KEY_INVALID**: The Idempotency-Key header value did not match the required shape (1-128 characters, letters / digits / underscore / dot / colon / hyphen).\n\n**IDEMPOTENCY_BODY_TOO_NESTED**: The request body exceeds the maximum nesting depth allowed by the idempotency fingerprint hasher. Deeply-nested arrays or objects are rejected as a malformed payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**SIGNER_NOT_FOUND**: No signer exists with the specified ID for this wallet.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"SIGNER_NOT_FOUND","title":"Signer Not Found","status":404,"detail":"No signer exists with the specified ID for this wallet.","resolution":"Verify the signer ID is correct and that it belongs to the specified wallet.","docs":"https://v2.docs.conduit.financial/errors#signer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**IDEMPOTENCY_KEY_CONFLICT**: The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.\n\n**IDEMPOTENCY_KEY_REQUEST_IN_PROGRESS**: An earlier request with this idempotency key has not finished, or stopped before its result was recorded. In the second case it may or may not have completed its work.\n\n**SIGNER_NOT_ACTIVE**: The signer is not in an active state and cannot perform the requested operation.\n\n**RECOVERY_UNSUPPORTED_CREDENTIAL_TYPE**: The target signer is not a passkey signer. Recovery mints a replacement passkey, so a machine (api_key) signer cannot be recovered through this flow.\n\n**RECOVERY_REQUIRES_ROOT_ADMIN**: Only an admin can replace a lost passkey with the passkey they kept, such as an individual customer's one person. For a signer, the custody provider applies the change at once, without the cooling-off and the approvals that a recovery needs.\n\n**RECOVERY_UNAVAILABLE**: Conduit cannot start a passkey recovery for this signer now. The request is held for review.\n\n**CEREMONY_IN_FLIGHT**: A ceremony for this account is already in progress and the request would duplicate it. This happens for a signer roster change (a concurrent promote or demote of the same signer), or for a wallet create when a wallet for the same account is already being created (for example, requesting a second EVM chain while the first EVM chain's wallet is still being set up — the EVM chains share one address), or for a wallet create and a wallet rotation on the same wallet, or on a chain that shares its address, while either one waits for admin approval. The request is rejected until the in-flight ceremony finishes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"IDEMPOTENCY_KEY_CONFLICT","title":"Idempotency Key Conflict","status":409,"detail":"The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.","resolution":"Use a fresh idempotency key for the new request, or replay the original request unchanged.","docs":"https://v2.docs.conduit.financial/errors#idempotency-key-conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Start a passkey recovery for a signer","tags":["Wallet Signers"]}},"/customers/{customerId}/wallet-signers/{signerId}/recovery/cancel":{"post":{"description":"Stops the signer's open passkey recovery before Conduit co-approves it, for example during the cooling-off when the signer did not ask for it. Nothing changes on the signer's passkeys, and `wallet_ceremony.failed` fires with status `cancelled`. A repeat call on a cancelled recovery succeeds. `404 RECOVERY_NOT_FOUND` when the signer has no recovery; `409 CEREMONY_NOT_CANCELLABLE` when the recovery already ended another way or Conduit is applying it.","operationId":"WalletSignersController_cancelRecovery_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"signerId","required":true,"in":"path","schema":{"type":"string","example":"wsg_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"Idempotency-Key","in":"header","description":"Caller-generated unique key that lets the server safely replay this request. The original response is returned for 30 days on any retry with the same key from the same organization, with the response header `Idempotency-Replayed: true`. Required on every state-changing money-moving or resource-creating POST.","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,128}$","minLength":1,"maxLength":128,"example":"01J7B3K2X9M8N5P6Q7R8S9T0V1"}}],"responses":{"204":{"description":"Recovery cancelled"},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.\n\n**IDEMPOTENCY_KEY_REQUIRED**: This endpoint requires an Idempotency-Key header to prevent duplicate processing. Generate a unique key per logical request and resend the request.\n\n**IDEMPOTENCY_KEY_INVALID**: The Idempotency-Key header value did not match the required shape (1-128 characters, letters / digits / underscore / dot / colon / hyphen).\n\n**IDEMPOTENCY_BODY_TOO_NESTED**: The request body exceeds the maximum nesting depth allowed by the idempotency fingerprint hasher. Deeply-nested arrays or objects are rejected as a malformed payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**RECOVERY_NOT_FOUND**: The signer has no passkey recovery.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"RECOVERY_NOT_FOUND","title":"Recovery Not Found","status":404,"detail":"The signer has no passkey recovery.","resolution":"Start a recovery with POST /v2/customers/{customerId}/wallet-signers/{signerId}/recovery.","docs":"https://v2.docs.conduit.financial/errors#recovery-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**IDEMPOTENCY_KEY_CONFLICT**: The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.\n\n**IDEMPOTENCY_KEY_REQUEST_IN_PROGRESS**: An earlier request with this idempotency key has not finished, or stopped before its result was recorded. In the second case it may or may not have completed its work.\n\n**CEREMONY_NOT_CANCELLABLE**: The ceremony is not in a PENDING state and cannot be cancelled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"IDEMPOTENCY_KEY_CONFLICT","title":"Idempotency Key Conflict","status":409,"detail":"The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.","resolution":"Use a fresh idempotency key for the new request, or replay the original request unchanged.","docs":"https://v2.docs.conduit.financial/errors#idempotency-key-conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Cancel a signer's passkey recovery","tags":["Wallet Signers"]}},"/customers/{customerId}/wallet-signers/{signerId}":{"delete":{"description":"Removes a signer from the customer's wallet infrastructure. Returns `204 No Content`. Removal runs through a governance ceremony; the outcome is disclosed additively in the response headers: `X-Conduit-Ceremony-Status` reports whether the removal is still awaiting admin approval or already complete, and `X-Conduit-Ceremony-Id` carries the roster-remove ceremony id (omitted only when the signer was already terminally removed). Completion is reported via the wallet_signer.removed webhook. Retrying the same removal is idempotent.","operationId":"WalletSignersController_removeSigner_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"signerId","required":true,"in":"path","schema":{"type":"string","example":"wsg_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"204":{"description":"Signer removal accepted","headers":{"X-Conduit-Ceremony-Status":{"description":"Removal outcome: `pending_removal` or `removed`.","schema":{"type":"string","enum":["pending_removal","removed"]}},"X-Conduit-Ceremony-Id":{"description":"The roster-remove ceremony id; omitted when the signer was already terminally removed.","schema":{"type":"string"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**FEATURE_NOT_ENABLED**: Your account does not have access to this feature. Features are enabled on a per-account basis.\n\n**SIGNER_REMOVAL_FORBIDDEN**: The signer cannot be removed because it is the last remaining signer on the wallet or has a protected role.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**SIGNER_NOT_FOUND**: No signer exists with the specified ID for this wallet.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"SIGNER_NOT_FOUND","title":"Signer Not Found","status":404,"detail":"No signer exists with the specified ID for this wallet.","resolution":"Verify the signer ID is correct and that it belongs to the specified wallet.","docs":"https://v2.docs.conduit.financial/errors#signer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**SIGNER_NOT_ACTIVE**: The signer is not in an active state and cannot perform the requested operation.\n\n**SIGNER_IS_ROOT_MEMBER**: An admin cannot be removed. A business always has its 2 admins, so an admin leaves the role only when a signer replaces it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"SIGNER_NOT_ACTIVE","title":"Signer Not Active","status":409,"detail":"The signer is not in an active state and cannot perform the requested operation.","resolution":"Check the signer's current status. Only active signers can sign transactions or be modified.","docs":"https://v2.docs.conduit.financial/errors#signer-not-active","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"422":{"description":"**UNPROCESSABLE_ENTITY**: The request was well-formed but could not be processed due to semantic errors or business rule violations.\n\n**SIGNERS_NOT_SUPPORTED**: Signers can only be managed on non-custodial wallets. This customer's wallet is custodial, so the backend signs on its behalf.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNPROCESSABLE_ENTITY","title":"Unprocessable Entity","status":422,"detail":"The request was well-formed but could not be processed due to semantic errors or business rule violations.","resolution":"Review the error details and adjust your request to comply with the documented business rules for this endpoint.","docs":"https://v2.docs.conduit.financial/errors#unprocessable-entity","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Remove a signer from a customer's wallets","tags":["Wallet Signers"]}},"/customers/{customerId}/wallet-signers/{signerId}/promote":{"post":{"description":"Makes the signer an admin in place of the admin named in `demoteSignerId`, in one ceremony: the signer becomes an admin and the named admin becomes a signer. A business has exactly 2 admins, so `demoteSignerId` is required (`409 ROOT_AT_CAPACITY_SWAP_REQUIRED` without it) and must name one of the customer's admins (`409 DEMOTE_TARGET_NOT_IN_ROOT`). Returns the ceremony id; completion is tracked via the wallet_signer.promoted / wallet_signer.demoted webhooks.","operationId":"WalletSignersController_promoteSigner_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"signerId","required":true,"in":"path","schema":{"type":"string","example":"wsg_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"Idempotency-Key","in":"header","description":"Caller-generated unique key that lets the server safely replay this request. The original response is returned for 30 days on any retry with the same key from the same organization, with the response header `Idempotency-Replayed: true`. Required on every state-changing money-moving or resource-creating POST.","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,128}$","minLength":1,"maxLength":128,"example":"01J7B3K2X9M8N5P6Q7R8S9T0V1"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromoteSignerDto"}}}},"responses":{"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RosterUpdateCeremonyResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.\n\n**IDEMPOTENCY_KEY_REQUIRED**: This endpoint requires an Idempotency-Key header to prevent duplicate processing. Generate a unique key per logical request and resend the request.\n\n**IDEMPOTENCY_KEY_INVALID**: The Idempotency-Key header value did not match the required shape (1-128 characters, letters / digits / underscore / dot / colon / hyphen).\n\n**IDEMPOTENCY_BODY_TOO_NESTED**: The request body exceeds the maximum nesting depth allowed by the idempotency fingerprint hasher. Deeply-nested arrays or objects are rejected as a malformed payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.\n\n**FEATURE_NOT_ENABLED**: Your account does not have access to this feature. Features are enabled on a per-account basis.\n\n**CAPABILITY_SUSPENDED**: This account is currently restricted from this action: a money movement, or opening a new account, wallet, customer or payout destination.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**SIGNER_NOT_FOUND**: No signer exists with the specified ID for this wallet.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"SIGNER_NOT_FOUND","title":"Signer Not Found","status":404,"detail":"No signer exists with the specified ID for this wallet.","resolution":"Verify the signer ID is correct and that it belongs to the specified wallet.","docs":"https://v2.docs.conduit.financial/errors#signer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**IDEMPOTENCY_KEY_CONFLICT**: The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.\n\n**IDEMPOTENCY_KEY_REQUEST_IN_PROGRESS**: An earlier request with this idempotency key has not finished, or stopped before its result was recorded. In the second case it may or may not have completed its work.\n\n**SIGNER_NOT_ACTIVE**: The signer is not in an active state and cannot perform the requested operation.\n\n**SIGNER_ALREADY_ADMIN**: The promotion target already has the `admin` role.\n\n**ROOT_AT_CAPACITY_SWAP_REQUIRED**: A business has exactly 2 admins, so a signer becomes an admin only by replacing one of them in the same ceremony. Adding a new member as an admin is not possible after the claim.\n\n**DEMOTE_TARGET_NOT_IN_ROOT**: `demoteSignerId` does not name one of the customer's current admins, other than the signer you promote.\n\n**CEREMONY_IN_FLIGHT**: A ceremony for this account is already in progress and the request would duplicate it. This happens for a signer roster change (a concurrent promote or demote of the same signer), or for a wallet create when a wallet for the same account is already being created (for example, requesting a second EVM chain while the first EVM chain's wallet is still being set up — the EVM chains share one address), or for a wallet create and a wallet rotation on the same wallet, or on a chain that shares its address, while either one waits for admin approval. The request is rejected until the in-flight ceremony finishes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"IDEMPOTENCY_KEY_CONFLICT","title":"Idempotency Key Conflict","status":409,"detail":"The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.","resolution":"Use a fresh idempotency key for the new request, or replay the original request unchanged.","docs":"https://v2.docs.conduit.financial/errors#idempotency-key-conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"422":{"description":"**INDIVIDUAL_ROSTER_INVALID**: An individual customer's self-managed wallet has exactly one admin and at most one person. The person signs with passkeys, under the email on file, and is the admin. With no person, which only the programmatic unattended signing mode allows, the admin is one api_key key. Every other member is an api_key signer. After the claim, the roster can only gain api_key signers.\n\n**SIGNER_PASSKEY_COUNT_TOO_LOW**: Promotion to admin requires a passkey-credential signer to have at least 2 registered passkeys, so they cannot lose admin access by losing a single device. Machine (api_key) admins do not need passkeys and are exempt (allowed only in the fully-automated signing mode).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INDIVIDUAL_ROSTER_INVALID","title":"Individual Roster Invalid","status":422,"detail":"An individual customer's self-managed wallet has exactly one admin and at most one person. The person signs with passkeys, under the email on file, and is the admin. With no person, which only the programmatic unattended signing mode allows, the admin is one api_key key. Every other member is an api_key signer. After the claim, the roster can only gain api_key signers.","resolution":"Name one admin. If the roster includes the person, make that member the admin, with the individual's email on file and `credentialType: passkey`, and make every other member an `api_key` signer. Add later members as `api_key` signers, and do not promote a signer to admin. The person enrolls two passkeys (for example on two devices) before the wallet activates.","docs":"https://v2.docs.conduit.financial/errors#individual-roster-invalid","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Promote a signer to admin in place of an admin","tags":["Wallet Signers"]}},"/customers/{customerId}/wallet-signers/{signerId}/demote":{"post":{"description":"A business keeps exactly 2 admins and an individual 1, so an admin leaves the role only when a signer replaces it: promote the signer with `demoteSignerId` set to the admin, and `wallet_signer.demoted` fires for the admin. This call starts no change: it returns `409 WOULD_BREAK_MIN_ADMINS` for an admin and `409 SIGNER_NOT_ADMIN` for a signer.","operationId":"WalletSignersController_demoteSigner_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"signerId","required":true,"in":"path","schema":{"type":"string","example":"wsg_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"Idempotency-Key","in":"header","description":"Caller-generated unique key that lets the server safely replay this request. The original response is returned for 30 days on any retry with the same key from the same organization, with the response header `Idempotency-Replayed: true`. Required on every state-changing money-moving or resource-creating POST.","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,128}$","minLength":1,"maxLength":128,"example":"01J7B3K2X9M8N5P6Q7R8S9T0V1"}}],"responses":{"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RosterUpdateCeremonyResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.\n\n**IDEMPOTENCY_KEY_REQUIRED**: This endpoint requires an Idempotency-Key header to prevent duplicate processing. Generate a unique key per logical request and resend the request.\n\n**IDEMPOTENCY_KEY_INVALID**: The Idempotency-Key header value did not match the required shape (1-128 characters, letters / digits / underscore / dot / colon / hyphen).\n\n**IDEMPOTENCY_BODY_TOO_NESTED**: The request body exceeds the maximum nesting depth allowed by the idempotency fingerprint hasher. Deeply-nested arrays or objects are rejected as a malformed payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.\n\n**FEATURE_NOT_ENABLED**: Your account does not have access to this feature. Features are enabled on a per-account basis.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**SIGNER_NOT_FOUND**: No signer exists with the specified ID for this wallet.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"SIGNER_NOT_FOUND","title":"Signer Not Found","status":404,"detail":"No signer exists with the specified ID for this wallet.","resolution":"Verify the signer ID is correct and that it belongs to the specified wallet.","docs":"https://v2.docs.conduit.financial/errors#signer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**IDEMPOTENCY_KEY_CONFLICT**: The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.\n\n**IDEMPOTENCY_KEY_REQUEST_IN_PROGRESS**: An earlier request with this idempotency key has not finished, or stopped before its result was recorded. In the second case it may or may not have completed its work.\n\n**SIGNER_NOT_ACTIVE**: The signer is not in an active state and cannot perform the requested operation.\n\n**SIGNER_NOT_ADMIN**: The demotion target is not currently an admin, so there is nothing to demote.\n\n**WOULD_BREAK_MIN_ADMINS**: Demoting this admin would leave the customer with fewer admins than it must have: 2 for a business, 1 for an individual. An admin leaves the role only when a signer replaces it, in one ceremony.\n\n**CEREMONY_IN_FLIGHT**: A ceremony for this account is already in progress and the request would duplicate it. This happens for a signer roster change (a concurrent promote or demote of the same signer), or for a wallet create when a wallet for the same account is already being created (for example, requesting a second EVM chain while the first EVM chain's wallet is still being set up — the EVM chains share one address), or for a wallet create and a wallet rotation on the same wallet, or on a chain that shares its address, while either one waits for admin approval. The request is rejected until the in-flight ceremony finishes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"IDEMPOTENCY_KEY_CONFLICT","title":"Idempotency Key Conflict","status":409,"detail":"The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.","resolution":"Use a fresh idempotency key for the new request, or replay the original request unchanged.","docs":"https://v2.docs.conduit.financial/errors#idempotency-key-conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Demote an admin","tags":["Wallet Signers"]}},"/customers/{customerId}/signing-quorum":{"get":{"description":"Returns the customer-level approval threshold, any pending change, the number of eligible signers, and per-wallet overrides.","operationId":"CustomerSigningQuorumController_get_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SigningQuorumResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**FEATURE_NOT_ENABLED**: Your account does not have access to this feature. Features are enabled on a per-account basis.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**PROVIDER_ACCOUNT_NOT_FOUND**: No provider account exists for the specified customer for the requested operation. Reset-claim reports it when there is no wallet account to reset; signing-quorum and recovery operations report it when the customer has no non-custodial provider account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"PROVIDER_ACCOUNT_NOT_FOUND","title":"Provider Account Not Found","status":404,"detail":"No provider account exists for the specified customer for the requested operation. Reset-claim reports it when there is no wallet account to reset; signing-quorum and recovery operations report it when the customer has no non-custodial provider account.","resolution":"Confirm the customer has an active wallet account before retrying. Signing-quorum and recovery operations require a non-custodial account specifically.","docs":"https://v2.docs.conduit.financial/errors#provider-account-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Get a customer's signing quorum configuration","tags":["Signing Quorum"]},"put":{"description":"Requests a change to the customer-level approval threshold. Applies immediately when no approval is required, otherwise returns a verification URL for signers to approve. The customer takes one signing-quorum change at a time: while a change to the customer threshold or to any wallet override is pending, this request returns 409 WALLET_THRESHOLD_CHANGE_PENDING.","operationId":"CustomerSigningQuorumController_set_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetSigningQuorumDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuorumChangeResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**FEATURE_NOT_ENABLED**: Your account does not have access to this feature. Features are enabled on a per-account basis.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**PROVIDER_ACCOUNT_NOT_FOUND**: No provider account exists for the specified customer for the requested operation. Reset-claim reports it when there is no wallet account to reset; signing-quorum and recovery operations report it when the customer has no non-custodial provider account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"PROVIDER_ACCOUNT_NOT_FOUND","title":"Provider Account Not Found","status":404,"detail":"No provider account exists for the specified customer for the requested operation. Reset-claim reports it when there is no wallet account to reset; signing-quorum and recovery operations report it when the customer has no non-custodial provider account.","resolution":"Confirm the customer has an active wallet account before retrying. Signing-quorum and recovery operations require a non-custodial account specifically.","docs":"https://v2.docs.conduit.financial/errors#provider-account-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**QUORUM_THRESHOLD_EXCEEDS_SIGNERS**: The requested signing-quorum threshold is greater than the number of active signers eligible to approve. A threshold can never exceed the signer count, or transactions would become impossible to sign.\n\n**WALLET_THRESHOLD_CHANGE_PENDING**: A signing-quorum change is already pending for this customer: a change to the customer threshold or to the override of any of its wallets. The customer takes one change at a time, so a second change is refused until the first is approved, declined or expires.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"QUORUM_THRESHOLD_EXCEEDS_SIGNERS","title":"Quorum Threshold Exceeds Eligible Signers","status":409,"detail":"The requested signing-quorum threshold is greater than the number of active signers eligible to approve. A threshold can never exceed the signer count, or transactions would become impossible to sign.","resolution":"Lower the requested threshold to at most the number of active signers, or add more signers before raising the threshold.","docs":"https://v2.docs.conduit.financial/errors#quorum-threshold-exceeds-signers","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Set a customer's signing quorum threshold","tags":["Signing Quorum"]}},"/wallets/{walletId}/signing-quorum":{"put":{"description":"Requests a per-wallet approval threshold that overrides the customer default, above or below it. The override applies to this wallet only, even when wallets on other chains share its address. Applies immediately when no approval is required, otherwise returns a verification URL for signers to approve. While another signing-quorum change on the customer is pending, returns 409 WALLET_THRESHOLD_CHANGE_PENDING.","operationId":"WalletSigningQuorumController_setOverride_v2","parameters":[{"name":"walletId","required":true,"in":"path","schema":{"type":"string","example":"wlt_1A2b3C4d5E6f7G8h9I0jKl"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetSigningQuorumDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuorumChangeResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**FEATURE_NOT_ENABLED**: Your account does not have access to this feature. Features are enabled on a per-account basis.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**WALLET_NOT_FOUND**: No wallet exists with the specified ID, or the wallet belongs to a different organization.\n\n**PROVIDER_ACCOUNT_NOT_FOUND**: No provider account exists for the specified customer for the requested operation. Reset-claim reports it when there is no wallet account to reset; signing-quorum and recovery operations report it when the customer has no non-custodial provider account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"WALLET_NOT_FOUND","title":"Wallet Not Found","status":404,"detail":"No wallet exists with the specified ID, or the wallet belongs to a different organization.","resolution":"Verify the wallet ID is correct. Use the list wallets endpoint to find valid wallet IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#wallet-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**QUORUM_THRESHOLD_EXCEEDS_SIGNERS**: The requested signing-quorum threshold is greater than the number of active signers eligible to approve. A threshold can never exceed the signer count, or transactions would become impossible to sign.\n\n**WALLET_THRESHOLD_CHANGE_PENDING**: A signing-quorum change is already pending for this customer: a change to the customer threshold or to the override of any of its wallets. The customer takes one change at a time, so a second change is refused until the first is approved, declined or expires.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"QUORUM_THRESHOLD_EXCEEDS_SIGNERS","title":"Quorum Threshold Exceeds Eligible Signers","status":409,"detail":"The requested signing-quorum threshold is greater than the number of active signers eligible to approve. A threshold can never exceed the signer count, or transactions would become impossible to sign.","resolution":"Lower the requested threshold to at most the number of active signers, or add more signers before raising the threshold.","docs":"https://v2.docs.conduit.financial/errors#quorum-threshold-exceeds-signers","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Override a wallet's signing quorum threshold","tags":["Signing Quorum"]},"delete":{"description":"Removes the per-wallet threshold override so the wallet inherits the customer default again. Applies immediately when no approval is required, otherwise returns a verification URL for signers to approve. While another signing-quorum change on the customer is pending, returns 409 WALLET_THRESHOLD_CHANGE_PENDING.","operationId":"WalletSigningQuorumController_clearOverride_v2","parameters":[{"name":"walletId","required":true,"in":"path","schema":{"type":"string","example":"wlt_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuorumChangeResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**FEATURE_NOT_ENABLED**: Your account does not have access to this feature. Features are enabled on a per-account basis.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**WALLET_NOT_FOUND**: No wallet exists with the specified ID, or the wallet belongs to a different organization.\n\n**PROVIDER_ACCOUNT_NOT_FOUND**: No provider account exists for the specified customer for the requested operation. Reset-claim reports it when there is no wallet account to reset; signing-quorum and recovery operations report it when the customer has no non-custodial provider account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"WALLET_NOT_FOUND","title":"Wallet Not Found","status":404,"detail":"No wallet exists with the specified ID, or the wallet belongs to a different organization.","resolution":"Verify the wallet ID is correct. Use the list wallets endpoint to find valid wallet IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#wallet-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**WALLET_THRESHOLD_CHANGE_PENDING**: A signing-quorum change is already pending for this customer: a change to the customer threshold or to the override of any of its wallets. The customer takes one change at a time, so a second change is refused until the first is approved, declined or expires.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"WALLET_THRESHOLD_CHANGE_PENDING","title":"Wallet Threshold Change Already Pending","status":409,"detail":"A signing-quorum change is already pending for this customer: a change to the customer threshold or to the override of any of its wallets. The customer takes one change at a time, so a second change is refused until the first is approved, declined or expires.","resolution":"Wait until the pending change is approved, declined or expires, then send the request again.","docs":"https://v2.docs.conduit.financial/errors#wallet-threshold-change-pending","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Clear a wallet's signing quorum override","tags":["Signing Quorum"]}},"/wallets/registered-addresses/{id}":{"get":{"description":"Returns a registered wallet address by id when it belongs to the authenticated organization.","operationId":"RegisteredAddressesController_getOne_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"wra_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisteredAddressResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**REGISTERED_ADDRESS_NOT_FOUND**: No registered address exists with the specified ID, or the registered address belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"REGISTERED_ADDRESS_NOT_FOUND","title":"Registered Address Not Found","status":404,"detail":"No registered address exists with the specified ID, or the registered address belongs to a different organization.","resolution":"Verify the registered address ID is correct. Use the list registered addresses endpoint to find valid IDs for the customer.","docs":"https://v2.docs.conduit.financial/errors#registered-address-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Get a registered address by id","tags":["Registered Addresses"]},"delete":{"description":"Revokes a registered wallet address for the authenticated organization without deleting its audit history. Revoking an address that is already revoked succeeds and returns 204 rather than an error, so the call is safe to retry after a lost response. A suspended address cannot be revoked and returns 409.","operationId":"RegisteredAddressesController_delete_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"wra_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"204":{"description":""},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**REGISTERED_ADDRESS_NOT_FOUND**: No registered address exists with the specified ID, or the registered address belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"REGISTERED_ADDRESS_NOT_FOUND","title":"Registered Address Not Found","status":404,"detail":"No registered address exists with the specified ID, or the registered address belongs to a different organization.","resolution":"Verify the registered address ID is correct. Use the list registered addresses endpoint to find valid IDs for the customer.","docs":"https://v2.docs.conduit.financial/errors#registered-address-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**REGISTERED_ADDRESS_INVALID_TRANSITION**: The requested status transition is not allowed for the registered address in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"REGISTERED_ADDRESS_INVALID_TRANSITION","title":"Registered Address Invalid Status Transition","status":409,"detail":"The requested status transition is not allowed for the registered address in its current state.","resolution":"Check the registered address's current status before performing status-change operations.","docs":"https://v2.docs.conduit.financial/errors#registered-address-invalid-transition","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Revoke (soft-delete) a registered address","tags":["Registered Addresses"]}},"/customers/{customerId}/virtual-accounts":{"get":{"description":"Returns a paginated list of virtual accounts for the customer with client-safe deposit instructions. Requires the virtual account feature to be active.","operationId":"VirtualAccountsController_list_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"cursor","required":false,"in":"query","description":"Opaque cursor from a previous response. Send `meta.nextCursor` with `direction=forward` to read the next page, or `meta.previousCursor` with `direction=backward` to read the previous page.","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of results to return (1-100)","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"direction","required":false,"in":"query","description":"Which side of the cursor to read: `forward` returns the rows after it, `backward` the rows before it. Rows come back in list order either way. Without a cursor, `forward` starts at the first row and `backward` at the end of the list.","schema":{"enum":["forward","backward"],"type":"string"}},{"name":"asset","required":false,"in":"query","description":"Filter to virtual accounts denominated in this asset code (e.g. `USD`). Case-insensitive.","schema":{"enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VirtualAccountListResponseClass"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**INVALID_CURSOR**: The pagination cursor provided in the request is malformed or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**FEATURE_NOT_ENABLED**: Your account does not have access to this feature. Features are enabled on a per-account basis.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**CUSTOMER_NOT_FOUND**: No customer exists with the specified ID, or the customer belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CUSTOMER_NOT_FOUND","title":"Customer Not Found","status":404,"detail":"No customer exists with the specified ID, or the customer belongs to a different organization.","resolution":"Verify the customer ID is correct. Use the list customers endpoint to find valid customer IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#customer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"List customer virtual accounts","tags":["Virtual Accounts"]}},"/customers/{customerId}/virtual-accounts/{virtualAccountId}":{"get":{"description":"Retrieves one customer virtual account with client-safe deposit instructions. Requires the virtual account feature to be active.","operationId":"VirtualAccountsController_get_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"virtualAccountId","required":true,"in":"path","schema":{"type":"string","example":"vac_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VirtualAccountResponseClass"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**FEATURE_NOT_ENABLED**: Your account does not have access to this feature. Features are enabled on a per-account basis.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**CUSTOMER_NOT_FOUND**: No customer exists with the specified ID, or the customer belongs to a different organization.\n\n**VIRTUAL_ACCOUNT_NOT_FOUND**: No virtual account exists for the requested customer and asset, or the virtual account belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CUSTOMER_NOT_FOUND","title":"Customer Not Found","status":404,"detail":"No customer exists with the specified ID, or the customer belongs to a different organization.","resolution":"Verify the customer ID is correct. Use the list customers endpoint to find valid customer IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#customer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Get a virtual account","tags":["Virtual Accounts"]}},"/customers/{customerId}/virtual-accounts/{virtualAccountId}/balances":{"get":{"description":"Returns what the virtual account holds, in the account's own asset. Give `date` to read what it held at the end of that UTC day. Omit `date` to read what it holds now, which is the same figure the virtual account resource carries.","operationId":"VirtualAccountsController_getBalances_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"virtualAccountId","required":true,"in":"path","schema":{"type":"string","example":"vac_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"date","required":false,"in":"query","description":"A past UTC day, as YYYY-MM-DD. The reply holds what the account held at the end of that day. Omit it to read what the account holds now.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountBalancesResponse"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**FEATURE_NOT_ENABLED**: Your account does not have access to this feature. Features are enabled on a per-account basis.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**CUSTOMER_NOT_FOUND**: No customer exists with the specified ID, or the customer belongs to a different organization.\n\n**VIRTUAL_ACCOUNT_NOT_FOUND**: No virtual account exists for the requested customer and asset, or the virtual account belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CUSTOMER_NOT_FOUND","title":"Customer Not Found","status":404,"detail":"No customer exists with the specified ID, or the customer belongs to a different organization.","resolution":"Verify the customer ID is correct. Use the list customers endpoint to find valid customer IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#customer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Get virtual account balances","tags":["Virtual Accounts"]}},"/customers/{customerId}/virtual-accounts/{virtualAccountId}/statement":{"get":{"description":"Returns every transaction that completed on the virtual account over a period, oldest first, with what the account held before and after. A line is one transaction, dated by its `completedAt`, so a transaction that completes in a month is on that month's statement and in the `completedAfter` / `completedBefore` list for that month. Give `from` and `to` as UTC days; both are included, `to` must be fully in the past, and the period holds at most 92 days. Follow `meta.nextCursor` for the next page; `openingBalance`, `closingBalance` and `totals` cover the whole period on every page.","operationId":"VirtualAccountsController_getStatement_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"virtualAccountId","required":true,"in":"path","schema":{"type":"string","example":"vac_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"from","required":true,"in":"query","description":"The first UTC day the statement covers, as YYYY-MM-DD. The day is included.","schema":{"type":"string"}},{"name":"to","required":true,"in":"query","description":"The last UTC day the statement covers, as YYYY-MM-DD. The day is included and must be fully in the past. The period holds at most 92 days.","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","description":"Opaque cursor from a previous response. Send `meta.nextCursor` with the same query to read the next page. A statement reads forward only.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountStatementResponse"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**INVALID_CURSOR**: The pagination cursor provided in the request is malformed or has expired.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**FEATURE_NOT_ENABLED**: Your account does not have access to this feature. Features are enabled on a per-account basis.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**CUSTOMER_NOT_FOUND**: No customer exists with the specified ID, or the customer belongs to a different organization.\n\n**VIRTUAL_ACCOUNT_NOT_FOUND**: No virtual account exists for the requested customer and asset, or the virtual account belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CUSTOMER_NOT_FOUND","title":"Customer Not Found","status":404,"detail":"No customer exists with the specified ID, or the customer belongs to a different organization.","resolution":"Verify the customer ID is correct. Use the list customers endpoint to find valid customer IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#customer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Get a virtual account statement","tags":["Virtual Accounts"]}},"/applications":{"get":{"description":"Returns a paginated list of applications for the authenticated organization. Applications track onboarding submissions, feature requests, and their review status. Filter by status, type, or customer to narrow results. Give `clientReferenceId` to list every application carrying that exact reference: a rejected or cancelled attempt keeps its reference, so a reference you resubmitted returns more than one.","operationId":"ApplicationsController_findAll_v2","parameters":[{"name":"cursor","required":false,"in":"query","description":"Opaque cursor from a previous response. Send `meta.nextCursor` with `direction=forward` to read the next page, or `meta.previousCursor` with `direction=backward` to read the previous page.","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of results to return (1-100)","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"direction","required":false,"in":"query","description":"Which side of the cursor to read: `forward` returns the rows after it, `backward` the rows before it. Rows come back in list order either way. Without a cursor, `forward` starts at the first row and `backward` at the end of the list.","schema":{"enum":["forward","backward"],"type":"string"}},{"name":"search","required":false,"in":"query","description":"Case-insensitive substring match on the legal name submitted on the application, the account holder's name on an individual application (first and last name, or first, middle and last name), the client reference ID, and the application ID.","schema":{"type":"string"}},{"name":"clientReferenceId","required":false,"in":"query","description":"Filter to the applications carrying this exact client reference ID. A rejected or cancelled application keeps its reference, so a reference that was resubmitted matches more than one. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces.","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","description":"Filter by one or more application statuses.","schema":{"type":"array","items":{"type":"string","enum":["pending","processing","approved","rejected","cancelled","needs_manual_review"]}}},{"name":"type","required":false,"in":"query","description":"Filter by one or more public application types.","schema":{"type":"array","items":{"type":"string","enum":["customer_onboarding","virtual_account","crypto_wallet","customer_update","yield"]}}},{"name":"customerId","required":false,"in":"query","description":"Filter to applications belonging to a single customer.","schema":{"type":"string"}},{"name":"sortBy","required":false,"in":"query","schema":{"enum":["createdAt","updatedAt","status","type","submittedAt"],"type":"string"}},{"name":"sortOrder","required":false,"in":"query","schema":{"enum":["asc","desc"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplicationPaginatedResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**INVALID_CURSOR**: The pagination cursor provided in the request is malformed or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"List all applications","tags":["Applications"]}},"/applications/{id}":{"get":{"description":"Retrieves the full details of a single application. Use this to check the current status of an onboarding or feature request submission.","operationId":"ApplicationsController_findById_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"app_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"200":{"description":"The requested application","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CustomerOnboardingApplicationDto"},{"$ref":"#/components/schemas/CustomerUpdateApplicationDto"},{"$ref":"#/components/schemas/VirtualAccountFeatureApplicationDto"},{"$ref":"#/components/schemas/CryptoWalletFeatureApplicationDto"},{"$ref":"#/components/schemas/YieldFeatureApplicationDto"}],"discriminator":{"propertyName":"type"}}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**APPLICATION_NOT_FOUND**: No application exists with the specified ID, or the application belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"APPLICATION_NOT_FOUND","title":"Application Not Found","status":404,"detail":"No application exists with the specified ID, or the application belongs to a different organization.","resolution":"Verify the application ID is correct. Use the list applications endpoint to find valid application IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#application-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Get an application by ID","tags":["Applications"]}},"/applications/{id}/cancel":{"post":{"description":"Cancels an application that is currently under review (`status: \"processing\"`). A `processing` application whose automated review could not finish cannot be cancelled and returns 409 `APPLICATION_INVALID_STATUS`; contact support to close it. Cancelling an application that is already `cancelled` returns 200 with the application unchanged. Applications in any other status (`pending`, `approved`, `rejected`) cannot be cancelled and return 409 `APPLICATION_INVALID_STATUS`. Cancelled applications cannot be resubmitted; create a new application instead.","operationId":"ApplicationsController_cancel_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"app_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"200":{"description":"The cancelled application","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CustomerOnboardingApplicationDto"},{"$ref":"#/components/schemas/CustomerUpdateApplicationDto"},{"$ref":"#/components/schemas/VirtualAccountFeatureApplicationDto"},{"$ref":"#/components/schemas/CryptoWalletFeatureApplicationDto"},{"$ref":"#/components/schemas/YieldFeatureApplicationDto"}],"discriminator":{"propertyName":"type"}}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**APPLICATION_NOT_FOUND**: No application exists with the specified ID, or the application belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"APPLICATION_NOT_FOUND","title":"Application Not Found","status":404,"detail":"No application exists with the specified ID, or the application belongs to a different organization.","resolution":"Verify the application ID is correct. Use the list applications endpoint to find valid application IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#application-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**APPLICATION_INVALID_STATUS**: The requested operation cannot be performed because the application is not in the required status.\n\n**CANCEL_IN_PROGRESS**: Another review action is active for this application.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"APPLICATION_INVALID_STATUS","title":"Application Invalid Status","status":409,"detail":"The requested operation cannot be performed because the application is not in the required status.","resolution":"Check the application's current status and refer to the documentation for allowed status transitions.","docs":"https://v2.docs.conduit.financial/errors#application-invalid-status","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"503":{"description":"**SERVICE_UNAVAILABLE**: The service is temporarily unable to handle your request due to maintenance or capacity constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"SERVICE_UNAVAILABLE","title":"Service Unavailable","status":503,"detail":"The service is temporarily unable to handle your request due to maintenance or capacity constraints.","resolution":"Retry the request using exponential backoff. When the response carries a `Retry-After` header (also in the `retryAfterSeconds` body field), wait at least that long before retrying. Check the status page for any ongoing incidents.","docs":"https://v2.docs.conduit.financial/errors#service-unavailable","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Cancel an application","tags":["Applications"]}},"/applications/{applicationId}/persons/{referenceId}/idv-link":{"post":{"description":"Returns the person's hosted identity-verification link — the same canonical link delivered by the `idv_link.created` webhook and by verification emails, for when you deliver it out-of-band yourself (e.g. you are not subscribed to `idv_link.created` and verification emails are disabled for your organization). The person is addressed by their stable `referenceId`, listed as `persons[].referenceId` on the application and carried on `idv_link.created` webhook events. Verification sessions are created asynchronously after application submission — this returns 404 until the session exists (react to the `idv_link.created` webhook or retry). Returns 409 `KYC_INQUIRY_LINK_UNAVAILABLE` once the person's verification has settled, and 409 `APPLICATION_INVALID_STATUS` once the application is approved, rejected or cancelled. Throttled to one in-flight request per person; on 429, retry after the `Retry-After` header. The returned URL is resumable — not single-use, it survives a refresh and a second device, and stays valid as long as the verification session does. Earlier links for the same person keep working. Treat it as a bearer secret and do not log it.","operationId":"PersonaInquiryApiController_getIdvLink_v2","parameters":[{"name":"applicationId","required":true,"in":"path","schema":{"type":"string","example":"app_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"referenceId","required":true,"in":"path","schema":{"type":"string","example":"app_1A2b3C4d5E6f7G8h9I0jKl:x7q"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonaInquiryLinkResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**APPLICATION_NOT_FOUND**: No application exists with the specified ID, or the application belongs to a different organization.\n\n**KYC_INQUIRY_NOT_FOUND**: No hosted identity verification exists yet for the requested application and person index. Either the application does not use a hosted identity check (a sandbox application, an application that attaches your own identity verification reports, or an individual application), or the verification has not been created yet.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"APPLICATION_NOT_FOUND","title":"Application Not Found","status":404,"detail":"No application exists with the specified ID, or the application belongs to a different organization.","resolution":"Verify the application ID is correct. Use the list applications endpoint to find valid application IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#application-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**APPLICATION_INVALID_STATUS**: The requested operation cannot be performed because the application is not in the required status.\n\n**KYC_INQUIRY_LINK_UNAVAILABLE**: No further hosted-flow link can be issued for this verification session: it has settled (completed, approved, declined, failed, or awaiting a manual decision), or the provider no longer considers it eligible to resume. A session that has merely lapsed is not in this state — it is revived automatically when a new link is requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"APPLICATION_INVALID_STATUS","title":"Application Invalid Status","status":409,"detail":"The requested operation cannot be performed because the application is not in the required status.","resolution":"Check the application's current status and refer to the documentation for allowed status transitions.","docs":"https://v2.docs.conduit.financial/errors#application-invalid-status","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.\n\n**KYC_INQUIRY_LINK_RATE_LIMITED**: A regenerate-link request is already in flight for this UBO. The endpoint serialises requests per UBO with a short lock so the KYC provider isn't hammered with duplicate link requests from a double-click or a stuck retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"502":{"description":"**KYC_UPSTREAM_UNAVAILABLE**: The KYC provider returned a server error, replied with an unusable response, or was not reachable at all (network failure, timeout). The verification session itself is fine; the provider just couldn't give us a usable answer right now.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"KYC_UPSTREAM_UNAVAILABLE","title":"KYC Upstream Unavailable","status":502,"detail":"The KYC provider returned a server error, replied with an unusable response, or was not reachable at all (network failure, timeout). The verification session itself is fine; the provider just couldn't give us a usable answer right now.","resolution":"Retry the request after a brief delay. If the failure persists, check the KYC provider's status page before assuming the inquiry is broken.","docs":"https://v2.docs.conduit.financial/errors#kyc-upstream-unavailable","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Get an identity-verification link for a person","tags":["Applications"]}},"/customers/{customerId}/verifications":{"post":{"description":"Starts a verification process for a customer. Returns a verification URL where the customer completes the required verification step. Use the clientReferenceId to correlate this verification with your internal records.\n\nFor a non-custodial payout's signing-link verification, this endpoint does not mint a new link — the signing link is created and delivered on the `transaction.awaiting_signature` webhook (set clientReferenceId to the payout id). When the referenced payout is already awaiting signature, the call returns that current live link (idempotent, so it doubles as a way to re-fetch a link you missed on the webhook); when the payout has not yet reached signature collection, it returns `409 TRANSACTION_NOT_AWAITING_SIGNATURE`. A human link is returned whenever a human passkey signer can approve the payout — that is, for a passkey_required wallet, and for a programmatic wallet whose roster has an active passkey signer. A programmatic wallet with a machine-only roster has no human signer, so this returns `409 SIGNING_LINK_NOT_HUMAN_SIGNABLE`; read the `signingRequestId` from the webhook and approve via `/v2/signing-requests/{id}` instead. See the Non-Custodial Payout Lifecycle guide, section \"Getting the signing link\".\n\nA ceremony approval link cannot be requested here: the call that starts the ceremony returns it, the `wallet_ceremony.awaiting_admin_approval` webhook delivers each later one, and this endpoint answers `422 VERIFICATION_TYPE_NOT_REISSUABLE`.","operationId":"VerificationsController_initiateVerification_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InitiateVerificationDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InitiateVerificationResponseDtoClass"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**CUSTOMER_NOT_FOUND**: No customer exists with the specified ID, or the customer belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CUSTOMER_NOT_FOUND","title":"Customer Not Found","status":404,"detail":"No customer exists with the specified ID, or the customer belongs to a different organization.","resolution":"Verify the customer ID is correct. Use the list customers endpoint to find valid customer IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#customer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**TRANSACTION_NOT_AWAITING_SIGNATURE**: The transaction has not reached signature collection, so there is no signing link to return. Non-custodial payouts are minted a signing link only after they clear compliance and document review; that link is delivered on the passkey_required variant of the transaction.awaiting_signature webhook, never by minting one through this endpoint.\n\n**SIGNING_LINK_NOT_HUMAN_SIGNABLE**: This payout's wallet signs in a programmatic mode and its roster is machine-only — no human signer can approve it, so there is no verification link to return. The signing handle is delivered as a signingRequestId on the transaction.awaiting_signature webhook, and your machine integration approves or rejects it through the signing-requests API. A programmatic wallet that has an active passkey signer DOES return the human link here (that signer may approve on the verify page); this error means the roster carries no such signer.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"TRANSACTION_NOT_AWAITING_SIGNATURE","title":"Transaction Not Awaiting Signature","status":409,"detail":"The transaction has not reached signature collection, so there is no signing link to return. Non-custodial payouts are minted a signing link only after they clear compliance and document review; that link is delivered on the passkey_required variant of the transaction.awaiting_signature webhook, never by minting one through this endpoint.","resolution":"Do not create a transaction_approval verification for a payout yourself. Wait for the transaction.awaiting_signature webhook and route your signers to the verificationUrl it carries (passkey_required mode). Re-fetch the payout to confirm it is still awaiting signature.","docs":"https://v2.docs.conduit.financial/errors#transaction-not-awaiting-signature","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"422":{"description":"**VERIFICATION_TYPE_NOT_REISSUABLE**: This verification type cannot be initiated through the generic verifications route because it requires per-type context the route cannot supply.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"VERIFICATION_TYPE_NOT_REISSUABLE","title":"Verification Type Not Reissuable Here","status":422,"detail":"This verification type cannot be initiated through the generic verifications route because it requires per-type context the route cannot supply.","resolution":"This verification type needs context that only Conduit can supply, so this route cannot start it. For a wallet signer invite, use POST /v2/customers/:customerId/wallet-signers/:signerId/reissue-invite. For signer recovery, Conduit sends the enrollment link after it verifies the signer's identity, so contact Conduit. For a ceremony approval, use the link that the call which started the ceremony returned, or the link on the latest `wallet_ceremony.awaiting_admin_approval` webhook; to get a lost link again, contact Conduit.","docs":"https://v2.docs.conduit.financial/errors#verification-type-not-reissuable","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Initiate a customer verification","tags":["Verifications"]}},"/signing-requests":{"get":{"description":"Returns the requests whose customer signing quorum your backend must approve: programmatic-mode accounts with a pending approval whose quorum is still being collected. `kind=payout` (the default) lists payouts; `kind=wallet_setup` lists the one-time on-chain setups of new wallets; `kind=delivery_recovery` lists the returns of payouts that the payee's receive policy held, back to the wallets that sent them; `kind=unsupported_asset_return` lists the returns of coins Conduit does not support, back to the addresses they came from. Each carries the versioned approval material to stamp. Never cached.","operationId":"SigningRequestsController_list_v2","parameters":[{"name":"cursor","required":false,"in":"query","description":"Opaque cursor from a previous response. Send `meta.nextCursor` with `direction=forward` to read the next page, or `meta.previousCursor` with `direction=backward` to read the previous page.","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of results to return (1-100)","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"direction","required":false,"in":"query","description":"Which side of the cursor to read: `forward` returns the rows after it, `backward` the rows before it. Rows come back in list order either way. Without a cursor, `forward` starts at the first row and `backward` at the end of the list.","schema":{"enum":["forward","backward"],"type":"string"}},{"name":"kind","required":false,"in":"query","description":"Which requests to list: `payout` (the default), `wallet_setup`, the one-time on-chain setup of a new wallet, `delivery_recovery`, the return of a payout that the payee's receive policy held, back to the wallet that sent it, or `unsupported_asset_return`, the return of a coin Conduit does not support to the address it came from.","schema":{"enum":["payout","wallet_setup","delivery_recovery","unsupported_asset_return"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SigningRequestPaginatedResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**INVALID_CURSOR**: The pagination cursor provided in the request is malformed or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"List signing requests awaiting a machine signature","tags":["Signing Requests"]}},"/signing-requests/{id}":{"get":{"description":"Returns a single signing request and its current state, addressed by the id delivered on the `transaction.awaiting_signature`, `wallet.awaiting_setup_signature`, `transaction.awaiting_recovery_signature` or `transaction.awaiting_return_signature` webhook. Never cached.","operationId":"SigningRequestsController_getById_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"vrf_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/PayoutSigningRequestResponseDto"},{"$ref":"#/components/schemas/WalletSetupSigningRequestResponseDto"},{"$ref":"#/components/schemas/DeliveryRecoverySigningRequestResponseDto"},{"$ref":"#/components/schemas/UnsupportedAssetReturnSigningRequestResponseDto"}],"discriminator":{"propertyName":"kind"}}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**SIGNING_REQUEST_NOT_FOUND**: No signing request with this id exists for your account. The same response is returned for an id that belongs to another account, so a 404 never confirms that an id exists elsewhere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"SIGNING_REQUEST_NOT_FOUND","title":"Signing request not found","status":404,"detail":"No signing request with this id exists for your account. The same response is returned for an id that belongs to another account, so a 404 never confirms that an id exists elsewhere.","resolution":"List your actionable signing requests with GET /v2/signing-requests and use an id from that list. The transaction.awaiting_signature webhook also delivers the id directly as signingRequestId (programmatic mode).","docs":"https://v2.docs.conduit.financial/errors#signing-request-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**SIGNING_MODE_NOT_PROGRAMMATIC**: This wallet's signing mode requires human passkey approval, so machine (api-key) stamps are not accepted. The signing-requests API only serves accounts whose signing mode is `programmatic` or `programmatic_unattended`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"SIGNING_MODE_NOT_PROGRAMMATIC","title":"Wallet is not configured for programmatic signing","status":409,"detail":"This wallet's signing mode requires human passkey approval, so machine (api-key) stamps are not accepted. The signing-requests API only serves accounts whose signing mode is `programmatic` or `programmatic_unattended`.","resolution":"Have Conduit enable a programmatic signing mode for this customer, or approve the payout with a passkey on the Conduit-hosted verification page.","docs":"https://v2.docs.conduit.financial/errors#signing-mode-not-programmatic","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Get a signing request","tags":["Signing Requests"]}},"/signing-requests/{id}/approve":{"post":{"description":"Submits a machine (api-key) stamp approving the payout, wallet setup, payout return or unsupported-coin return. The stamp is `base64url({publicKey, scheme, signature})`. `scheme` is required and must be the one this signer is enrolled with, spelled as the envelope value: `SIGNATURE_SCHEME_TK_API_P256`, `SIGNATURE_SCHEME_TK_API_SECP256K1`, or `SIGNATURE_SCHEME_TK_API_SECP256K1_EIP191` (an EVM wallet personal-message signature). A signer registered without an explicit `signatureScheme` is enrolled as P-256. A stamp whose scheme is not the enrolled one is refused with `422 SIGNER_CREDENTIAL_SCHEME_NOT_ADMISSIBLE` before anything is relayed, so no vote is cast. Conduit verifies the signature locally, resolves it to an active machine signer, checks it authorizes this exact request, and relays it to the signing provider. Idempotent: whether the request is still collecting signatures or already resolved, a (re)submission returns the request's current state — safe to retry after a timeout. Send an `Idempotency-Key` header (required on this money-moving route). See [Programmatic payout signing](/guides/machine-signer-stamping) for the per-scheme digest and the signature encoding.","operationId":"SigningRequestsController_approve_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"vrf_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"Idempotency-Key","in":"header","description":"Caller-generated unique key that lets the server safely replay this request. The original response is returned for 30 days on any retry with the same key from the same organization, with the response header `Idempotency-Replayed: true`. Required on every state-changing money-moving or resource-creating POST.","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,128}$","minLength":1,"maxLength":128,"example":"01J7B3K2X9M8N5P6Q7R8S9T0V1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitSigningStampBodyDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/PayoutSigningRequestResponseDto"},{"$ref":"#/components/schemas/WalletSetupSigningRequestResponseDto"},{"$ref":"#/components/schemas/DeliveryRecoverySigningRequestResponseDto"},{"$ref":"#/components/schemas/UnsupportedAssetReturnSigningRequestResponseDto"}],"discriminator":{"propertyName":"kind"}}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.\n\n**IDEMPOTENCY_KEY_REQUIRED**: This endpoint requires an Idempotency-Key header to prevent duplicate processing. Generate a unique key per logical request and resend the request.\n\n**IDEMPOTENCY_KEY_INVALID**: The Idempotency-Key header value did not match the required shape (1-128 characters, letters / digits / underscore / dot / colon / hyphen).\n\n**IDEMPOTENCY_BODY_TOO_NESTED**: The request body exceeds the maximum nesting depth allowed by the idempotency fingerprint hasher. Deeply-nested arrays or objects are rejected as a malformed payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**SIGNING_REQUEST_NOT_FOUND**: No signing request with this id exists for your account. The same response is returned for an id that belongs to another account, so a 404 never confirms that an id exists elsewhere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"SIGNING_REQUEST_NOT_FOUND","title":"Signing request not found","status":404,"detail":"No signing request with this id exists for your account. The same response is returned for an id that belongs to another account, so a 404 never confirms that an id exists elsewhere.","resolution":"List your actionable signing requests with GET /v2/signing-requests and use an id from that list. The transaction.awaiting_signature webhook also delivers the id directly as signingRequestId (programmatic mode).","docs":"https://v2.docs.conduit.financial/errors#signing-request-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**IDEMPOTENCY_KEY_CONFLICT**: The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.\n\n**IDEMPOTENCY_KEY_REQUEST_IN_PROGRESS**: An earlier request with this idempotency key has not finished, or stopped before its result was recorded. In the second case it may or may not have completed its work.\n\n**SIGNING_MODE_NOT_PROGRAMMATIC**: This wallet's signing mode requires human passkey approval, so machine (api-key) stamps are not accepted. The signing-requests API only serves accounts whose signing mode is `programmatic` or `programmatic_unattended`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"IDEMPOTENCY_KEY_CONFLICT","title":"Idempotency Key Conflict","status":409,"detail":"The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.","resolution":"Use a fresh idempotency key for the new request, or replay the original request unchanged.","docs":"https://v2.docs.conduit.financial/errors#idempotency-key-conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"422":{"description":"**SIGNING_STAMP_INVALID**: The submitted stamp could not be verified: it is not well-formed for the signer's registered scheme, its signature does not match the signed body, or the signed body does not authorize this exact signing request (its activity fingerprint, sub-organization, or request type does not match).\n\n**SIGNING_STAMP_SIGNER_UNKNOWN**: The stamp's public key does not resolve to an ACTIVE machine (api_key) signer on the wallet's roster. The signature verified, but the key is not one of this account's provisioned api-key signers.\n\n**SIGNING_STAMP_ATTRIBUTION_MISMATCH**: The stamp verified locally and resolved to one of your machine signers, but the signing provider did not record a vote for that signer — the vote was attributed elsewhere or not recorded. Conduit fails closed rather than counting a vote toward quorum that it cannot attribute to the signer you submitted.\n\n**SIGNER_CREDENTIAL_SCHEME_NOT_ADMISSIBLE**: A counted signer's approval was stamped with a credential that does not match the credential that signer is enrolled with: a passkey signer must stamp with their passkey, and a machine (api-key) signer must stamp with its api key using the exact scheme it was enrolled with. Substituting one for the other is rejected, as is any credential the wallet's signing mode does not permit at all — passkey-required wallets accept only passkey approvals, and no credential other than an enrolled passkey or provisioned machine api-key is ever admissible.\n\n**SIGNATURE_REJECTED**: The signing provider rejected the stamped request. The signer is authenticated, but the signature itself could not be applied: the assertion can target the wrong sub-organization, the activity can have completed or expired, or a policy denied the vote.\n\n**SIGNING_ACTIVITY_NOT_AT_PROVIDER**: The signing provider has no record of the activity this signing request points at, so it counted no vote. This is not a bad signature and not a rejection: the provider can no longer tell us whether this request was signed, and Conduit holds the payout rather than guessing. It usually means the provider-side activity expired or was cleared while the request was open.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"SIGNING_STAMP_INVALID","title":"Signing stamp is invalid","status":422,"detail":"The submitted stamp could not be verified: it is not well-formed for the signer's registered scheme, its signature does not match the signed body, or the signed body does not authorize this exact signing request (its activity fingerprint, sub-organization, or request type does not match).","resolution":"Re-fetch the signing request's approval material with GET /v2/signing-requests/{id}, rebuild the approve/reject activity body exactly as returned, and stamp it with your machine signer's api key using the scheme it was registered with.","docs":"https://v2.docs.conduit.financial/errors#signing-stamp-invalid","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"502":{"description":"**SIGNING_PROVIDER_UNAVAILABLE**: The signing provider returned a transient upstream error (network failure, timeout, rate limit, or 5xx) rather than a definitive verdict on the stamped request. The signer is authenticated and the request itself is fine — the provider just couldn't be reached right now.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"SIGNING_PROVIDER_UNAVAILABLE","title":"Signing Provider Unavailable","status":502,"detail":"The signing provider returned a transient upstream error (network failure, timeout, rate limit, or 5xx) rather than a definitive verdict on the stamped request. The signer is authenticated and the request itself is fine — the provider just couldn't be reached right now.","resolution":"Retry the request after a brief delay. Do not re-authenticate — the session is still valid.","docs":"https://v2.docs.conduit.financial/errors#signing-provider-unavailable","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Approve a signing request with a machine stamp","tags":["Signing Requests"]}},"/signing-requests/{id}/reject":{"post":{"description":"Submits a machine (api-key) stamp rejecting the payout, wallet setup, payout return or unsupported-coin return. Built, verified and relayed exactly like an approval — same envelope, and the same rule that the envelope's `SIGNATURE_SCHEME_TK_API_*` value must be the scheme this signer is enrolled with — with `ACTIVITY_TYPE_REJECT_ACTIVITY` as the activity type. A rejection follows the signing provider's consensus semantics. Idempotent: a (re)submission against an already-resolved request returns its current state. Send an `Idempotency-Key` header (required on this money-moving route). See [Programmatic payout signing](/guides/machine-signer-stamping).","operationId":"SigningRequestsController_reject_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"vrf_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"Idempotency-Key","in":"header","description":"Caller-generated unique key that lets the server safely replay this request. The original response is returned for 30 days on any retry with the same key from the same organization, with the response header `Idempotency-Replayed: true`. Required on every state-changing money-moving or resource-creating POST.","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,128}$","minLength":1,"maxLength":128,"example":"01J7B3K2X9M8N5P6Q7R8S9T0V1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitSigningStampBodyDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/PayoutSigningRequestResponseDto"},{"$ref":"#/components/schemas/WalletSetupSigningRequestResponseDto"},{"$ref":"#/components/schemas/DeliveryRecoverySigningRequestResponseDto"},{"$ref":"#/components/schemas/UnsupportedAssetReturnSigningRequestResponseDto"}],"discriminator":{"propertyName":"kind"}}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.\n\n**IDEMPOTENCY_KEY_REQUIRED**: This endpoint requires an Idempotency-Key header to prevent duplicate processing. Generate a unique key per logical request and resend the request.\n\n**IDEMPOTENCY_KEY_INVALID**: The Idempotency-Key header value did not match the required shape (1-128 characters, letters / digits / underscore / dot / colon / hyphen).\n\n**IDEMPOTENCY_BODY_TOO_NESTED**: The request body exceeds the maximum nesting depth allowed by the idempotency fingerprint hasher. Deeply-nested arrays or objects are rejected as a malformed payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**SIGNING_REQUEST_NOT_FOUND**: No signing request with this id exists for your account. The same response is returned for an id that belongs to another account, so a 404 never confirms that an id exists elsewhere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"SIGNING_REQUEST_NOT_FOUND","title":"Signing request not found","status":404,"detail":"No signing request with this id exists for your account. The same response is returned for an id that belongs to another account, so a 404 never confirms that an id exists elsewhere.","resolution":"List your actionable signing requests with GET /v2/signing-requests and use an id from that list. The transaction.awaiting_signature webhook also delivers the id directly as signingRequestId (programmatic mode).","docs":"https://v2.docs.conduit.financial/errors#signing-request-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**IDEMPOTENCY_KEY_CONFLICT**: The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.\n\n**IDEMPOTENCY_KEY_REQUEST_IN_PROGRESS**: An earlier request with this idempotency key has not finished, or stopped before its result was recorded. In the second case it may or may not have completed its work.\n\n**SIGNING_MODE_NOT_PROGRAMMATIC**: This wallet's signing mode requires human passkey approval, so machine (api-key) stamps are not accepted. The signing-requests API only serves accounts whose signing mode is `programmatic` or `programmatic_unattended`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"IDEMPOTENCY_KEY_CONFLICT","title":"Idempotency Key Conflict","status":409,"detail":"The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.","resolution":"Use a fresh idempotency key for the new request, or replay the original request unchanged.","docs":"https://v2.docs.conduit.financial/errors#idempotency-key-conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"422":{"description":"**SIGNING_STAMP_INVALID**: The submitted stamp could not be verified: it is not well-formed for the signer's registered scheme, its signature does not match the signed body, or the signed body does not authorize this exact signing request (its activity fingerprint, sub-organization, or request type does not match).\n\n**SIGNING_STAMP_SIGNER_UNKNOWN**: The stamp's public key does not resolve to an ACTIVE machine (api_key) signer on the wallet's roster. The signature verified, but the key is not one of this account's provisioned api-key signers.\n\n**SIGNING_STAMP_ATTRIBUTION_MISMATCH**: The stamp verified locally and resolved to one of your machine signers, but the signing provider did not record a vote for that signer — the vote was attributed elsewhere or not recorded. Conduit fails closed rather than counting a vote toward quorum that it cannot attribute to the signer you submitted.\n\n**SIGNER_CREDENTIAL_SCHEME_NOT_ADMISSIBLE**: A counted signer's approval was stamped with a credential that does not match the credential that signer is enrolled with: a passkey signer must stamp with their passkey, and a machine (api-key) signer must stamp with its api key using the exact scheme it was enrolled with. Substituting one for the other is rejected, as is any credential the wallet's signing mode does not permit at all — passkey-required wallets accept only passkey approvals, and no credential other than an enrolled passkey or provisioned machine api-key is ever admissible.\n\n**SIGNATURE_REJECTED**: The signing provider rejected the stamped request. The signer is authenticated, but the signature itself could not be applied: the assertion can target the wrong sub-organization, the activity can have completed or expired, or a policy denied the vote.\n\n**SIGNING_ACTIVITY_NOT_AT_PROVIDER**: The signing provider has no record of the activity this signing request points at, so it counted no vote. This is not a bad signature and not a rejection: the provider can no longer tell us whether this request was signed, and Conduit holds the payout rather than guessing. It usually means the provider-side activity expired or was cleared while the request was open.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"SIGNING_STAMP_INVALID","title":"Signing stamp is invalid","status":422,"detail":"The submitted stamp could not be verified: it is not well-formed for the signer's registered scheme, its signature does not match the signed body, or the signed body does not authorize this exact signing request (its activity fingerprint, sub-organization, or request type does not match).","resolution":"Re-fetch the signing request's approval material with GET /v2/signing-requests/{id}, rebuild the approve/reject activity body exactly as returned, and stamp it with your machine signer's api key using the scheme it was registered with.","docs":"https://v2.docs.conduit.financial/errors#signing-stamp-invalid","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"502":{"description":"**SIGNING_PROVIDER_UNAVAILABLE**: The signing provider returned a transient upstream error (network failure, timeout, rate limit, or 5xx) rather than a definitive verdict on the stamped request. The signer is authenticated and the request itself is fine — the provider just couldn't be reached right now.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"SIGNING_PROVIDER_UNAVAILABLE","title":"Signing Provider Unavailable","status":502,"detail":"The signing provider returned a transient upstream error (network failure, timeout, rate limit, or 5xx) rather than a definitive verdict on the stamped request. The signer is authenticated and the request itself is fine — the provider just couldn't be reached right now.","resolution":"Retry the request after a brief delay. Do not re-authenticate — the session is still valid.","docs":"https://v2.docs.conduit.financial/errors#signing-provider-unavailable","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Reject a signing request with a machine stamp","tags":["Signing Requests"]}},"/transactions/{id}/sender-information":{"post":{"description":"Two paths: register=false records sender data for this deposit only; register=true also creates a durable RegisteredAddress (created on compliance approval at end-of-flow) that resolves any future deposits from the same address. If the address already has an active registration with other details, the deposit still completes and no registration is created or changed. First-snapshot wins — once recorded, a second submission returns 409. Returns 202 with the transaction in its post-signal state; poll GET /v2/transactions/:id for downstream updates.","operationId":"SenderInformationController_submit_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"txn_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"Idempotency-Key","in":"header","description":"Caller-generated unique key that lets the server safely replay this request. The original response is returned for 30 days on any retry with the same key from the same organization, with the response header `Idempotency-Replayed: true`. Required on every state-changing money-moving or resource-creating POST.","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,128}$","minLength":1,"maxLength":128,"example":"01J7B3K2X9M8N5P6Q7R8S9T0V1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitSenderInformationBodyDto"}}}},"responses":{"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicDepositViewDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.\n\n**IDEMPOTENCY_KEY_REQUIRED**: This endpoint requires an Idempotency-Key header to prevent duplicate processing. Generate a unique key per logical request and resend the request.\n\n**IDEMPOTENCY_KEY_INVALID**: The Idempotency-Key header value did not match the required shape (1-128 characters, letters / digits / underscore / dot / colon / hyphen).\n\n**IDEMPOTENCY_BODY_TOO_NESTED**: The request body exceeds the maximum nesting depth allowed by the idempotency fingerprint hasher. Deeply-nested arrays or objects are rejected as a malformed payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**TRANSACTION_NOT_FOUND**: No transaction exists with the specified ID, or the transaction belongs to a different organization.\n\n**SENDER_INFO_NOT_A_DEPOSIT**: Sender information can only be submitted for deposits. The transaction with the specified ID exists but is not a deposit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"TRANSACTION_NOT_FOUND","title":"Transaction Not Found","status":404,"detail":"No transaction exists with the specified ID, or the transaction belongs to a different organization.","resolution":"Verify the transaction ID is correct. Use the list transactions endpoint to find valid IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#transaction-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**IDEMPOTENCY_KEY_CONFLICT**: The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.\n\n**IDEMPOTENCY_KEY_REQUEST_IN_PROGRESS**: An earlier request with this idempotency key has not finished, or stopped before its result was recorded. In the second case it may or may not have completed its work.\n\n**SENDER_INFO_ALREADY_RECORDED**: Sender information has already been recorded for this deposit. The API accepts one submission per deposit; later submissions are rejected.\n\n**SENDER_INFO_SUBMISSION_IN_FLIGHT**: Another sender-information submission for this deposit is still being processed.\n\n**UNREGISTERED_ADDRESS_NOT_AWAITING**: The deposit is not currently awaiting sender information. Sender information can only be submitted while the deposit is processing and waiting for those details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"IDEMPOTENCY_KEY_CONFLICT","title":"Idempotency Key Conflict","status":409,"detail":"The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.","resolution":"Use a fresh idempotency key for the new request, or replay the original request unchanged.","docs":"https://v2.docs.conduit.financial/errors#idempotency-key-conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Submit sender (originator) information for a deposit parked on UNREGISTERED_ADDRESS","tags":["Transactions"]}},"/transactions":{"get":{"description":"Returns a paginated list of the caller's transactions. Filter by type, status, transaction id, customer, customer name, asset, chain, transaction hash, external payment reference, linked order, creation timestamp, or settlement timestamp (`completedAfter`/`completedBefore`). Sorted by `createdAt desc` by default; use `sortBy` and `sortOrder` to override, including `sortBy=completedAt` to order by settlement date.","operationId":"TransactionsController_list_v2","parameters":[{"name":"cursor","required":false,"in":"query","description":"Opaque cursor from a previous response. Send `meta.nextCursor` with `direction=forward` to read the next page, or `meta.previousCursor` with `direction=backward` to read the previous page.","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of results to return (1-100)","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"direction","required":false,"in":"query","description":"Which side of the cursor to read: `forward` returns the rows after it, `backward` the rows before it. Rows come back in list order either way. Without a cursor, `forward` starts at the first row and `backward` at the end of the list.","schema":{"enum":["forward","backward"],"type":"string"}},{"name":"type","required":false,"in":"query","schema":{"type":"array","items":{"type":"string","enum":["deposit","onramp","offramp","withdrawal","conversion","fiat_conversion","deposit_return"]}}},{"name":"status","required":false,"in":"query","schema":{"type":"array","items":{"type":"string","enum":["pending","processing","completed","failed","cancelled"]}}},{"name":"id","required":false,"in":"query","schema":{"type":"string"}},{"name":"customerId","required":false,"in":"query","schema":{"type":"string"}},{"name":"customerName","required":false,"in":"query","description":"Case-insensitive partial match on the customer's name: the business legal name, or the individual's full name or first and last name.","schema":{"type":"string"}},{"name":"linkedOrderId","required":false,"in":"query","schema":{"type":"string"}},{"name":"asset","required":false,"in":"query","schema":{"enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"type":"string"}},{"name":"chain","required":false,"in":"query","schema":{"enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"],"type":"string"}},{"name":"txHash","required":false,"in":"query","description":"The on-chain transaction hash or signature of any on-chain step of the transaction, such as the delivery of an onramp or the crypto side of an offramp or a crypto conversion. Case does not matter where the chain encodes it as hex; on a chain whose encoding is case-sensitive (for example Solana), it is matched exactly, since a different case is a different value.","schema":{"type":"string"}},{"name":"sourceAddress","required":false,"in":"query","schema":{"type":"string"}},{"name":"externalReference","required":false,"in":"query","description":"The provider-side reference on a fiat transaction: the sending bank's reference on a deposit, the payout provider's on a withdrawal. Both are matched, so pair it with `type=deposit` if you only want deposits. It is also the reference the sandbox fiat deposit simulator acknowledges with. Crypto deposits never match — resolve those with `txHash`. Not a Conduit id, and not your own `clientReferenceId`.","schema":{"type":"string"}},{"name":"clientReferenceId","required":false,"in":"query","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces.","schema":{"type":"string"}},{"name":"createdAfter","required":false,"in":"query","schema":{"type":"string"}},{"name":"createdBefore","required":false,"in":"query","schema":{"type":"string"}},{"name":"completedAfter","required":false,"in":"query","description":"Inclusive lower bound on `completedAt`, the settlement date — the date a transaction actually cleared, not when it was created. Unlike `createdAfter`/`createdBefore`, a transaction only matches once it has settled: a still-pending transaction has no `completedAt` and never matches this filter, on either bound. Paired with `completedBefore` the range is half-open `[completedAfter, completedBefore)`, so adjacent periods (e.g. consecutive statement months) never double-count a transaction that settles exactly on the boundary.","schema":{"type":"string"}},{"name":"completedBefore","required":false,"in":"query","description":"Exclusive upper bound on `completedAt` — see `completedAfter`.","schema":{"type":"string"}},{"name":"sortBy","required":false,"in":"query","description":"`completedAt` orders by settlement date and, like the `completedAfter`/`completedBefore` filters, excludes any transaction that hasn't settled yet — a still-pending row has no `completedAt` to sort by.","schema":{"enum":["createdAt","updatedAt","completedAt"],"type":"string"}},{"name":"sortOrder","required":false,"in":"query","schema":{"enum":["asc","desc"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicTransactionsPageDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**INVALID_CURSOR**: The pagination cursor provided in the request is malformed or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"List transactions","tags":["Transactions"]}},"/transactions/{id}":{"get":{"description":"Returns a single transaction owned by the caller's organization. Response shape matches one row of the list endpoint's `data[]`, discriminated by `type`.","operationId":"TransactionsController_getById_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"txn_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"200":{"description":"The requested transaction","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/PublicDepositViewDto"},{"$ref":"#/components/schemas/PublicDepositReturnViewDto"},{"$ref":"#/components/schemas/PublicWithdrawalViewDto"},{"$ref":"#/components/schemas/PublicOnrampViewDto"},{"$ref":"#/components/schemas/PublicOfframpViewDto"},{"$ref":"#/components/schemas/PublicCryptoConversionViewDto"},{"$ref":"#/components/schemas/PublicFiatConversionViewDto"}],"discriminator":{"propertyName":"type","mapping":{"deposit":"#/components/schemas/PublicDepositViewDto","deposit_return":"#/components/schemas/PublicDepositReturnViewDto","withdrawal":"#/components/schemas/PublicWithdrawalViewDto","onramp":"#/components/schemas/PublicOnrampViewDto","offramp":"#/components/schemas/PublicOfframpViewDto","conversion":"#/components/schemas/PublicCryptoConversionViewDto","fiat_conversion":"#/components/schemas/PublicFiatConversionViewDto"}}}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**TRANSACTION_NOT_FOUND**: No transaction exists with the specified ID, or the transaction belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"TRANSACTION_NOT_FOUND","title":"Transaction Not Found","status":404,"detail":"No transaction exists with the specified ID, or the transaction belongs to a different organization.","resolution":"Verify the transaction ID is correct. Use the list transactions endpoint to find valid IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#transaction-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Get a transaction by ID","tags":["Transactions"]}},"/payouts/requirements":{"get":{"description":"Returns the `fields[]` a payout body must carry for a given `(purpose, rail)`, and `recipientType` on a fiat rail when you know it — the top-level `virtualAccountId` to debit (fiat), the `destination.*` discriminators, and the recipient fields — plus whether a supporting document is required (and the accepted types), whether the recipient must be whitelisted/registered first (intercompany and personal_transfer_of_funds payouts), and the jurisdictions payouts are blocked to. Build a valid `POST /v2/payouts` body from this response. `documentation.required` is a baseline for the purpose alone. The answer a given customer gets can differ from it in either direction, because it also depends on that customer and on the payout itself, and the create request enforces that answer. For the customer-specific answer before you submit, send the candidate payout body to `POST /v2/payouts/requirements`. `documentation.due` does reflect your organization: `due: pre_acceptance` means a payout carrying no document is rejected with 422 DOCUMENTATION_REQUIRED, so collect the document before you submit; `due: post_acceptance` means the payout is accepted without one and a request for information asks you for the document: at once when the document is the only thing the payout waits on, otherwise when a Conduit analyst sends the request, and until then the read-back shows `stage: under_review` with `hasRfi: false`. When the request is sent, an `rfi.published` webhook fires, the read-back shows `stage: awaiting_customer_action` with `hasRfi: true` until you answer, and the due date counts from that moment. The payout stays held, with its amount still reserved, until your answer is reviewed, rejected only if the document you send is declined. An organization with no portal user reads `due: pre_acceptance`, since nobody can receive the request. (`due` and `whitelist` are purpose-invariant and match enforcement exactly.)","operationId":"PayoutsController_resolveRequirements_v2","parameters":[{"name":"purpose","required":true,"in":"query","description":"Declared business purpose of the payout. Drives the documentation and whitelist requirements. A chaps query cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them.","schema":{"enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"type":"string"}},{"name":"rail","required":true,"in":"query","description":"Payout rail. `crypto` for an on-chain withdrawal; `fedwire`/`rtp`/`fednow`/`ach`/`swift`/`sepa` for fiat. Input is case-insensitive.","schema":{"enum":["crypto","fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"],"type":"string"}},{"name":"recipientType","required":false,"in":"query","description":"Whether the fiat recipient is an individual or a business. Optional for a fiat rail: without it, the response covers both types, `destination.recipient.type` is required, and each field that only one type requires carries `requiredWhen` on it. Forbidden for `crypto`.","schema":{"enum":["individual","business"],"type":"string"}},{"name":"destinationCountry","required":false,"in":"query","description":"Beneficiary country ISO 3166-1 alpha-2 or alpha-3 code. The rail selects the fields. The country decides whether `destination.recipient.postalAddress.postalCode` is required: a country that uses postal codes gets `required: true`, and any other country, or no country, keeps `requiredWhen` on `postalAddress.country`. `chaps` requires it for every country. Forbidden for `crypto`.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayoutRequirementsResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Discover payout requirements","tags":["Payouts"]},"post":{"description":"Evaluates a candidate `POST /v2/payouts` body for this customer and returns the same response shape as `GET /v2/payouts/requirements`, with one documented difference: `rail` can be absent here. Unlike the `GET`, `documentation.required` is the answer this customer gets for this candidate, which can differ in either direction from the purpose baseline the `GET` reports. `fields`, `whitelist` and `blockedJurisdictions` are derived from the candidate body the same way the `GET` derives them from its query. Creates nothing and records no policy decision. An `idempotency-key` header is rejected with 400 VALIDATION_ERROR: every call re-evaluates the candidate against current policy and rate data, so a cached reply could hand you a requirement that no longer holds. A candidate whose destination is `type: virtual_account` or `type: wallet` is a book transfer between your own accounts. It is answered, not refused: `documentation` carries the real verdict for it, `rail` is absent because no payment rail names a book transfer, and `fields` is empty. `documentation.due` says when a required document is asked for, and `due: post_acceptance` means an `rfi.published` webhook asks for it after the payout is accepted. Where the candidate cannot be paid out as submitted for a reason that is not documentation (a blocked jurisdiction, an unwhitelisted recipient, a destination or prefunding rejection), `documentation.evaluated` reads `false` alongside `documentation.required`, so such a candidate is distinguishable from a clean accept, which reads `evaluated: true` with the same `required: false`. This response does not carry that reason: submit the same body to `POST /v2/payouts` to see it. `documentation.amountValuation` reads `amountValuation: valued` where the payout amount was valued in USD for this answer, `amountValuation: rate_unavailable` where no exchange rate could value it, and `amountValuation: not_attempted` where this answer did not need that value. `documentation.degraded` reads `true` where a data source this answer needed was unavailable, so `required` is cautious rather than exact. The two are independent: an answer that does not rest on the amount stays exact, so it reads `degraded: false` even where `amountValuation` reads `amountValuation: rate_unavailable`, and an answer that rests on another unavailable source reads `degraded: true` even where `amountValuation` reads `amountValuation: valued`. The `GET` always reads `evaluated: true`, `amountValuation: not_attempted` and `degraded: false`, because it answers the purpose baseline unconditionally and takes no amount. A `customerId` that names no customer in the calling organization is rejected with 404 CUSTOMER_NOT_FOUND, the same as `POST /v2/payouts`.","operationId":"PayoutsController_previewRequirements_v2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CryptoPayoutDto"},{"$ref":"#/components/schemas/FiatPayoutDto"}]}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayoutRequirementsPreviewResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**CUSTOMER_NOT_FOUND**: No customer exists with the specified ID, or the customer belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CUSTOMER_NOT_FOUND","title":"Customer Not Found","status":404,"detail":"No customer exists with the specified ID, or the customer belongs to a different organization.","resolution":"Verify the customer ID is correct. Use the list customers endpoint to find valid customer IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#customer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"503":{"description":"**POLICY_EVALUATION_UNAVAILABLE**: The documentation policy could not be evaluated because a policy lookup did not complete. No transaction was created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"POLICY_EVALUATION_UNAVAILABLE","title":"Policy Evaluation Unavailable","status":503,"detail":"The documentation policy could not be evaluated because a policy lookup did not complete. No transaction was created.","resolution":"Retry the request using exponential backoff. If the error persists, contact support.","docs":"https://v2.docs.conduit.financial/errors#policy-evaluation-unavailable","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Preview payout requirements","tags":["Payouts"]}},"/payouts":{"post":{"description":"Creates a payout. The body is a crypto payout, sent from a Conduit-managed wallet, or a fiat payout, sent from a virtual account. Requires the `idempotency-key` header. Returns 202 with the payout in its pending state, including its `id` and initial status.","operationId":"PayoutsController_create_v2","parameters":[{"name":"Idempotency-Key","in":"header","description":"Caller-generated unique key that lets the server safely replay this request. The original response is returned for 30 days on any retry with the same key from the same organization, with the response header `Idempotency-Replayed: true`. Required on every state-changing money-moving or resource-creating POST.","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,128}$","minLength":1,"maxLength":128,"example":"01J7B3K2X9M8N5P6Q7R8S9T0V1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CryptoPayoutDto"},{"$ref":"#/components/schemas/FiatPayoutDto"}]}}}},"responses":{"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicWithdrawalMutationViewDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.\n\n**IDEMPOTENCY_KEY_REQUIRED**: This endpoint requires an Idempotency-Key header to prevent duplicate processing. Generate a unique key per logical request and resend the request.\n\n**IDEMPOTENCY_KEY_INVALID**: The Idempotency-Key header value did not match the required shape (1-128 characters, letters / digits / underscore / dot / colon / hyphen).\n\n**IDEMPOTENCY_BODY_TOO_NESTED**: The request body exceeds the maximum nesting depth allowed by the idempotency fingerprint hasher. Deeply-nested arrays or objects are rejected as a malformed payload.\n\n**INVALID_ADDRESS_FORMAT**: The provided blockchain address does not match the expected format for the specified chain.\n\n**DOCUMENT_IDS_NOT_FOUND**: One or more document IDs provided in the request do not exist or do not belong to this customer.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**CUSTOMER_NOT_FOUND**: No customer exists with the specified ID, or the customer belongs to a different organization.\n\n**WALLET_NOT_FOUND**: No wallet exists with the specified ID, or the wallet belongs to a different organization.\n\n**VIRTUAL_ACCOUNT_NOT_FOUND**: No virtual account exists for the requested customer and asset, or the virtual account belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CUSTOMER_NOT_FOUND","title":"Customer Not Found","status":404,"detail":"No customer exists with the specified ID, or the customer belongs to a different organization.","resolution":"Verify the customer ID is correct. Use the list customers endpoint to find valid customer IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#customer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**IDEMPOTENCY_KEY_CONFLICT**: The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.\n\n**IDEMPOTENCY_KEY_REQUEST_IN_PROGRESS**: An earlier request with this idempotency key has not finished, or stopped before its result was recorded. In the second case it may or may not have completed its work.\n\n**DUPLICATE_CLIENT_REFERENCE_ID**: A resource with this client_reference_id already exists for your organization. A client_reference_id must be unique per resource type within your organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"IDEMPOTENCY_KEY_CONFLICT","title":"Idempotency Key Conflict","status":409,"detail":"The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.","resolution":"Use a fresh idempotency key for the new request, or replay the original request unchanged.","docs":"https://v2.docs.conduit.financial/errors#idempotency-key-conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"422":{"description":"**DESTINATION_NOT_ACTIVATED**: The destination account does not exist on the destination chain. On some chains an account must be activated on-chain before it can receive. The error detail names the chain.\n\n**DESTINATION_ASSET_NOT_ACCEPTED**: The destination account exists but cannot receive the requested asset now. The account has not opted in to the asset, the issuer froze the account's ability to hold it, or the account's holding limit leaves no room for this amount. The error detail and details.reason name the exact blocker.\n\n**AMOUNT_OUT_OF_RANGE**: The requested amount is below the minimum or above the maximum allowed, or the amount you send rounds to zero at its supported precision.\n\n**INSUFFICIENT_FUNDS**: The customer's available balance for the order's source resource is below the requested amount plus fee. Money in the `frozen` bucket does not count, including money held while a bank blocks one of the account's bank accounts.\n\n**WALLET_NOT_ACTIVE**: The wallet cannot be used at this time (e.g. a frozen wallet cannot initiate a payout).\n\n**CHAIN_NOT_SUPPORTED**: This environment does not serve that chain, or that asset on that chain, so it cannot carry out this request. Other chains and assets this environment serves are unaffected, and the same request on one of them is accepted.\n\n**LEGACY_MOCK_WALLET_UNSUPPORTED**: A wallet the order funds from, or that its crypto autoPayout would send from, was created with legacy mock custody and can no longer transact now that sandbox crypto is real testnet. The same code refuses a new wallet for a customer whose wallet account is on legacy mock custody, because that account cannot hold a real testnet wallet. A mock wallet holds no real signing key, so it cannot sign a payout, and any real testnet funds sent to its address stay stranded there because nothing can sign to move them out.\n\n**INVALID_TRANSFER_PAIR**: These two wallets cannot transfer to each other. The destination must be a different active wallet of the same customer, on the same chain.\n\n**DOCUMENTATION_REQUIRED**: This payout purpose requires a supporting document and none was attached.\n\n**RECIPIENT_NOT_WHITELISTED**: purpose=intercompany or purpose=personal_transfer_of_funds requires whitelist proof for the destination: a registered intercompany whitelist entry, or a registered self-custody wallet address.\n\n**TRANSACTION_BLOCKED**: The transaction is blocked by policy. This decision is terminal.\n\n**PAYOUT_QUEUE_FULL**: This wallet and chain already has the maximum number of payouts waiting to collect signatures. Only one payout collects signatures at a time per wallet and chain; the rest wait in line.\n\n**PAYOUT_SELF_DESTINATION**: The payout's destination is the same virtual account it is sent from — either the recipient bank coordinates resolve to it, or it was named directly by id. Paying an account from itself moves no money.\n\n**PAYOUT_DESTINATION_RESTRICTED**: The recipient bank coordinates resolve to a Conduit-issued account that is currently restricted from receiving funds.\n\n**PAYOUT_DESTINATION_CURRENCY_MISMATCH**: The destination virtual account holds a different currency from the payout. A payout moves one currency and never converts between two.\n\n**PAYOUT_RAIL_CURRENCY_MISMATCH**: The requested payment rail settles a different currency from the one the payout moves. A payout moves one currency and never converts, so this rail can never deliver it.\n\n**PREFUNDING_SOURCE_NOT_HOUSE_ACCOUNT**: A prefunding transaction must originate from a Conduit house account. The source account for this request is not marked as a house account.\n\n**PREFUNDING_DESTINATION_NOT_FOUND**: The destination account specified for this prefunding transaction could not be found.\n\n**PREFUNDING_AMBIGUOUS_MATCH**: More than one account matches the details given for this prefunding transaction, so Conduit cannot determine a single destination.\n\n**PREFUNDING_UNSUPPORTED_RAIL**: Prefunding is not supported over the rail requested for this transaction.\n\n**RECIPIENT_DETAILS_OUTDATED**: The recipient's bank reported that these bank details are out of date, and Conduit cannot correct them for you. The payout was not created and no money moved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"DESTINATION_NOT_ACTIVATED","title":"Destination Not Activated","status":422,"detail":"The destination account does not exist on the destination chain. On some chains an account must be activated on-chain before it can receive. The error detail names the chain.","resolution":"Ask the recipient to activate the destination account on-chain, then retry.","docs":"https://v2.docs.conduit.financial/errors#destination-not-activated","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"503":{"description":"**ASSET_CHAIN_PAUSED**: Conduit has temporarily paused this asset on this chain, or the whole chain, so it cannot accept this request now. Asset and chain pairs that are not paused stay available.\n\n**POLICY_EVALUATION_UNAVAILABLE**: The documentation policy could not be evaluated because a policy lookup did not complete. No transaction was created.\n\n**RAIL_UNAVAILABLE**: No viable payment rail was available for the requested corridor. No funds were moved.\n\n**RECIPIENT_BANK_LOOKUP_UNAVAILABLE**: We could not look up the bank for this routing number right now, and the request sent no bankAddress. This says nothing about the routing number itself. No funds were moved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ASSET_CHAIN_PAUSED","title":"Asset Chain Paused","status":503,"detail":"Conduit has temporarily paused this asset on this chain, or the whole chain, so it cannot accept this request now. Asset and chain pairs that are not paused stay available.","resolution":"Retry the same request later; it succeeds once Conduit lifts the pause. Use an asset and chain pair that is not paused if you cannot wait.","docs":"https://v2.docs.conduit.financial/errors#asset-chain-paused","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Create a payout","tags":["Payouts"]}},"/payouts/{id}":{"get":{"description":"Returns the current state of a payout by id, scoped to the caller's organization. 404 if no payout with that id exists for the org.","operationId":"PayoutsController_getById_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"txn_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicWithdrawalViewDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**PAYOUT_NOT_FOUND**: No payout exists with the specified ID, or the payout belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"PAYOUT_NOT_FOUND","title":"Payout Not Found","status":404,"detail":"No payout exists with the specified ID, or the payout belongs to a different organization.","resolution":"Verify the payout ID is correct. Use the list payouts endpoint to find valid payout IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#payout-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Retrieve a payout","tags":["Payouts"]}},"/payouts/{id}/cancel":{"post":{"description":"Cancels a pending payout, releasing the customer's reserved balance back to available. Idempotent: an already-cancelled payout returns 200. A cancel is accepted until the payout is dispatched for settlement (submitted to the bank, or its on-chain send started) or committed to a wire batch. From that point, and at any terminal state other than cancelled, the cancel returns 409 (`PAYOUT_NOT_CANCELLABLE`) at once. A payout cancelled within moments of creation may briefly return 409 (`PAYOUT_CANCEL_IN_PROGRESS`) while it initializes — retry shortly. Requires the `idempotency-key` header.","operationId":"PayoutsController_cancel_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"txn_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"Idempotency-Key","in":"header","description":"Caller-generated unique key that lets the server safely replay this request. The original response is returned for 30 days on any retry with the same key from the same organization, with the response header `Idempotency-Replayed: true`. Required on every state-changing money-moving or resource-creating POST.","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,128}$","minLength":1,"maxLength":128,"example":"01J7B3K2X9M8N5P6Q7R8S9T0V1"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicWithdrawalMutationViewDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.\n\n**IDEMPOTENCY_KEY_REQUIRED**: This endpoint requires an Idempotency-Key header to prevent duplicate processing. Generate a unique key per logical request and resend the request.\n\n**IDEMPOTENCY_KEY_INVALID**: The Idempotency-Key header value did not match the required shape (1-128 characters, letters / digits / underscore / dot / colon / hyphen).\n\n**IDEMPOTENCY_BODY_TOO_NESTED**: The request body exceeds the maximum nesting depth allowed by the idempotency fingerprint hasher. Deeply-nested arrays or objects are rejected as a malformed payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**PAYOUT_NOT_FOUND**: No payout exists with the specified ID, or the payout belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"PAYOUT_NOT_FOUND","title":"Payout Not Found","status":404,"detail":"No payout exists with the specified ID, or the payout belongs to a different organization.","resolution":"Verify the payout ID is correct. Use the list payouts endpoint to find valid payout IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#payout-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**IDEMPOTENCY_KEY_CONFLICT**: The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.\n\n**IDEMPOTENCY_KEY_REQUEST_IN_PROGRESS**: An earlier request with this idempotency key has not finished, or stopped before its result was recorded. In the second case it may or may not have completed its work.\n\n**PAYOUT_NOT_CANCELLABLE**: The payout cannot be cancelled. Either it is already in a terminal state (completed, failed, or cancelled; re-cancelling a `cancelled` payout returns 200 idempotently, every other terminal returns 409), or it has been dispatched for settlement (submitted to the bank, or its on-chain send started), or it is a fiat payout already enrolled in a wire batch. A payout released from a cancelled wire batch can become cancellable again briefly. Read the payout: it is cancellable only while `cancellable` is `true`, and a released payout usually reaches a terminal `failed` status shortly afterwards.\n\n**PAYOUT_CANCEL_IN_PROGRESS**: The payout was just created and is not yet ready to accept the cancellation. The payout is still cancellable — this is a transient startup delay, not a terminal state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"IDEMPOTENCY_KEY_CONFLICT","title":"Idempotency Key Conflict","status":409,"detail":"The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.","resolution":"Use a fresh idempotency key for the new request, or replay the original request unchanged.","docs":"https://v2.docs.conduit.financial/errors#idempotency-key-conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Cancel a pending payout","tags":["Payouts"]}},"/rfis":{"get":{"description":"Returns a paginated list of the caller's RFIs. Draft RFIs are never visible on this surface. Filter by status, subjectType, subjectId, or customerId.","operationId":"RfiApiController_list_v2","parameters":[{"name":"cursor","required":false,"in":"query","description":"Opaque cursor from a previous response. Send `meta.nextCursor` with `direction=forward` to read the next page, or `meta.previousCursor` with `direction=backward` to read the previous page.","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of results to return (1-100)","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"direction","required":false,"in":"query","description":"Which side of the cursor to read: `forward` returns the rows after it, `backward` the rows before it. Rows come back in list order either way. Without a cursor, `forward` starts at the first row and `backward` at the end of the list.","schema":{"enum":["forward","backward"],"type":"string"}},{"name":"status","required":false,"in":"query","description":"Filter by status, repeatable. `draft` is not accepted on this surface.","schema":{"type":"array","items":{"type":"string","enum":["open","responded","resolved","cancelled"]}}},{"name":"subjectType","required":false,"in":"query","schema":{"enum":["customer","transaction","organization","application"],"type":"string"}},{"name":"subjectId","required":false,"in":"query","schema":{"type":"string"}},{"name":"customerId","required":false,"in":"query","description":"Only the RFIs about this customer: its customer, application and transaction RFIs.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientRfiPaginatedResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"List RFIs","tags":["RFIs"]}},"/rfis/{id}":{"get":{"description":"Returns a single RFI owned by the caller's organization. A foreign organization's id, or a draft RFI, both 404.","operationId":"RfiApiController_getById_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"rfi_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientRfiDetailDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**RFI_NOT_FOUND**: No request-for-information exists with the specified ID, the RFI belongs to a different organization, or (on a client-facing surface) the RFI is still a draft and has never been published.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"RFI_NOT_FOUND","title":"RFI Not Found","status":404,"detail":"No request-for-information exists with the specified ID, the RFI belongs to a different organization, or (on a client-facing surface) the RFI is still a draft and has never been published.","resolution":"Verify the RFI ID is correct. Draft RFIs are never visible on client-facing surfaces — wait until the RFI is published.","docs":"https://v2.docs.conduit.financial/errors#rfi-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Get an RFI by ID","tags":["RFIs"]}},"/rfis/{id}/acknowledge":{"post":{"description":"Stamps the RFI as viewed. Idempotent: a later call is a silent no-op.","operationId":"RfiApiController_acknowledge_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"rfi_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"204":{"description":"RFI acknowledged"},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**RFI_NOT_FOUND**: No request-for-information exists with the specified ID, the RFI belongs to a different organization, or (on a client-facing surface) the RFI is still a draft and has never been published.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"RFI_NOT_FOUND","title":"RFI Not Found","status":404,"detail":"No request-for-information exists with the specified ID, the RFI belongs to a different organization, or (on a client-facing surface) the RFI is still a draft and has never been published.","resolution":"Verify the RFI ID is correct. Draft RFIs are never visible on client-facing surfaces — wait until the RFI is published.","docs":"https://v2.docs.conduit.financial/errors#rfi-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Acknowledge an RFI","tags":["RFIs"]}},"/rfis/{id}/responses":{"post":{"description":"Submits a response to the RFI's current round. While the RFI is `responded`, a further response adds information to the same round. `submittedBy.email` is required on this surface (an API key has no user identity). Replaying the same `Idempotency-Key` returns the original response regardless of payload; a resolved or cancelled RFI 409s. A document that already belongs to another customer of your organization is refused with 400 `VALIDATION_ERROR`, and the whole response is refused: it is not recorded and nothing is attached. Send it again without that document, and upload the file again for this customer.","operationId":"RfiApiController_respond_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"rfi_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"Idempotency-Key","in":"header","description":"Caller-generated unique key that lets the server safely replay this request. The original response is returned for 30 days on any retry with the same key from the same organization, with the response header `Idempotency-Replayed: true`. Required on every state-changing money-moving or resource-creating POST.","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,128}$","minLength":1,"maxLength":128,"example":"01J7B3K2X9M8N5P6Q7R8S9T0V1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicRespondRfiBodyDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientRfiDetailDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.\n\n**IDEMPOTENCY_KEY_REQUIRED**: This endpoint requires an Idempotency-Key header to prevent duplicate processing. Generate a unique key per logical request and resend the request.\n\n**IDEMPOTENCY_KEY_INVALID**: The Idempotency-Key header value did not match the required shape (1-128 characters, letters / digits / underscore / dot / colon / hyphen).\n\n**IDEMPOTENCY_BODY_TOO_NESTED**: The request body exceeds the maximum nesting depth allowed by the idempotency fingerprint hasher. Deeply-nested arrays or objects are rejected as a malformed payload.\n\n**DOCUMENT_IDS_NOT_FOUND**: One or more document IDs provided in the request do not exist or do not belong to this customer.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**RFI_NOT_FOUND**: No request-for-information exists with the specified ID, the RFI belongs to a different organization, or (on a client-facing surface) the RFI is still a draft and has never been published.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"RFI_NOT_FOUND","title":"RFI Not Found","status":404,"detail":"No request-for-information exists with the specified ID, the RFI belongs to a different organization, or (on a client-facing surface) the RFI is still a draft and has never been published.","resolution":"Verify the RFI ID is correct. Draft RFIs are never visible on client-facing surfaces — wait until the RFI is published.","docs":"https://v2.docs.conduit.financial/errors#rfi-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**IDEMPOTENCY_KEY_CONFLICT**: The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.\n\n**IDEMPOTENCY_KEY_REQUEST_IN_PROGRESS**: An earlier request with this idempotency key has not finished, or stopped before its result was recorded. In the second case it may or may not have completed its work.\n\n**RFI_NOT_OPEN_FOR_RESPONSE**: A client can respond while the RFI is open, and can add information while it is responded. This RFI no longer accepts a response because it has been resolved or cancelled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"IDEMPOTENCY_KEY_CONFLICT","title":"Idempotency Key Conflict","status":409,"detail":"The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.","resolution":"Use a fresh idempotency key for the new request, or replay the original request unchanged.","docs":"https://v2.docs.conduit.financial/errors#idempotency-key-conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Respond to an RFI","tags":["RFIs"]}},"/documents":{"get":{"description":"Lists documents uploaded by the authenticated organization.","operationId":"DocumentsController_findAll_v2","parameters":[{"name":"cursor","required":false,"in":"query","description":"Opaque cursor from a previous response. Send `meta.nextCursor` with `direction=forward` to read the next page, or `meta.previousCursor` with `direction=backward` to read the previous page.","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of results to return (1-100)","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"direction","required":false,"in":"query","description":"Which side of the cursor to read: `forward` returns the rows after it, `backward` the rows before it. Rows come back in list order either way. Without a cursor, `forward` starts at the first row and `backward` at the end of the list.","schema":{"enum":["forward","backward"],"type":"string"}},{"name":"purpose","required":false,"in":"query","description":"Filter documents by their declared purpose.","schema":{"enum":["organization_onboarding","kyc","feature_request","transaction_support","rfi_response"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentPaginatedResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**INVALID_CURSOR**: The pagination cursor provided in the request is malformed or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"List documents","tags":["Documents"]},"post":{"description":"Uploads a file and creates a document record. `purpose` records what you will use the document for, and only your request sets it: send `purpose=transaction_support` to attach the document to a payout or an order, or the payout or order refuses the document id. Conduit identifies what the file contains, and its own determination is what applies; `classificationStatus` does not control attachment. Sending `type` is optional and records which requirement slot you uploaded the file against, so the file is shown against that slot. Optional multipart fields: `purpose`, `name` (human-readable label), `type` and `eddEvidenceKind`. Send `type=EDD_EVIDENCE` with an `eddEvidenceKind` when the requirements response asks for it. Maximum file size is 10 MiB (10,485,760 bytes); the request may contain at most 16 multipart fields in total. File type is determined by inspecting the file's contents — the `Content-Type` header and filename extension are advisory only.","operationId":"DocumentsController_create_v2","parameters":[],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary","description":"Document file. Allowed types (validated by inspecting the file's magic bytes, not the filename or Content-Type header): application/pdf, image/jpeg, image/png. Maximum size: 10 MiB (10,485,760 bytes)."},"purpose":{"type":"string","enum":["organization_onboarding","kyc","feature_request","transaction_support","rfi_response"],"description":"What the document is for. A payout or order accepts only `transaction_support` in `documents`; an RFI reply accepts only `rfi_response` in `documentIds`."},"name":{"type":"string","description":"Human-readable label for the document."},"type":{"type":"string","enum":["BUSINESS_REGISTRATION","ARTICLES_OF_INCORPORATION","TAX_CERTIFICATE","OPERATING_LICENSE","REGULATORY_LICENSE","SHAREHOLDERS_REGISTRY","DIRECTORS_REGISTRY","AUTHORIZATION_TO_ACT","PROOF_OF_ADDRESS","CERTIFICATE_OF_GOOD_STANDING","FLOW_OF_FUNDS","AUDITED_FINANCIAL_STATEMENT","BANK_STATEMENT","ORG_STRUCTURE_CHART","AML_AUDIT","COMPLIANCE_POLICY","INSTITUTIONAL_INVESTOR_DOCUMENTATION","IRS_W8BEN_E","IRS_W8BEN","IRS_W9","IDENTITY_VERIFICATION","IDENTITY_VERIFICATION_ATTESTATION","EDD_EVIDENCE","BANK_VERIFICATION_LETTER","INVOICE","CONTRACT","PAYROLL_REGISTER","INVESTMENT_AGREEMENT","OTHER","business_registration","articles_of_incorporation","tax_certificate","operating_license","regulatory_license","shareholders_registry","directors_registry","authorization_to_act","proof_of_address","certificate_of_good_standing","flow_of_funds","audited_financial_statement","bank_statement","org_structure_chart","aml_audit","compliance_policy","institutional_investor_documentation","irs_w8ben_e","irs_w8ben","irs_w9","identity_verification","identity_verification_attestation","edd_evidence","bank_verification_letter","invoice","contract","payroll_register","investment_agreement","other"],"description":"The requirement slot you uploaded this file against, from `documents[].canonicalType` in the requirements response, or a payout's `acceptedDocumentTypes`, including `other`. Upper or lower case: `invoice` and `INVOICE` both record `INVOICE`. Sending it shows the file against that slot; Conduit still identifies the document itself, and that determination is what applies."},"eddEvidenceKind":{"type":"string","enum":["payslip_or_employment_letter","tax_return","sale_of_asset_or_inheritance","bank_statement"],"description":"Which kind of evidence the file is. Required when `type` is `EDD_EVIDENCE`, and refused with any other `type`."}}}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentCreateResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.\n\n**UNSUPPORTED_FILE_TYPE**: The uploaded file's content does not match an allowed type. File type is determined by inspecting the file's contents (magic bytes), not the filename extension or the Content-Type header. Allowed types: PDF, JPEG, PNG.\n\n**INVALID_FILE_NAME**: The uploaded file's name contains characters that are not allowed (path separators, control characters, NUL bytes, or path traversal sequences).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"413":{"description":"**FILE_TOO_LARGE**: The uploaded file exceeds the maximum allowed size (10 MiB, 10,485,760 bytes). The response carries an extra 'field' member naming the form-field that exceeded the limit (typically 'file').","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"FILE_TOO_LARGE","title":"File Too Large","status":413,"detail":"The uploaded file exceeds the maximum allowed size (10 MiB, 10,485,760 bytes). The response carries an extra 'field' member naming the form-field that exceeded the limit (typically 'file').","resolution":"Reduce the file size and re-upload. Multi-page PDFs that exceed the limit should be split into smaller files. High-resolution images may be downscaled or re-encoded with stronger compression.","docs":"https://v2.docs.conduit.financial/errors#file-too-large","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Upload a document","tags":["Documents"]}},"/documents/{id}":{"get":{"description":"Retrieves metadata for a previously uploaded document. Does not return the file contents; use the download URL for that.","operationId":"DocumentsController_findById_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"doc_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**DOCUMENT_NOT_FOUND**: No document exists with the specified ID, or the document belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"DOCUMENT_NOT_FOUND","title":"Document Not Found","status":404,"detail":"No document exists with the specified ID, or the document belongs to a different organization.","resolution":"Verify the document ID is correct. Use `GET /v2/documents` to find valid document IDs.","docs":"https://v2.docs.conduit.financial/errors#document-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Get a document by ID","tags":["Documents"]}},"/documents/{id}/download":{"get":{"description":"Returns a short-lived signed URL for downloading a document owned by the authenticated organization.","operationId":"DocumentsController_download_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"doc_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentDownloadResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**DOCUMENT_NOT_FOUND**: No document exists with the specified ID, or the document belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"DOCUMENT_NOT_FOUND","title":"Document Not Found","status":404,"detail":"No document exists with the specified ID, or the document belongs to a different organization.","resolution":"Verify the document ID is correct. Use `GET /v2/documents` to find valid document IDs.","docs":"https://v2.docs.conduit.financial/errors#document-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Get a download URL for a document","tags":["Documents"]}},"/payee-checks":{"post":{"description":"Asks the payee's bank whether the recipient name matches the account, before you create the payout. Send the same `destination` you will send on `POST /v2/payouts`. A UK domestic recipient is checked through Confirmation of Payee; any other recipient answers `unavailable`. The check moves no money and is optional; Conduit runs the same check itself on every UK payout. The answer carries the result only. A repeated call asks the bank again; this route takes no idempotency-key.","operationId":"PayeeChecksController_check_v2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayeeCheckRequestDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayeeCheckResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Check a payee name","tags":["Payee checks"]}},"/customers/{customerId}/whitelist-recipients":{"post":{"description":"Registers an intercompany counterparty for this customer: a bank recipient on a rail Conduit supports for the organization, or a group entity's on-chain wallet on the crypto rail. The crypto rail takes relationship group_entity only — register the customer's own wallet as a self_custody entry under wallets/registered-addresses instead. The entry starts in pending_review; compliance review outcomes are signalled via whitelist_recipient.* webhooks. Only registered entries satisfy payouts with purpose=intercompany. A payout with purpose=personal_transfer_of_funds is satisfied only by a registered entry whose relationship is self. A rail that needs an open payout route refuses an entry with 503 RAIL_UNAVAILABLE until that route is open in this environment. Identical resubmissions return the existing entry. Resubmitting the same recipient details with different attributes (name, relationship, documents) returns 409 WHITELIST_RECIPIENT_CONFLICT.","operationId":"WhitelistRecipientsController_create_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"Idempotency-Key","in":"header","description":"Caller-generated unique key that lets the server safely replay this request. The original response is returned for 30 days on any retry with the same key from the same organization, with the response header `Idempotency-Replayed: true`. Required on every state-changing money-moving or resource-creating POST.","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,128}$","minLength":1,"maxLength":128,"example":"01J7B3K2X9M8N5P6Q7R8S9T0V1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/UsWhitelistRecipientDto"},{"$ref":"#/components/schemas/SwiftWhitelistRecipientDto"},{"$ref":"#/components/schemas/SepaWhitelistRecipientDto"},{"$ref":"#/components/schemas/UkDomesticWhitelistRecipientDto"},{"$ref":"#/components/schemas/PixWhitelistRecipientDto"},{"$ref":"#/components/schemas/BrazilDomesticWhitelistRecipientDto"},{"$ref":"#/components/schemas/MxDomesticWhitelistRecipientDto"},{"$ref":"#/components/schemas/CryptoWhitelistRecipientDto"}],"discriminator":{"propertyName":"rail"}}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhitelistRecipientResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.\n\n**IDEMPOTENCY_KEY_REQUIRED**: This endpoint requires an Idempotency-Key header to prevent duplicate processing. Generate a unique key per logical request and resend the request.\n\n**IDEMPOTENCY_KEY_INVALID**: The Idempotency-Key header value did not match the required shape (1-128 characters, letters / digits / underscore / dot / colon / hyphen).\n\n**IDEMPOTENCY_BODY_TOO_NESTED**: The request body exceeds the maximum nesting depth allowed by the idempotency fingerprint hasher. Deeply-nested arrays or objects are rejected as a malformed payload.\n\n**DOCUMENT_IDS_NOT_FOUND**: One or more document IDs provided in the request do not exist or do not belong to this customer.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.\n\n**CAPABILITY_SUSPENDED**: This account is currently restricted from this action: a money movement, or opening a new account, wallet, customer or payout destination.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**CUSTOMER_NOT_FOUND**: No customer exists with the specified ID, or the customer belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CUSTOMER_NOT_FOUND","title":"Customer Not Found","status":404,"detail":"No customer exists with the specified ID, or the customer belongs to a different organization.","resolution":"Verify the customer ID is correct. Use the list customers endpoint to find valid customer IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#customer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**IDEMPOTENCY_KEY_CONFLICT**: The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.\n\n**IDEMPOTENCY_KEY_REQUEST_IN_PROGRESS**: An earlier request with this idempotency key has not finished, or stopped before its result was recorded. In the second case it may or may not have completed its work.\n\n**WHITELIST_RECIPIENT_CONFLICT**: An active whitelist entry already exists for these bank details with different attributes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"IDEMPOTENCY_KEY_CONFLICT","title":"Idempotency Key Conflict","status":409,"detail":"The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.","resolution":"Use a fresh idempotency key for the new request, or replay the original request unchanged.","docs":"https://v2.docs.conduit.financial/errors#idempotency-key-conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"503":{"description":"**RAIL_UNAVAILABLE**: No viable payment rail was available for the requested corridor. No funds were moved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"RAIL_UNAVAILABLE","title":"Payment rail unavailable","status":503,"detail":"No viable payment rail was available for the requested corridor. No funds were moved.","resolution":"Retry later. If the corridor is persistently unavailable, contact support.","docs":"https://v2.docs.conduit.financial/errors#rail-unavailable","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Register an intercompany recipient for whitelisting","tags":["Whitelist Recipients"]},"get":{"description":"Returns the intercompany whitelist recipients for a customer, scoped to the authenticated organization.","operationId":"WhitelistRecipientsController_list_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"cursor","required":false,"in":"query","description":"Opaque cursor from a previous response. Send `meta.nextCursor` with `direction=forward` to read the next page, or `meta.previousCursor` with `direction=backward` to read the previous page.","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of results to return (1-100)","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"direction","required":false,"in":"query","description":"Which side of the cursor to read: `forward` returns the rows after it, `backward` the rows before it. Rows come back in list order either way. Without a cursor, `forward` starts at the first row and `backward` at the end of the list.","schema":{"enum":["forward","backward"],"type":"string"}},{"name":"status","required":false,"in":"query","description":"Filter by review status.","schema":{"enum":["pending_review","registered","suspended","revoked","rejected"],"type":"string"}},{"name":"sortOrder","required":false,"in":"query","schema":{"enum":["asc","desc"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhitelistRecipientListResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**INVALID_CURSOR**: The pagination cursor provided in the request is malformed or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**CUSTOMER_NOT_FOUND**: No customer exists with the specified ID, or the customer belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CUSTOMER_NOT_FOUND","title":"Customer Not Found","status":404,"detail":"No customer exists with the specified ID, or the customer belongs to a different organization.","resolution":"Verify the customer ID is correct. Use the list customers endpoint to find valid customer IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#customer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"List whitelist recipients for a customer","tags":["Whitelist Recipients"]}},"/customers/{customerId}/whitelist-recipients/{id}":{"get":{"description":"Returns an intercompany whitelist recipient scoped to the authenticated organization and customer.","operationId":"WhitelistRecipientsController_getOne_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"wlr_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhitelistRecipientResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**WHITELIST_RECIPIENT_NOT_FOUND**: No whitelist recipient with this id exists for your organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"WHITELIST_RECIPIENT_NOT_FOUND","title":"Whitelist Recipient Not Found","status":404,"detail":"No whitelist recipient with this id exists for your organization.","resolution":"Check the id; list entries via GET /v2/customers/{customerId}/whitelist-recipients.","docs":"https://v2.docs.conduit.financial/errors#whitelist-recipient-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Get a whitelist recipient by id","tags":["Whitelist Recipients"]},"delete":{"description":"Client-initiated, terminal. Audit history is retained.","operationId":"WhitelistRecipientsController_delete_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"wlr_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"204":{"description":""},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**WHITELIST_RECIPIENT_NOT_FOUND**: No whitelist recipient with this id exists for your organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"WHITELIST_RECIPIENT_NOT_FOUND","title":"Whitelist Recipient Not Found","status":404,"detail":"No whitelist recipient with this id exists for your organization.","resolution":"Check the id; list entries via GET /v2/customers/{customerId}/whitelist-recipients.","docs":"https://v2.docs.conduit.financial/errors#whitelist-recipient-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**WHITELIST_INVALID_TRANSITION**: The whitelist entry is not in a status that allows this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"WHITELIST_INVALID_TRANSITION","title":"Invalid Whitelist Transition","status":409,"detail":"The whitelist entry is not in a status that allows this action.","resolution":"Fetch the entry to inspect its current status.","docs":"https://v2.docs.conduit.financial/errors#whitelist-invalid-transition","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Revoke a whitelist recipient","tags":["Whitelist Recipients"]}},"/orders":{"get":{"description":"Returns orders created by the authenticated organization with cursor pagination and optional filters.","operationId":"OrdersController_list_v2","parameters":[{"name":"cursor","required":false,"in":"query","description":"Opaque cursor from a previous response. Send `meta.nextCursor` with `direction=forward` to read the next page, or `meta.previousCursor` with `direction=backward` to read the previous page.","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of results to return (1-100)","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"direction","required":false,"in":"query","description":"Which side of the cursor to read: `forward` returns the rows after it, `backward` the rows before it. Rows come back in list order either way. Without a cursor, `forward` starts at the first row and `backward` at the end of the list.","schema":{"enum":["forward","backward"],"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"array","items":{"type":"string","enum":["pending","succeeded","failed","cancelled"]}}},{"name":"pairId","required":false,"in":"query","schema":{"type":"string"}},{"name":"type","required":false,"in":"query","schema":{"type":"array","items":{"type":"string","enum":["onramp","offramp","conversion","fiat_conversion"]}}},{"name":"destinationCountry","required":false,"in":"query","schema":{"type":"string"}},{"name":"paymentRail","required":false,"in":"query","schema":{"enum":["rtp","fedwire","ach","ach_same_day","swift","fednow","sepa","faster_payments","chaps","pix","ted","nibss","spei"],"type":"string"}},{"name":"createdFrom","required":false,"in":"query","schema":{"type":"string"}},{"name":"createdTo","required":false,"in":"query","schema":{"type":"string"}},{"name":"clientReferenceId","required":false,"in":"query","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderExternalListResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**INVALID_CURSOR**: The pagination cursor provided in the request is malformed or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"List orders for the authenticated organization","tags":["Orders"]},"post":{"description":"Creates an order for a supported source and destination currency pair, including pricing and recipient validation. Returns 202 with the order in its pending state. Creation never checks or reserves the source's available balance — an order can always be created before its source is funded, regardless of `autoExecute`. One refusal is the exception. Once your sandbox has real testnet custody, an order funded from a wallet created under the old mock custody, or whose crypto autoPayout would send from one, is refused with 422 LEGACY_MOCK_WALLET_UNSUPPORTED — recreate the wallet under a new sandbox customer. See `autoExecute` and `lockExpiresAt` on the response for how and when execution can start.","operationId":"OrdersController_create_v2","parameters":[{"name":"Idempotency-Key","in":"header","description":"Caller-generated unique key that lets the server safely replay this request. The original response is returned for 30 days on any retry with the same key from the same organization, with the response header `Idempotency-Replayed: true`. Required on every state-changing money-moving or resource-creating POST.","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,128}$","minLength":1,"maxLength":128,"example":"01J7B3K2X9M8N5P6Q7R8S9T0V1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ExplicitSourceOrderDto"},{"$ref":"#/components/schemas/DepositFundedOrderDto"},{"$ref":"#/components/schemas/QuoteRedemptionOrderDto"}]}}}},"responses":{"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderExternalResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.\n\n**IDEMPOTENCY_KEY_REQUIRED**: This endpoint requires an Idempotency-Key header to prevent duplicate processing. Generate a unique key per logical request and resend the request.\n\n**IDEMPOTENCY_KEY_INVALID**: The Idempotency-Key header value did not match the required shape (1-128 characters, letters / digits / underscore / dot / colon / hyphen).\n\n**IDEMPOTENCY_BODY_TOO_NESTED**: The request body exceeds the maximum nesting depth allowed by the idempotency fingerprint hasher. Deeply-nested arrays or objects are rejected as a malformed payload.\n\n**UNSUPPORTED_ASSET**: The requested asset and chain combination is not supported for this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.\n\n**CLIENT_MARKUP_NOT_ENABLED**: This request declares your own margin, but client markup is not enabled for your organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**QUOTE_NOT_FOUND**: No quote option exists with the specified ID, or it belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"QUOTE_NOT_FOUND","title":"Quote Not Found","status":404,"detail":"No quote option exists with the specified ID, or it belongs to a different organization.","resolution":"Verify the quoteOptionId is correct and was returned by a POST /v2/quotes call from this organization.","docs":"https://v2.docs.conduit.financial/errors#quote-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**IDEMPOTENCY_KEY_CONFLICT**: The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.\n\n**IDEMPOTENCY_KEY_REQUEST_IN_PROGRESS**: An earlier request with this idempotency key has not finished, or stopped before its result was recorded. In the second case it may or may not have completed its work.\n\n**CONFLICT**: The request conflicts with the current state of the resource. This usually means a duplicate or a state transition that is not allowed.\n\n**DEPOSIT_ADDRESS_UNAVAILABLE**: A funding address for this customer is still being provisioned, so the order could not be given one. Nothing was created and no funds were moved.\n\n**QUOTE_EXPIRED**: The quote option's expiry has passed and it can no longer be redeemed.\n\n**QUOTE_ALREADY_USED**: The quote option has already been consumed by another order and is single-use.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"IDEMPOTENCY_KEY_CONFLICT","title":"Idempotency Key Conflict","status":409,"detail":"The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.","resolution":"Use a fresh idempotency key for the new request, or replay the original request unchanged.","docs":"https://v2.docs.conduit.financial/errors#idempotency-key-conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"422":{"description":"**UNSUPPORTED_PAIR**: The requested source and destination asset pair is not supported. `details` carries `sourceChain` and `destinationChain` alongside `sourceAsset` and `destinationAsset` — `null` for a fiat asset, which carries no chain — so you can tell a chain-specific refusal from an asset-wide one. A conversion to or from OUSD also returns this code, with `details.reason` set to `ousd_conversion_not_enabled`: you can receive, hold, send and bridge OUSD, but not convert it.\n\n**INVALID_ORDER_COMBO**: The requested order combination is not supported: same-asset same-chain moves, mismatched source and destination resources, no bank of the destination virtual account that can take a book credit in that asset, or an autoPayout shape that does not match the order direction. OFFRAMP orders require a fiat autoPayout (`{ rail, purpose, documents?, recipient }`); ONRAMP orders require a crypto autoPayout (`{ purpose, documents?, recipient: { chain, address, attestation } }`), self- or third-party-custody. `purpose` is required and drives the documentation / whitelist gate; `documents` are supporting-document ids. `recipient.chain` must match the destination wallet's chain.\n\n**NON_CUSTODIAL_SOURCE_NOT_SUPPORTED**: Non-custodial source wallets are supported on the EVM chains, Solana, and Tron. On Stellar, a non-custodial source is rejected at creation, because a source transfer on that chain cannot yet be co-signed and broadcast.\n\n**MISSING_REQUIRED_FIELDS**: The order request is missing one or more fields required for the destination shape.\n\n**RECIPIENT_VALIDATION_FAILED**: The supplied recipient or destination details failed validation for the chosen rail, chain, or corridor.\n\n**DESTINATION_NOT_ACTIVATED**: The destination account does not exist on the destination chain. On some chains an account must be activated on-chain before it can receive. The error detail names the chain.\n\n**DESTINATION_ASSET_NOT_ACCEPTED**: The destination account exists but cannot receive the requested asset now. The account has not opted in to the asset, the issuer froze the account's ability to hold it, or the account's holding limit leaves no room for this amount. The error detail and details.reason name the exact blocker.\n\n**AMOUNT_OUT_OF_RANGE**: The requested amount is below the minimum or above the maximum allowed, or the amount you send rounds to zero at its supported precision.\n\n**TRANSACTION_BLOCKED**: The transaction is blocked by policy. This decision is terminal.\n\n**PAYOUT_SELF_DESTINATION**: The payout's destination is the same virtual account it is sent from — either the recipient bank coordinates resolve to it, or it was named directly by id. Paying an account from itself moves no money.\n\n**PAYOUT_DESTINATION_RESTRICTED**: The recipient bank coordinates resolve to a Conduit-issued account that is currently restricted from receiving funds.\n\n**PAYOUT_RAIL_CURRENCY_MISMATCH**: The requested payment rail settles a different currency from the one the payout moves. A payout moves one currency and never converts, so this rail can never deliver it.\n\n**CLIENT_MARKUP_SPREAD_EXCEEDED**: The margin you declared, added to Conduit's own spread terms for the pair, reaches the point at which the quoted rate would fall to zero. It is raised on the order or the quote that declares the margin. The margin itself has no fixed maximum; what is left for it depends on the pair.\n\n**CLIENT_MARKUP_EXCEEDS_PAYOUT**: The margin declared on the chained auto-payout reaches the amount this order converts to. The leg is funded only by that converted output, out of which Conduit's own payout fee also comes, so the margin cannot be collected.\n\n**QUOTE_ASSET_MISMATCH**: The order's source or destination resource asset does not match the quote option's priced asset pair.\n\n**QUOTE_RECIPIENT_TYPE_UNPRICED**: The quote was priced with no recipient, but a recipient-type-scoped pricing rule applies to this order's payout recipient and would change the price. The quote's locked rate is not valid for this recipient.\n\n**SANDBOX_ONRAMP_DAILY_CAP_EXCEEDED**: This transaction would carry the customer over the sandbox testnet liquidity cap for this chain. In sandbox, an onramp pays real testnet crypto out of shared sandbox liquidity; each customer has a maximum net draw per chain per UTC day (pending and settled outflows minus settled inflows), which keeps that liquidity available across customers. A pending onramp already holds headroom; a settled offramp, or the inbound leg of a cross-chain conversion, returns liquidity and frees headroom on that chain. At each UTC midnight the previous day's completed draws stop counting, so headroom is full again, except for an onramp still in flight that keeps its reservation until it settles or fails. A testnet asset with no USD price is capped by a per-day transaction count instead of value, and returning crypto does not lower that count.\n\n**LEGACY_MOCK_WALLET_UNSUPPORTED**: A wallet the order funds from, or that its crypto autoPayout would send from, was created with legacy mock custody and can no longer transact now that sandbox crypto is real testnet. The same code refuses a new wallet for a customer whose wallet account is on legacy mock custody, because that account cannot hold a real testnet wallet. A mock wallet holds no real signing key, so it cannot sign a payout, and any real testnet funds sent to its address stay stranded there because nothing can sign to move them out.\n\n**CHAIN_NOT_SUPPORTED**: This environment does not serve that chain, or that asset on that chain, so it cannot carry out this request. Other chains and assets this environment serves are unaffected, and the same request on one of them is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_PAIR","title":"Unsupported Pair","status":422,"detail":"The requested source and destination asset pair is not supported. `details` carries `sourceChain` and `destinationChain` alongside `sourceAsset` and `destinationAsset` — `null` for a fiat asset, which carries no chain — so you can tell a chain-specific refusal from an asset-wide one. A conversion to or from OUSD also returns this code, with `details.reason` set to `ousd_conversion_not_enabled`: you can receive, hold, send and bridge OUSD, but not convert it.","resolution":"Submit a supported source/destination asset combination and chain, or contact Conduit if this pair should be available.","docs":"https://v2.docs.conduit.financial/errors#unsupported-pair","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"503":{"description":"**RATE_UNAVAILABLE**: A live exchange rate could not be retrieved for the requested currency pair. The rate provider may be temporarily unavailable.\n\n**RATE_UNAVAILABLE_AFTER_HOURS**: The market for this currency pair is currently closed and no prior open-market rate is available to freeze, so a quote cannot be produced.\n\n**POLICY_EVALUATION_UNAVAILABLE**: The documentation policy could not be evaluated because a policy lookup did not complete. No transaction was created.\n\n**RAIL_UNAVAILABLE**: No viable payment rail was available for the requested corridor. No funds were moved.\n\n**ASSET_CHAIN_PAUSED**: Conduit has temporarily paused this asset on this chain, or the whole chain, so it cannot accept this request now. Asset and chain pairs that are not paused stay available.\n\n**RECIPIENT_BANK_LOOKUP_UNAVAILABLE**: We could not look up the bank for this routing number right now, and the request sent no bankAddress. This says nothing about the routing number itself. No funds were moved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"RATE_UNAVAILABLE","title":"Rate Unavailable","status":503,"detail":"A live exchange rate could not be retrieved for the requested currency pair. The rate provider may be temporarily unavailable.","resolution":"Retry the request after a short delay. If the error persists, the rate provider for this currency pair may be experiencing an outage.","docs":"https://v2.docs.conduit.financial/errors/rate-unavailable","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Create an order","tags":["Orders"]}},"/orders/requirements":{"get":{"description":"Returns recipient fields required for the requested order route before creating an order.","operationId":"OrdersController_getRequirements_v2","parameters":[{"name":"sourceCode","required":true,"in":"query","description":"Source asset code (e.g. `USDC`, `USD`).","schema":{"enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"type":"string"}},{"name":"sourceChain","required":false,"in":"query","description":"Source chain when the source asset is a crypto token (e.g. `ethereum`). Omitted for fiat sources.","schema":{"enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"],"type":"string"}},{"name":"destinationCode","required":true,"in":"query","description":"Destination asset code (e.g. `USD`, `USDC`).","schema":{"enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"type":"string"}},{"name":"destinationChain","required":false,"in":"query","description":"Destination chain when the destination asset is a crypto token. Omitted for fiat destinations.","schema":{"enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"],"type":"string"}},{"name":"destinationCountry","required":false,"in":"query","description":"Beneficiary country ISO 3166-1 alpha-2 or alpha-3 code. Required when the destination is a fiat bank rail. The rail selects the fields. The country decides whether `postalAddress.postalCode` is required: a country that uses postal codes gets `required: true`, and any other country keeps `requiredWhen` on `postalAddress.country`. `chaps` requires it for every country.","schema":{"type":"string"}},{"name":"paymentRail","required":false,"in":"query","description":"Payment rail for the outbound leg when applicable. Conduit may resolve this server-side when unambiguous. Input is case-insensitive (`fedwire` and `FEDWIRE` both work); the documented wire value is lowercase (`fedwire`).","schema":{"enum":["rtp","fedwire","ach","ach_same_day","swift","fednow","sepa","faster_payments","chaps","pix","ted","nibss","spei"],"type":"string"}},{"name":"recipientType","required":false,"in":"query","description":"Whether the recipient is an individual or a business.","schema":{"enum":["individual","business"],"type":"string"}},{"name":"recipientRail","required":false,"in":"query","description":"Set to `crypto` to discover the fields for a crypto autoPayout recipient (an ONRAMP chains a crypto Withdrawal to an on-chain address). `crypto` is the only accepted value — fiat rails are derived from the fiat dimensions, which are mutually exclusive with it (`destinationCountry`/`paymentRail`/`recipientType`). Input is case-insensitive; the documented wire value is lowercase (`crypto`).","schema":{"enum":["crypto"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipientRequirementsResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"422":{"description":"**UNSUPPORTED_PAIR**: The requested source and destination asset pair is not supported. `details` carries `sourceChain` and `destinationChain` alongside `sourceAsset` and `destinationAsset` — `null` for a fiat asset, which carries no chain — so you can tell a chain-specific refusal from an asset-wide one. A conversion to or from OUSD also returns this code, with `details.reason` set to `ousd_conversion_not_enabled`: you can receive, hold, send and bridge OUSD, but not convert it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_PAIR","title":"Unsupported Pair","status":422,"detail":"The requested source and destination asset pair is not supported. `details` carries `sourceChain` and `destinationChain` alongside `sourceAsset` and `destinationAsset` — `null` for a fiat asset, which carries no chain — so you can tell a chain-specific refusal from an asset-wide one. A conversion to or from OUSD also returns this code, with `details.reason` set to `ousd_conversion_not_enabled`: you can receive, hold, send and bridge OUSD, but not convert it.","resolution":"Submit a supported source/destination asset combination and chain, or contact Conduit if this pair should be available.","docs":"https://v2.docs.conduit.financial/errors#unsupported-pair","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"List required recipient fields","tags":["Orders"]}},"/orders/{id}":{"get":{"description":"Returns a single order that belongs to the authenticated organization.","operationId":"OrdersController_get_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"ord_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderExternalResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**ORDER_NOT_FOUND**: No order exists with the specified ID, or the order has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORDER_NOT_FOUND","title":"Order Not Found","status":404,"detail":"No order exists with the specified ID, or the order has expired.","resolution":"Verify the order ID is correct. Orders have a limited validity period; create a new order if the previous one has expired.","docs":"https://v2.docs.conduit.financial/errors#order-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Retrieve an order by id","tags":["Orders"]}},"/orders/{id}/cancel":{"post":{"description":"Cancels a pending order, releasing any in-flight source reservation. An order that has begun executing still cancels while its source transfer can be stopped — including the whole window in which that transfer waits for the customer signature, the stage the order's transaction reports while it waits. Past that point the funds are on their way and the call returns `409 ORDER_NOT_CANCELLABLE`, as it does for an order executing from a source that runs no such transfer. Already-cancelled orders return 200 (idempotent). Orders in terminal states (succeeded, failed) return 409. `409 ORDER_CANCEL_IN_PROGRESS` means the source transfer cannot answer yet, or it accepted the cancellation and the terminal state is not recorded yet; retry, or read the order until it settles.","operationId":"OrdersController_cancel_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"ord_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"Idempotency-Key","in":"header","description":"Caller-generated unique key that lets the server safely replay this request. The original response is returned for 30 days on any retry with the same key from the same organization, with the response header `Idempotency-Replayed: true`. Required on every state-changing money-moving or resource-creating POST.","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,128}$","minLength":1,"maxLength":128,"example":"01J7B3K2X9M8N5P6Q7R8S9T0V1"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderExternalResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.\n\n**IDEMPOTENCY_KEY_REQUIRED**: This endpoint requires an Idempotency-Key header to prevent duplicate processing. Generate a unique key per logical request and resend the request.\n\n**IDEMPOTENCY_KEY_INVALID**: The Idempotency-Key header value did not match the required shape (1-128 characters, letters / digits / underscore / dot / colon / hyphen).\n\n**IDEMPOTENCY_BODY_TOO_NESTED**: The request body exceeds the maximum nesting depth allowed by the idempotency fingerprint hasher. Deeply-nested arrays or objects are rejected as a malformed payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**ORDER_NOT_FOUND**: No order exists with the specified ID, or the order has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORDER_NOT_FOUND","title":"Order Not Found","status":404,"detail":"No order exists with the specified ID, or the order has expired.","resolution":"Verify the order ID is correct. Orders have a limited validity period; create a new order if the previous one has expired.","docs":"https://v2.docs.conduit.financial/errors#order-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**IDEMPOTENCY_KEY_CONFLICT**: The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.\n\n**IDEMPOTENCY_KEY_REQUEST_IN_PROGRESS**: An earlier request with this idempotency key has not finished, or stopped before its result was recorded. In the second case it may or may not have completed its work.\n\n**ORDER_NOT_CANCELLABLE**: The order cannot be cancelled. It is already in a terminal state (succeeded or failed; re-cancelling a `cancelled` order returns 200 idempotently), or its execution has begun and the order has no source transfer that can be stopped, or that transfer has passed the point where stopping it is safe. An order whose source transfer has not yet been sent has not passed that point, so it cancels.\n\n**ORDER_CANCEL_IN_PROGRESS**: The order's source transfer cannot answer the cancellation yet: it has just started, or the cancellation was accepted and its result is not recorded yet. This is transient, not a terminal state. It is not a promise that the order reaches `cancelled` — where the transfer's outcome turns out to be uncertain, the order can still settle or be refused instead.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"IDEMPOTENCY_KEY_CONFLICT","title":"Idempotency Key Conflict","status":409,"detail":"The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.","resolution":"Use a fresh idempotency key for the new request, or replay the original request unchanged.","docs":"https://v2.docs.conduit.financial/errors#idempotency-key-conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Cancel a pending order","tags":["Orders"]}},"/orders/{id}/execute":{"post":{"description":"Reserves the customer's source funds and starts execution. Makes one immediate attempt only — Conduit does not schedule a retry. Returns 422 INSUFFICIENT_FUNDS if the source balance doesn't cover totalDebit (principal plus fees); the order stays pending and unclaimed, so the client may fund the source and call this endpoint again before lockExpiresAt. On a deposit-funded order the call also succeeds after lockExpiresAt once a deposit that reached the funding address before the deadline has cleared — arriving in time is what meets that deadline. On success, returns the order still `status: pending` with `executionTrigger: \"client\"`; execution completes asynchronously, moving status to `succeeded` (or `failed`) and emitting the matching order.* webhook. Callable regardless of the order's `autoExecute` value — an autoExecute:true order not yet claimed by Conduit's automatic execution can still be executed manually here, whichever call reaches it first wins. Once your sandbox has real testnet custody, executing an order whose source wallet is stuck on the old mock custody is refused with 422 LEGACY_MOCK_WALLET_UNSUPPORTED before any funds are reserved, and the order stays pending so a corrected source can retry; the same code for the destination wallet a crypto autoPayout would send from fails the order outright instead, since that wallet can never sign — recreate the wallet under a new sandbox customer.","operationId":"OrdersController_execute_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"ord_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"Idempotency-Key","in":"header","description":"Caller-generated unique key that lets the server safely replay this request. The original response is returned for 30 days on any retry with the same key from the same organization, with the response header `Idempotency-Replayed: true`. Required on every state-changing money-moving or resource-creating POST.","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,128}$","minLength":1,"maxLength":128,"example":"01J7B3K2X9M8N5P6Q7R8S9T0V1"}}],"responses":{"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderExternalResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.\n\n**IDEMPOTENCY_KEY_REQUIRED**: This endpoint requires an Idempotency-Key header to prevent duplicate processing. Generate a unique key per logical request and resend the request.\n\n**IDEMPOTENCY_KEY_INVALID**: The Idempotency-Key header value did not match the required shape (1-128 characters, letters / digits / underscore / dot / colon / hyphen).\n\n**IDEMPOTENCY_BODY_TOO_NESTED**: The request body exceeds the maximum nesting depth allowed by the idempotency fingerprint hasher. Deeply-nested arrays or objects are rejected as a malformed payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**ORDER_NOT_FOUND**: No order exists with the specified ID, or the order has expired.\n\n**WALLET_NOT_FOUND**: No wallet exists with the specified ID, or the wallet belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORDER_NOT_FOUND","title":"Order Not Found","status":404,"detail":"No order exists with the specified ID, or the order has expired.","resolution":"Verify the order ID is correct. Orders have a limited validity period; create a new order if the previous one has expired.","docs":"https://v2.docs.conduit.financial/errors#order-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**IDEMPOTENCY_KEY_CONFLICT**: The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.\n\n**IDEMPOTENCY_KEY_REQUEST_IN_PROGRESS**: An earlier request with this idempotency key has not finished, or stopped before its result was recorded. In the second case it may or may not have completed its work.\n\n**ORDER_EXPIRED**: The order has expired and can no longer be executed.\n\n**ORDER_NOT_EXECUTABLE**: The order cannot be executed because it is not in a pending state. Already-executed or failed orders cannot be re-executed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"IDEMPOTENCY_KEY_CONFLICT","title":"Idempotency Key Conflict","status":409,"detail":"The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.","resolution":"Use a fresh idempotency key for the new request, or replay the original request unchanged.","docs":"https://v2.docs.conduit.financial/errors#idempotency-key-conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"422":{"description":"**INSUFFICIENT_FUNDS**: The customer's available balance for the order's source resource is below the requested amount plus fee. Money in the `frozen` bucket does not count, including money held while a bank blocks one of the account's bank accounts.\n\n**INVALID_ORDER_COMBO**: The requested order combination is not supported: same-asset same-chain moves, mismatched source and destination resources, no bank of the destination virtual account that can take a book credit in that asset, or an autoPayout shape that does not match the order direction. OFFRAMP orders require a fiat autoPayout (`{ rail, purpose, documents?, recipient }`); ONRAMP orders require a crypto autoPayout (`{ purpose, documents?, recipient: { chain, address, attestation } }`), self- or third-party-custody. `purpose` is required and drives the documentation / whitelist gate; `documents` are supporting-document ids. `recipient.chain` must match the destination wallet's chain.\n\n**SANDBOX_ONRAMP_DAILY_CAP_EXCEEDED**: This transaction would carry the customer over the sandbox testnet liquidity cap for this chain. In sandbox, an onramp pays real testnet crypto out of shared sandbox liquidity; each customer has a maximum net draw per chain per UTC day (pending and settled outflows minus settled inflows), which keeps that liquidity available across customers. A pending onramp already holds headroom; a settled offramp, or the inbound leg of a cross-chain conversion, returns liquidity and frees headroom on that chain. At each UTC midnight the previous day's completed draws stop counting, so headroom is full again, except for an onramp still in flight that keeps its reservation until it settles or fails. A testnet asset with no USD price is capped by a per-day transaction count instead of value, and returning crypto does not lower that count.\n\n**CHAIN_NOT_SUPPORTED**: This environment does not serve that chain, or that asset on that chain, so it cannot carry out this request. Other chains and assets this environment serves are unaffected, and the same request on one of them is accepted.\n\n**LEGACY_MOCK_WALLET_UNSUPPORTED**: A wallet the order funds from, or that its crypto autoPayout would send from, was created with legacy mock custody and can no longer transact now that sandbox crypto is real testnet. The same code refuses a new wallet for a customer whose wallet account is on legacy mock custody, because that account cannot hold a real testnet wallet. A mock wallet holds no real signing key, so it cannot sign a payout, and any real testnet funds sent to its address stay stranded there because nothing can sign to move them out.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INSUFFICIENT_FUNDS","title":"Insufficient Funds","status":422,"detail":"The customer's available balance for the order's source resource is below the requested amount plus fee. Money in the `frozen` bucket does not count, including money held while a bank blocks one of the account's bank accounts.","resolution":"Verify the customer's available balance on the order's source resource and retry with a smaller amount, or top up the source. Money shown in `frozen` returns to `available` when the hold lifts.","docs":"https://v2.docs.conduit.financial/errors#insufficient-funds","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Execute a pending order","tags":["Orders"]}},"/asset-chain-pairs":{"get":{"description":"Asset/chain pairs a customer can both fund a deposit-funded order with and receive an off-ramp payout on.","operationId":"AssetChainPairsController_list_v2","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfferableAssetChainPairListResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"List offerable asset/chain pairs","tags":["Asset Chain Pairs"]}},"/quotes":{"post":{"description":"Prices an asset pair with no recipient. Takes your own margin on a conversion or payout quote, so you can show your customer the price the redeeming order charges; a withdrawal quote refuses it. Takes the destination type and custody of the order an option is for. Returns zero or more options and an expiry. A replay always reprices — this route carries no idempotency-key.","operationId":"QuotesController_create_v2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateQuoteRequestDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**UNSUPPORTED_ASSET**: The requested asset and chain combination is not supported for this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**FEATURE_NOT_ENABLED**: Your account does not have access to this feature. Features are enabled on a per-account basis.\n\n**CLIENT_MARKUP_NOT_ENABLED**: This request declares your own margin, but client markup is not enabled for your organization.\n\n**CAPABILITY_SUSPENDED**: This account is currently restricted from this action: a money movement, or opening a new account, wallet, customer or payout destination.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**CUSTOMER_NOT_FOUND**: No customer exists with the specified ID, or the customer belongs to a different organization.\n\n**VIRTUAL_ACCOUNT_NOT_FOUND**: No virtual account exists for the requested customer and asset, or the virtual account belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CUSTOMER_NOT_FOUND","title":"Customer Not Found","status":404,"detail":"No customer exists with the specified ID, or the customer belongs to a different organization.","resolution":"Verify the customer ID is correct. Use the list customers endpoint to find valid customer IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#customer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"422":{"description":"**UNSUPPORTED_PAIR**: The requested source and destination asset pair is not supported. `details` carries `sourceChain` and `destinationChain` alongside `sourceAsset` and `destinationAsset` — `null` for a fiat asset, which carries no chain — so you can tell a chain-specific refusal from an asset-wide one. A conversion to or from OUSD also returns this code, with `details.reason` set to `ousd_conversion_not_enabled`: you can receive, hold, send and bridge OUSD, but not convert it.\n\n**AMOUNT_OUT_OF_RANGE**: The requested amount is below the minimum or above the maximum allowed, or the amount you send rounds to zero at its supported precision.\n\n**CHAIN_NOT_SUPPORTED**: This environment does not serve that chain, or that asset on that chain, so it cannot carry out this request. Other chains and assets this environment serves are unaffected, and the same request on one of them is accepted.\n\n**CLIENT_MARKUP_SPREAD_EXCEEDED**: The margin you declared, added to Conduit's own spread terms for the pair, reaches the point at which the quoted rate would fall to zero. It is raised on the order or the quote that declares the margin. The margin itself has no fixed maximum; what is left for it depends on the pair.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_PAIR","title":"Unsupported Pair","status":422,"detail":"The requested source and destination asset pair is not supported. `details` carries `sourceChain` and `destinationChain` alongside `sourceAsset` and `destinationAsset` — `null` for a fiat asset, which carries no chain — so you can tell a chain-specific refusal from an asset-wide one. A conversion to or from OUSD also returns this code, with `details.reason` set to `ousd_conversion_not_enabled`: you can receive, hold, send and bridge OUSD, but not convert it.","resolution":"Submit a supported source/destination asset combination and chain, or contact Conduit if this pair should be available.","docs":"https://v2.docs.conduit.financial/errors#unsupported-pair","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"503":{"description":"**ASSET_CHAIN_PAUSED**: Conduit has temporarily paused this asset on this chain, or the whole chain, so it cannot accept this request now. Asset and chain pairs that are not paused stay available.\n\n**RATE_UNAVAILABLE**: A live exchange rate could not be retrieved for the requested currency pair. The rate provider may be temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ASSET_CHAIN_PAUSED","title":"Asset Chain Paused","status":503,"detail":"Conduit has temporarily paused this asset on this chain, or the whole chain, so it cannot accept this request now. Asset and chain pairs that are not paused stay available.","resolution":"Retry the same request later; it succeeds once Conduit lifts the pause. Use an asset and chain pair that is not paused if you cannot wait.","docs":"https://v2.docs.conduit.financial/errors#asset-chain-paused","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Price a conversion, payout, or withdrawal","tags":["Quotes"]}},"/webhooks/endpoints":{"get":{"description":"Returns a paginated list of webhook endpoints configured for the authenticated organization.","operationId":"WebhookEndpointsController_listEndpoints_v2","parameters":[{"name":"cursor","required":false,"in":"query","description":"Opaque cursor from a previous response. Send `meta.nextCursor` with `direction=forward` to read the next page, or `meta.previousCursor` with `direction=backward` to read the previous page.","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of results to return (1-100)","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"direction","required":false,"in":"query","description":"Which side of the cursor to read: `forward` returns the rows after it, `backward` the rows before it. Rows come back in list order either way. Without a cursor, `forward` starts at the first row and `backward` at the end of the list.","schema":{"enum":["forward","backward"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointListResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"List webhook endpoints","tags":["Webhook Endpoints"]},"post":{"description":"Creates a new webhook endpoint. The response includes a signing secret that is only shown once. Store it securely to verify webhook signatures on your server.","operationId":"WebhookEndpointsController_createEndpoint_v2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEndpointDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointCreatedResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Create a webhook endpoint","tags":["Webhook Endpoints"]}},"/webhooks/endpoints/{id}":{"get":{"description":"Retrieves the full configuration of a webhook endpoint.","operationId":"WebhookEndpointsController_getEndpoint_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"wep_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**WEBHOOK_ENDPOINT_NOT_FOUND**: No webhook endpoint exists with the specified ID, or it belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"WEBHOOK_ENDPOINT_NOT_FOUND","title":"Webhook Endpoint Not Found","status":404,"detail":"No webhook endpoint exists with the specified ID, or it belongs to a different organization.","resolution":"Verify the endpoint ID is correct. Use the list webhook endpoints endpoint to find valid IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#webhook-endpoint-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Get a webhook endpoint by ID","tags":["Webhook Endpoints"]},"patch":{"description":"Updates the configuration of an existing webhook endpoint. Only provided fields are changed.","operationId":"WebhookEndpointsController_updateEndpoint_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"wep_1A2b3C4d5E6f7G8h9I0jKl"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEndpointDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**WEBHOOK_ENDPOINT_NOT_FOUND**: No webhook endpoint exists with the specified ID, or it belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"WEBHOOK_ENDPOINT_NOT_FOUND","title":"Webhook Endpoint Not Found","status":404,"detail":"No webhook endpoint exists with the specified ID, or it belongs to a different organization.","resolution":"Verify the endpoint ID is correct. Use the list webhook endpoints endpoint to find valid IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#webhook-endpoint-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Update a webhook endpoint","tags":["Webhook Endpoints"]},"delete":{"description":"Deletes a webhook endpoint. Pending deliveries will still be attempted, but no new deliveries will be created. Deleting an endpoint that is already deleted returns 204 again; 404 means the id never existed in your organization.","operationId":"WebhookEndpointsController_deleteEndpoint_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"wep_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"204":{"description":""},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**WEBHOOK_ENDPOINT_NOT_FOUND**: No webhook endpoint exists with the specified ID, or it belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"WEBHOOK_ENDPOINT_NOT_FOUND","title":"Webhook Endpoint Not Found","status":404,"detail":"No webhook endpoint exists with the specified ID, or it belongs to a different organization.","resolution":"Verify the endpoint ID is correct. Use the list webhook endpoints endpoint to find valid IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#webhook-endpoint-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Delete a webhook endpoint","tags":["Webhook Endpoints"]}},"/webhooks/endpoints/{id}/rotate":{"post":{"description":"Generates a new signing secret and returns it once — store it securely. The previous secret stays valid for a grace window (deliveries are co-signed with both secrets, each as its own `v1=` segment in `X-Conduit-Signature`) so you can roll over your verification code without dropping events. After the grace window only the new secret signs. Requires an `Idempotency-Key`: a retried request with the same key replays the original response instead of rotating again, so a lost response can't silently discard the secret you just deployed.","operationId":"WebhookEndpointsController_rotateEndpointSecret_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"wep_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"Idempotency-Key","in":"header","description":"Caller-generated unique key that lets the server safely replay this request. The original response is returned for 30 days on any retry with the same key from the same organization, with the response header `Idempotency-Replayed: true`. Required on every state-changing money-moving or resource-creating POST.","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,128}$","minLength":1,"maxLength":128,"example":"01J7B3K2X9M8N5P6Q7R8S9T0V1"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointCreatedResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.\n\n**IDEMPOTENCY_KEY_REQUIRED**: This endpoint requires an Idempotency-Key header to prevent duplicate processing. Generate a unique key per logical request and resend the request.\n\n**IDEMPOTENCY_KEY_INVALID**: The Idempotency-Key header value did not match the required shape (1-128 characters, letters / digits / underscore / dot / colon / hyphen).\n\n**IDEMPOTENCY_BODY_TOO_NESTED**: The request body exceeds the maximum nesting depth allowed by the idempotency fingerprint hasher. Deeply-nested arrays or objects are rejected as a malformed payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**WEBHOOK_ENDPOINT_NOT_FOUND**: No webhook endpoint exists with the specified ID, or it belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"WEBHOOK_ENDPOINT_NOT_FOUND","title":"Webhook Endpoint Not Found","status":404,"detail":"No webhook endpoint exists with the specified ID, or it belongs to a different organization.","resolution":"Verify the endpoint ID is correct. Use the list webhook endpoints endpoint to find valid IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#webhook-endpoint-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**IDEMPOTENCY_KEY_CONFLICT**: The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.\n\n**IDEMPOTENCY_KEY_REQUEST_IN_PROGRESS**: An earlier request with this idempotency key has not finished, or stopped before its result was recorded. In the second case it may or may not have completed its work.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"IDEMPOTENCY_KEY_CONFLICT","title":"Idempotency Key Conflict","status":409,"detail":"The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.","resolution":"Use a fresh idempotency key for the new request, or replay the original request unchanged.","docs":"https://v2.docs.conduit.financial/errors#idempotency-key-conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Rotate a webhook endpoint's signing secret","tags":["Webhook Endpoints"]}},"/webhooks/deliveries":{"get":{"description":"Returns a paginated list of delivery attempts for the authenticated organization. Optionally filter by `endpointId`, by delivery `status` (`pending`, `processing`, `succeeded`, `failed`), or by `eventType` (exact match, e.g. `transaction.failed`). An unknown `status` value returns 400; an unknown `eventType` returns an empty page.","operationId":"WebhookDeliveriesController_listDeliveries_v2","parameters":[{"name":"cursor","required":false,"in":"query","description":"Opaque cursor from a previous response. Send `meta.nextCursor` with `direction=forward` to read the next page, or `meta.previousCursor` with `direction=backward` to read the previous page.","x-nestjs_zod-parent-additional-properties":false,"schema":{"maxLength":500,"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of results to return (1-100)","x-nestjs_zod-parent-additional-properties":false,"schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"direction","required":false,"in":"query","description":"Which side of the cursor to read: `forward` returns the rows after it, `backward` the rows before it. Rows come back in list order either way. Without a cursor, `forward` starts at the first row and `backward` at the end of the list.","x-nestjs_zod-parent-additional-properties":false,"schema":{"enum":["forward","backward"],"type":"string"}},{"name":"endpointId","required":false,"in":"query","description":"Only return deliveries targeted at this webhook endpoint","x-nestjs_zod-parent-additional-properties":false,"schema":{"pattern":"^wep_[0-9A-Za-z]{22}$","type":"string"}},{"name":"status","required":false,"in":"query","description":"Filter by delivery status. Case-insensitive. Takes one value: repeating the key returns 400, and so does an unknown value.","x-nestjs_zod-parent-additional-properties":false,"schema":{"enum":["pending","processing","succeeded","failed"],"type":"string"}},{"name":"eventType","required":false,"in":"query","description":"Filter by event type (exact match, e.g. `transaction.failed`). An unknown value returns an empty page. Read the current list from `GET /v2/webhooks/event-types`; a retired type still matches the deliveries kept from before it was retired.","x-nestjs_zod-parent-additional-properties":false,"schema":{"minLength":1,"maxLength":100,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedWebhookDeliveriesResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"List webhook deliveries","tags":["Webhook Deliveries"]}},"/webhooks/deliveries/{id}":{"get":{"description":"Retrieves full delivery details including all individual delivery attempts with their status codes, response bodies, and timing.","operationId":"WebhookDeliveriesController_getDelivery_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"wdl_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDeliveryDetailResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**WEBHOOK_DELIVERY_NOT_FOUND**: No webhook delivery record exists with the specified ID.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"WEBHOOK_DELIVERY_NOT_FOUND","title":"Webhook Delivery Not Found","status":404,"detail":"No webhook delivery record exists with the specified ID.","resolution":"Verify the delivery ID is correct. Use the list deliveries endpoint to find valid delivery IDs.","docs":"https://v2.docs.conduit.financial/errors#webhook-delivery-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Get a delivery by ID","tags":["Webhook Deliveries"]}},"/webhooks/deliveries/{id}/retry":{"post":{"description":"Queues an immediate retry for a failed delivery. The delivery status resets and a new attempt is made regardless of the retry count.","operationId":"WebhookDeliveriesController_retryDelivery_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"wdl_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDeliveryResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**WEBHOOK_DELIVERY_NOT_FOUND**: No webhook delivery record exists with the specified ID.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"WEBHOOK_DELIVERY_NOT_FOUND","title":"Webhook Delivery Not Found","status":404,"detail":"No webhook delivery record exists with the specified ID.","resolution":"Verify the delivery ID is correct. Use the list deliveries endpoint to find valid delivery IDs.","docs":"https://v2.docs.conduit.financial/errors#webhook-delivery-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"422":{"description":"**WEBHOOK_DELIVERY_NOT_RETRYABLE**: The webhook delivery cannot be retried because only a delivery with status failed can be retried.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"WEBHOOK_DELIVERY_NOT_RETRYABLE","title":"Webhook Delivery Not Retryable","status":422,"detail":"The webhook delivery cannot be retried because only a delivery with status failed can be retried.","resolution":"Only failed deliveries can be retried. Check the delivery status before attempting a retry.","docs":"https://v2.docs.conduit.financial/errors#webhook-delivery-not-retryable","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Retry a failed delivery","tags":["Webhook Deliveries"]}},"/webhooks/event-types":{"get":{"description":"Returns all event types that can be subscribed to when creating a webhook endpoint, plus the signature metadata every delivery is signed with.","operationId":"WebhookEventTypesController_listEventTypes_v2","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEventTypeListResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"List available webhook event types","tags":["Webhook Event Types"]}},"/events":{"get":{"description":"Returns a paginated list of the events that occurred for the authenticated organization, newest first. Each event has the same shape as the payload of a webhook delivery, and the list holds every event whether or not a webhook endpoint subscribes to it. Optionally filter by `type` (exact match, e.g. `transaction.completed`) or by `createdFrom`. An unknown `type` returns an empty page.","operationId":"EventsController_listEvents_v2","parameters":[{"name":"cursor","required":false,"in":"query","description":"Opaque cursor from a previous response. Send `meta.nextCursor` with `direction=forward` to read the next page, or `meta.previousCursor` with `direction=backward` to read the previous page.","x-nestjs_zod-parent-additional-properties":false,"schema":{"maxLength":500,"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of results to return (1-100)","x-nestjs_zod-parent-additional-properties":false,"schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"direction","required":false,"in":"query","description":"Which side of the cursor to read: `forward` returns the rows after it, `backward` the rows before it. Rows come back in list order either way. Without a cursor, `forward` starts at the first row and `backward` at the end of the list.","x-nestjs_zod-parent-additional-properties":false,"schema":{"enum":["forward","backward"],"type":"string"}},{"name":"type","required":false,"in":"query","description":"Filter by event type (exact match, e.g. `transaction.completed`). An unknown value returns an empty page. Read the current list from `GET /v2/webhooks/event-types`.","x-nestjs_zod-parent-additional-properties":false,"schema":{"minLength":1,"maxLength":100,"type":"string"}},{"name":"createdFrom","required":false,"in":"query","description":"Return only events that occurred at or after this time (ISO 8601).","example":"2026-01-15T09:30:00.000Z","x-nestjs_zod-parent-additional-properties":false,"schema":{"format":"date-time","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedEventsResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"List events","tags":["Events"]}},"/events/{id}":{"get":{"description":"Retrieves one event. The `id` is the same as the `id` of the webhook payload that delivered the event.","operationId":"EventsController_getEvent_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"evt_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**EVENT_NOT_FOUND**: No event exists with the specified ID, or it belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"EVENT_NOT_FOUND","title":"Event Not Found","status":404,"detail":"No event exists with the specified ID, or it belongs to a different organization.","resolution":"Verify the event ID is correct. Use the list events endpoint to find valid event IDs.","docs":"https://v2.docs.conduit.financial/errors#event-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Get an event by ID","tags":["Events"]}},"/customers/{customerId}/features":{"post":{"description":"Call `GET /customers/:customerId/features/requirements` first. Send dynamic data under `fields` (nested objects, NOT dotted keys). Upload each required document via `POST /v2/documents` (file only) and pass returned ids in `documentIds[]`. `asset` is required for VIRTUAL_ACCOUNT.","operationId":"FeaturesController_request_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"Idempotency-Key","in":"header","description":"Caller-generated unique key that lets the server safely replay this request. The original response is returned for 30 days on any retry with the same key from the same organization, with the response header `Idempotency-Replayed: true`. Required on every state-changing money-moving or resource-creating POST.","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,128}$","minLength":1,"maxLength":128,"example":"01J7B3K2X9M8N5P6Q7R8S9T0V1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureRequestDto"}}}},"responses":{"202":{"description":"The submitted feature-request application","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CustomerOnboardingApplicationDto"},{"$ref":"#/components/schemas/CustomerUpdateApplicationDto"},{"$ref":"#/components/schemas/VirtualAccountFeatureApplicationDto"},{"$ref":"#/components/schemas/CryptoWalletFeatureApplicationDto"},{"$ref":"#/components/schemas/YieldFeatureApplicationDto"}],"discriminator":{"propertyName":"type"}}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.\n\n**IDEMPOTENCY_KEY_REQUIRED**: This endpoint requires an Idempotency-Key header to prevent duplicate processing. Generate a unique key per logical request and resend the request.\n\n**IDEMPOTENCY_KEY_INVALID**: The Idempotency-Key header value did not match the required shape (1-128 characters, letters / digits / underscore / dot / colon / hyphen).\n\n**IDEMPOTENCY_BODY_TOO_NESTED**: The request body exceeds the maximum nesting depth allowed by the idempotency fingerprint hasher. Deeply-nested arrays or objects are rejected as a malformed payload.\n\n**DOCUMENT_IDS_NOT_FOUND**: One or more document IDs provided in the request do not exist or do not belong to this customer.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.\n\n**CAPABILITY_SUSPENDED**: This account is currently restricted from this action: a money movement, or opening a new account, wallet, customer or payout destination.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**CUSTOMER_NOT_FOUND**: No customer exists with the specified ID, or the customer belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CUSTOMER_NOT_FOUND","title":"Customer Not Found","status":404,"detail":"No customer exists with the specified ID, or the customer belongs to a different organization.","resolution":"Verify the customer ID is correct. Use the list customers endpoint to find valid customer IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#customer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**IDEMPOTENCY_KEY_CONFLICT**: The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.\n\n**IDEMPOTENCY_KEY_REQUEST_IN_PROGRESS**: An earlier request with this idempotency key has not finished, or stopped before its result was recorded. In the second case it may or may not have completed its work.\n\n**FEATURE_ALREADY_EXISTS**: A feature with the same identifier already exists for this account.\n\n**CONFLICT**: The request conflicts with the current state of the resource. This usually means a duplicate or a state transition that is not allowed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"IDEMPOTENCY_KEY_CONFLICT","title":"Idempotency Key Conflict","status":409,"detail":"The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.","resolution":"Use a fresh idempotency key for the new request, or replay the original request unchanged.","docs":"https://v2.docs.conduit.financial/errors#idempotency-key-conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"422":{"description":"**CUSTOMER_NOT_ONBOARDED**: This operation requires the customer to have completed onboarding, but the customer has not been fully onboarded yet.\n\n**ONBOARDING_NOT_READY**: The onboarding submission cannot be completed because one or more required fields or documents are still missing, or a submitted value is not one of the accepted options for a closed-set field (e.g. a country-specific field like `companyClassification.legalStructure`). Each blocker is reported per field in `errors[]` with a `category` and, for closed-set fields, the accepted `allowedValues`.\n\n**CRYPTO_NOT_AVAILABLE_IN_JURISDICTION**: Crypto wallet provisioning is not available for customers in this jurisdiction. The customer's registered country is on Conduit's restricted-country list for crypto products.\n\n**NO_ELIGIBLE_PROVIDER**: No banking provider is currently available to service a virtual account for this customer in the requested currency. Every provider that could serve the customer's country and industry is either restricted, unable to hold that currency, or has been taken offline.\n\n**SUBJECT_REQUIREMENTS_NOT_AVAILABLE**: No requirements are available for the requested subject type in the current context — the country, provider, and organization conditions of the request — so it cannot be fulfilled. This does not assert that no requirements exist for the subject anywhere; it reports that none apply to this request. It is returned wherever a subject's requirements are read: onboarding discovery and submit, and feature-request discovery and submit. It is a deterministic state, not a transient outage: it does not resolve on retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"CUSTOMER_NOT_ONBOARDED","title":"Customer Not Onboarded","status":422,"detail":"This operation requires the customer to have completed onboarding, but the customer has not been fully onboarded yet.","resolution":"Complete the customer onboarding process before attempting this operation. See the onboarding guide for the required steps.","docs":"https://v2.docs.conduit.financial/errors/customer-not-onboarded","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Submit a feature request","tags":["Features"]}},"/customers/{customerId}/features/requirements":{"get":{"description":"Same response shape as `GET /v2/onboarding/requirements`, resolved as a delta against what the customer already has on file. `country` echoes the customer's registered country for a business, or the account holder's country of residence for an individual. Returns 422 `ONBOARDING_NOT_READY` if the customer has not completed onboarding yet.","operationId":"FeaturesController_resolveRequirements_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"type","required":true,"in":"query","description":"Feature whose requirements you want to discover.","schema":{"enum":["virtual_account","crypto_wallet","yield"],"type":"string"}},{"name":"asset","required":false,"in":"query","description":"Target asset for the feature. On a virtual account it narrows the requirements to the providers that can hold that currency. Ignored by feature types whose requirements do not depend on the asset. Omit it to resolve over every eligible provider.","schema":{"enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalRequirementsResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**CUSTOMER_NOT_FOUND**: No customer exists with the specified ID, or the customer belongs to a different organization.\n\n**NOT_FOUND**: The requested resource does not exist or you do not have access to it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CUSTOMER_NOT_FOUND","title":"Customer Not Found","status":404,"detail":"No customer exists with the specified ID, or the customer belongs to a different organization.","resolution":"Verify the customer ID is correct. Use the list customers endpoint to find valid customer IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#customer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"422":{"description":"**ONBOARDING_NOT_READY**: The onboarding submission cannot be completed because one or more required fields or documents are still missing, or a submitted value is not one of the accepted options for a closed-set field (e.g. a country-specific field like `companyClassification.legalStructure`). Each blocker is reported per field in `errors[]` with a `category` and, for closed-set fields, the accepted `allowedValues`.\n\n**NO_ELIGIBLE_PROVIDER**: No banking provider is currently available to service a virtual account for this customer in the requested currency. Every provider that could serve the customer's country and industry is either restricted, unable to hold that currency, or has been taken offline.\n\n**SUBJECT_REQUIREMENTS_NOT_AVAILABLE**: No requirements are available for the requested subject type in the current context — the country, provider, and organization conditions of the request — so it cannot be fulfilled. This does not assert that no requirements exist for the subject anywhere; it reports that none apply to this request. It is returned wherever a subject's requirements are read: onboarding discovery and submit, and feature-request discovery and submit. It is a deterministic state, not a transient outage: it does not resolve on retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"ONBOARDING_NOT_READY","title":"Onboarding Not Ready","status":422,"detail":"The onboarding submission cannot be completed because one or more required fields or documents are still missing, or a submitted value is not one of the accepted options for a closed-set field (e.g. a country-specific field like `companyClassification.legalStructure`). Each blocker is reported per field in `errors[]` with a `category` and, for closed-set fields, the accepted `allowedValues`.","resolution":"Use the onboarding requirements endpoint to check which fields and documents are required and which values each field accepts, then submit valid values before retrying.","docs":"https://v2.docs.conduit.financial/errors#onboarding-not-ready","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","errors":[{"pointer":"/businessInfo/taxId","detail":"Tax ID is required","category":"field"},{"pointer":"/documentIds","detail":"At least one document is required","category":"document"}]}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Discover feature requirements for a customer","tags":["Features"]}},"/onboarding":{"post":{"description":"Send the fields and documents that [Discover onboarding requirements](/api-reference/customer-onboarding/discover-onboarding-requirements-for-a-country) lists for the customer's `subjectType` and `country`: the country of `registeredAddress` for a business, or of the person's `address` for an individual. The examples show one body for a business and one for an individual. A `registeredAddress.country` that onboarding does not support returns `NOT_FOUND` with `supportedCountries`, the alpha-3 codes it supports.","operationId":"OnboardingController_submit_v2","parameters":[{"name":"Idempotency-Key","in":"header","description":"Caller-generated unique key that lets the server safely replay this request. The original response is returned for 30 days on any retry with the same key from the same organization, with the response header `Idempotency-Replayed: true`. Required on every state-changing money-moving or resource-creating POST.","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,128}$","minLength":1,"maxLength":128,"example":"01J7B3K2X9M8N5P6Q7R8S9T0V1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingSubmitDto"},"examples":{"business":{"summary":"Business","value":{"subjectType":"business","clientReferenceId":"aurora-robotics-001","businessInfo":{"legalName":"Aurora Robotics Inc.","businessEntityId":"4567890","taxId":"47-1234567","website":"https://aurorarobotics.example","companyPhone":"+12125550199"},"registeredAddress":{"country":"USA","addressLine1":"270 Park Ave","city":"New York","state":"US-NY","postalCode":"10017"},"operatingAddress":{"sameAsRegistered":true},"companyClassification":{"legalStructure":"Limited Liability Company (multi-member)","incorporationDate":"2020-01-15","primaryIndustry":"fintech_companies"},"businessActivity":{"businessActivitiesDescription":"Treasury management for robotics operations","accountPurpose":["Treasury Management"],"productsServices":["Digital Wallets / Stored Value"],"isRegulated":false,"hasRegulatedOrRestrictedActivities":false,"operatesOnBehalf":false,"countriesOfActivity":["USA"],"avgMonthlyVolume":"VOLUME_10K_50K","estimatedTransactionsPerMonth":"10-50","usesBlockchainWallets":false,"fundFlowDescription":"Revenue in, expenses out","sourceOfFunds":["Revenue/Sales"],"isGeneratingRevenue":true,"revenueCovers":"All operating expenses","hasInstitutionalInvestors":false,"financialRunway":"RUNWAY_GT_12M","cashOnHand":"$1M-$5M","isNonbankFinancialInstitution":false},"regulatoryHistory":{"hasUSBankAccount":true,"deniedBankAccount":false,"hasPoliticallyExposedPersons":false,"businessAdverseActions":["None"],"ownersDirectorsAdverseActions":["None"]},"ownership":{"persons":[{"roles":["BENEFICIAL_OWNER","CONTROLLING_PERSON","LEGAL_REPRESENTATIVE"],"firstName":"Aiko","lastName":"Tanaka","email":"aiko.tanaka@aurorarobotics.example","phoneNumber":"+12125550199","birthDate":"1988-06-15","nationality":"USA","taxIdType":"SSN","taxIdNumber":"123-45-6789","taxIdCountry":"USA","taxResidencyCountry":"USA","ownershipPercent":100,"sharesAllocated":1000,"address":{"country":"USA","addressLine1":"88 Greenwich St","city":"New York","state":"US-NY","postalCode":"10006"},"documentIds":["doc_034YPx9TqR2mVb7nKe4LsA"]}]},"relatedCompany":{"hasRelatedCompany":false},"certification":{"consentToElectronicSignatures":true,"termsAndConditions":{"accepted":true,"acceptedAt":"2026-01-15T09:30:00.000Z","acceptedByName":"Aiko Tanaka","isAuthenticated":true},"treasuryOnlyCertification":true},"documentIds":["doc_034YPwB8cN5rTk2jHq7mXe","doc_034YPwC1dL9sVf4gJr6nZu"]}},"individual":{"summary":"Individual","value":{"subjectType":"individual","clientReferenceId":"maya-lindqvist-001","ownership":{"persons":[{"roles":["ACCOUNT_HOLDER"],"firstName":"Maya","lastName":"Lindqvist","email":"maya.lindqvist@northbeam-mail.com","phoneNumber":"+14085550166","birthDate":"1985-04-12","identityDocumentExpiryDate":"2031-04-12","identityVerificationDate":"2026-10-01","nationality":"USA","taxIdType":"SSN","taxIdNumber":"524-45-6701","taxIdCountry":"USA","address":{"country":"USA","addressLine1":"845 Alma St","city":"Palo Alto","state":"US-CA","postalCode":"94301"},"documentIds":["doc_034YPy3HwQ8kZc1fMb5tRn","doc_034YPy4JxS2mAd6hNc9vTp"]}]},"activity":{"occupation":"Software Engineer","occupationCategory":"EMPLOYED_PROFESSIONAL","accountPurpose":["Investment"],"sourceOfFunds":["Salary"],"expectedMonthlyVolume":"VOLUME_10K_50K","expectedTransactionsPerMonth":"10-50","countriesOfActivity":["USA"]},"regulatoryHistory":{"isPoliticallyExposedPerson":false},"certification":{"termsAndConditions":{"accepted":true,"acceptedAt":"2026-01-15T09:30:00.000Z","acceptedByName":"Maya Lindqvist","isAuthenticated":true}}}}}}}},"responses":{"202":{"description":"The submitted onboarding application","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CustomerOnboardingApplicationDto"},{"$ref":"#/components/schemas/CustomerUpdateApplicationDto"},{"$ref":"#/components/schemas/VirtualAccountFeatureApplicationDto"},{"$ref":"#/components/schemas/CryptoWalletFeatureApplicationDto"},{"$ref":"#/components/schemas/YieldFeatureApplicationDto"}],"discriminator":{"propertyName":"type"}}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.\n\n**IDEMPOTENCY_KEY_REQUIRED**: This endpoint requires an Idempotency-Key header to prevent duplicate processing. Generate a unique key per logical request and resend the request.\n\n**IDEMPOTENCY_KEY_INVALID**: The Idempotency-Key header value did not match the required shape (1-128 characters, letters / digits / underscore / dot / colon / hyphen).\n\n**IDEMPOTENCY_BODY_TOO_NESTED**: The request body exceeds the maximum nesting depth allowed by the idempotency fingerprint hasher. Deeply-nested arrays or objects are rejected as a malformed payload.\n\n**INVALID_POLICY_SUBJECT**: The submitted catalog-backed classification key (e.g. `companyClassification.primaryIndustry`) is unknown, retired, not directly selectable, or does not match the field's expected subject kind. Valid options are surfaced by the discovery endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.\n\n**PRODUCTION_ACCESS_REQUIRED**: This organization cannot onboard customers in production yet. Conduit must approve the organization and make it active first. No application or draft was created.\n\n**CAPABILITY_SUSPENDED**: This account is currently restricted from this action: a money movement, or opening a new account, wallet, customer or payout destination.\n\n**IDENTITY_SHARE_NOT_ENABLED**: A person in the submission carries identityShare, but identity sharing is not available for your organization or for this identity provider. Identity sharing is only for an organization with KYC reliance.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**NOT_FOUND**: The requested resource does not exist or you do not have access to it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"NOT_FOUND","title":"Not Found","status":404,"detail":"The requested resource does not exist or you do not have access to it.","resolution":"Check that the resource ID in the URL is correct. The resource may have been deleted or may belong to a different account.","docs":"https://v2.docs.conduit.financial/errors#not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**IDEMPOTENCY_KEY_CONFLICT**: The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.\n\n**IDEMPOTENCY_KEY_REQUEST_IN_PROGRESS**: An earlier request with this idempotency key has not finished, or stopped before its result was recorded. In the second case it may or may not have completed its work.\n\n**ONBOARDING_ALREADY_SUBMITTED**: The onboarding application has already been submitted and cannot be submitted again.\n\n**CUSTOMER_ALREADY_ONBOARDED**: An approved customer already exists for this organization for the same person: the same tax identifier, or, for a person with no tax identifier, the same first name, last name, birth date and nationality.\n\n**CONFLICT**: The request conflicts with the current state of the resource. This usually means a duplicate or a state transition that is not allowed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"IDEMPOTENCY_KEY_CONFLICT","title":"Idempotency Key Conflict","status":409,"detail":"The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.","resolution":"Use a fresh idempotency key for the new request, or replay the original request unchanged.","docs":"https://v2.docs.conduit.financial/errors#idempotency-key-conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"422":{"description":"**ONBOARDING_NOT_READY**: The onboarding submission cannot be completed because one or more required fields or documents are still missing, or a submitted value is not one of the accepted options for a closed-set field (e.g. a country-specific field like `companyClassification.legalStructure`). Each blocker is reported per field in `errors[]` with a `category` and, for closed-set fields, the accepted `allowedValues`.\n\n**SUBJECT_REQUIREMENTS_NOT_AVAILABLE**: No requirements are available for the requested subject type in the current context — the country, provider, and organization conditions of the request — so it cannot be fulfilled. This does not assert that no requirements exist for the subject anywhere; it reports that none apply to this request. It is returned wherever a subject's requirements are read: onboarding discovery and submit, and feature-request discovery and submit. It is a deterministic state, not a transient outage: it does not resolve on retry.\n\n**NATIONALITY_NOT_SUPPORTED**: Conduit does not onboard an individual of the nationality the application declares, and an individual customer update cannot change the account holder to that nationality. The refusal is deterministic: it does not resolve on retry with the same nationality. Discovery for an individual lists only the nationalities Conduit accepts.\n\n**RESIDENCE_NOT_SUPPORTED**: Conduit does not onboard an individual resident in the country the application declares as the account holder's address, and an individual customer update cannot move the account holder to that country. The refusal is deterministic: it does not resolve on retry with the same country. Discovery for an individual answers 404 for that country and lists only the countries of residence Conduit accepts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"ONBOARDING_NOT_READY","title":"Onboarding Not Ready","status":422,"detail":"The onboarding submission cannot be completed because one or more required fields or documents are still missing, or a submitted value is not one of the accepted options for a closed-set field (e.g. a country-specific field like `companyClassification.legalStructure`). Each blocker is reported per field in `errors[]` with a `category` and, for closed-set fields, the accepted `allowedValues`.","resolution":"Use the onboarding requirements endpoint to check which fields and documents are required and which values each field accepts, then submit valid values before retrying.","docs":"https://v2.docs.conduit.financial/errors#onboarding-not-ready","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","errors":[{"pointer":"/businessInfo/taxId","detail":"Tax ID is required","category":"field"},{"pointer":"/documentIds","detail":"At least one document is required","category":"document"}]}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Submit a customer onboarding application","tags":["Customer Onboarding"]}},"/onboarding/requirements":{"get":{"description":"Returns `fields[]`, `documents[]`, and `individualRequirements[]` for the given `country` (alpha-2 or alpha-3, normalized server-side; response always echoes alpha-3). Each `fields[].pointer` names the place of the value in the `POST /v2/onboarding` body: `/businessInfo/taxId` is `businessInfo: { taxId }`. `documents[]` is a checklist of what to collect: upload each file with `POST /v2/documents` and send the returned id in the top-level `documentIds[]` of the submit body.","operationId":"OnboardingController_resolveDiscovery_v2","parameters":[{"name":"country","required":true,"in":"query","description":"ISO 3166-1 alpha-2 or alpha-3 country code for the customer's primary jurisdiction. For an individual subject this is the account holder's country of residence.","schema":{"type":"string"}},{"name":"subjectType","required":false,"in":"query","description":"The application subject. `business` (the default when omitted) onboards an entity; `individual` onboards a natural person, whose data goes under `ownership.persons[0]` and `activity`.","schema":{"enum":["business","individual"],"type":"string"}},{"name":"industry","required":false,"in":"query","description":"The `key` of a `GET /v2/onboarding/policy-subjects?axis=industry` entry, submitted at `companyClassification.primaryIndustry`. Adds any fields, documents and person requirements tied to that industry to the returned `fields[]`, `documents[]`, and `individualRequirements[]`. Omit to get the industry-agnostic response. A high-risk industry makes enhanced due diligence apply, and the response shows that only when it has the industry. A business subject only: an individual carries no company classification, so passing it with `subjectType=individual` is rejected.","schema":{"type":"string"}},{"name":"nationality","required":false,"in":"query","description":"ISO 3166-1 alpha-2 or alpha-3 country code for the account holder's nationality. Omit it to get the response for an account holder whose nationality is unknown: the identifier fields then follow the country of residence alone. An individual subject only: a business carries no nationality, so passing it with `subjectType=business` is rejected.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalRequirementsResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**INVALID_POLICY_SUBJECT**: The submitted catalog-backed classification key (e.g. `companyClassification.primaryIndustry`) is unknown, retired, not directly selectable, or does not match the field's expected subject kind. Valid options are surfaced by the discovery endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**NOT_FOUND**: The requested resource does not exist or you do not have access to it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"NOT_FOUND","title":"Not Found","status":404,"detail":"The requested resource does not exist or you do not have access to it.","resolution":"Check that the resource ID in the URL is correct. The resource may have been deleted or may belong to a different account.","docs":"https://v2.docs.conduit.financial/errors#not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"422":{"description":"**SUBJECT_REQUIREMENTS_NOT_AVAILABLE**: No requirements are available for the requested subject type in the current context — the country, provider, and organization conditions of the request — so it cannot be fulfilled. This does not assert that no requirements exist for the subject anywhere; it reports that none apply to this request. It is returned wherever a subject's requirements are read: onboarding discovery and submit, and feature-request discovery and submit. It is a deterministic state, not a transient outage: it does not resolve on retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"SUBJECT_REQUIREMENTS_NOT_AVAILABLE","title":"Subject Requirements Not Available","status":422,"detail":"No requirements are available for the requested subject type in the current context — the country, provider, and organization conditions of the request — so it cannot be fulfilled. This does not assert that no requirements exist for the subject anywhere; it reports that none apply to this request. It is returned wherever a subject's requirements are read: onboarding discovery and submit, and feature-request discovery and submit. It is a deterministic state, not a transient outage: it does not resolve on retry.","resolution":"This subject type is not available for your organization in this context at this time. Do not retry. Contact your Conduit account manager.","docs":"https://v2.docs.conduit.financial/errors#subject-requirements-not-available","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Discover onboarding requirements for a country","tags":["Customer Onboarding"]}},"/onboarding/policy-subjects":{"get":{"description":"Returns `{ key, label, description? }` entries for the requested `axis`, alphabetized by label with `OTHER` last. Only selectable, non-retired subjects are offered. `key` is the value to submit into `companyClassification.primaryIndustry` (axis=industry) or `businessActivity.regulatedOrRestrictedActivities` (axis=regulated_activity).","operationId":"OnboardingController_policySubjects_v2","parameters":[{"name":"axis","required":true,"in":"query","schema":{"enum":["industry","regulated_activity"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicySubjectOptionsResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Discover selectable policy-subject catalog options for an axis","tags":["Customer Onboarding"]}},"/markup/balances":{"get":{"description":"The markup Conduit has accrued to your organization and not yet paid, one entry per asset. An order accrues when it succeeds, in the order's source asset, so an on-ramp accrues fiat and an off-ramp accrues crypto. An order that fails accrues nothing. Balances are paid monthly against a statement.","operationId":"ClientMarkupController_balances_v2","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientMarkupBalancesResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Accrued markup balances","tags":["Markup"]}},"/markup/statements":{"get":{"description":"Your organization's client-markup statements, one per asset per calendar month. Each statement's total is paid monthly; a statement whose total falls under Conduit's configured minimum payout carries forward into the next period instead.","operationId":"ClientMarkupController_statements_v2","parameters":[{"name":"cursor","required":false,"in":"query","description":"Opaque cursor from a previous response. Send `meta.nextCursor` with `direction=forward` to read the next page, or `meta.previousCursor` with `direction=backward` to read the previous page.","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of results to return (1-100)","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"direction","required":false,"in":"query","description":"Which side of the cursor to read: `forward` returns the rows after it, `backward` the rows before it. Rows come back in list order either way. Without a cursor, `forward` starts at the first row and `backward` at the end of the list.","schema":{"enum":["forward","backward"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientMarkupStatementPageResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**INVALID_CURSOR**: The pagination cursor provided in the request is malformed or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Monthly markup statements","tags":["Markup"]}},"/markup/statement-lines":{"get":{"description":"One line per movement that accrued a margin to your organization, newest first, over conversions and fiat payouts alike. Each line names the movement and its id, the percentage and the flat amount you declared, the margin it accrued, the end customer and the time it succeeded. A line is negative when a receiving bank returned the payout: Conduit no longer holds your customer's money, so it no longer owes you that margin. `period` is the statement the line belongs to, and `late` says the movement succeeded outside that statement's month.","operationId":"ClientMarkupController_statementLines_v2","parameters":[{"name":"cursor","required":false,"in":"query","description":"Opaque cursor from a previous response. Send `meta.nextCursor` with `direction=forward` to read the next page, or `meta.previousCursor` with `direction=backward` to read the previous page.","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of results to return (1-100)","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"direction","required":false,"in":"query","description":"Which side of the cursor to read: `forward` returns the rows after it, `backward` the rows before it. Rows come back in list order either way. Without a cursor, `forward` starts at the first row and `backward` at the end of the list.","schema":{"enum":["forward","backward"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientMarkupStatementLinePageResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**INVALID_CURSOR**: The pagination cursor provided in the request is malformed or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Markup statement lines","tags":["Markup"]}},"/sandbox/customers/{customerId}/house-account":{"patch":{"description":"Sandbox-only. Marks (or unmarks) one of your business customers as a house account — the only source a `purpose: prefunding` payout accepts. Every sandbox organization is seeded with one house account already; use this to prefund from a customer you onboarded yourself. More than one customer can carry the marker. The marker alone is not enough to send from: the customer also needs its own active wallet on the destination chain, or its own USD account, or the payout is refused. On live, only Conduit can set it, so treat the marker itself as sandbox setup rather than something your integration writes. Returns the customer at its new state.","operationId":"HouseAccountSandboxController_setHouseAccount_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateHouseAccountDto"}}}},"responses":{"200":{"description":"The customer at its new house-account state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessCustomerResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.\n\n**IDEMPOTENCY_KEY_INVALID**: The Idempotency-Key header value did not match the required shape (1-128 characters, letters / digits / underscore / dot / colon / hyphen).\n\n**IDEMPOTENCY_BODY_TOO_NESTED**: The request body exceeds the maximum nesting depth allowed by the idempotency fingerprint hasher. Deeply-nested arrays or objects are rejected as a malformed payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**CUSTOMER_NOT_FOUND**: No customer exists with the specified ID, or the customer belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CUSTOMER_NOT_FOUND","title":"Customer Not Found","status":404,"detail":"No customer exists with the specified ID, or the customer belongs to a different organization.","resolution":"Verify the customer ID is correct. Use the list customers endpoint to find valid customer IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#customer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**HOUSE_ACCOUNT_BUSINESS_ONLY**: Only business customers can be marked as a house account. This customer is an individual.\n\n**SANDBOX_HOUSE_ACCOUNT_RESERVED_REFERENCE**: This customer's clientReferenceId is the one reserved for the house account your organization is given automatically, so its house-account state cannot be changed here.\n\n**IDEMPOTENCY_KEY_CONFLICT**: The idempotency key was previously used with a different request body, and that request succeeded or ended in a `5xx`. A `4xx` response does not bind the key. Idempotency keys are bound to the exact request shape — replays must match the original.\n\n**IDEMPOTENCY_KEY_REQUEST_IN_PROGRESS**: An earlier request with this idempotency key has not finished, or stopped before its result was recorded. In the second case it may or may not have completed its work.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"HOUSE_ACCOUNT_BUSINESS_ONLY","title":"House Account Business Only","status":409,"detail":"Only business customers can be marked as a house account. This customer is an individual.","resolution":"House-account marking applies only to business customers; individual customers are not eligible.","docs":"https://v2.docs.conduit.financial/errors#house-account-business-only","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Mark a sandbox customer as a house account","tags":["Sandbox"]}},"/sandbox/customers/{customerId}/simulate-reset-claim":{"post":{"description":"Sandbox-only. Removes the customer's wallet setup (every signer, every wallet, the crypto-wallet feature flag, and, for a custodial account, its server-side signing credentials) so a subsequent claim-non-custodial starts fresh. Works for both non-custodial and custodial accounts; resetting a custodial account is how a customer moves from custodial to non-custodial. Single-shot: a second call after a successful reset returns 404 PROVIDER_ACCOUNT_NOT_FOUND. Refuses with 409 CLAIM_RESET_BLOCKED if any row still references this customer's wallet setup. A reset cannot delete a record that still references this setup; on a non-custodial account, add or remove a signer on the roster to change who signs, which keeps the wallets and their deposit addresses. A transaction that references no wallet of this account does not block the reset. A custodial account that still holds a balance refuses with 409 CONFLICT: create a new customer instead.","operationId":"CustomersSandboxController_resetClaim_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimResetResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**PROVIDER_ACCOUNT_NOT_FOUND**: No provider account exists for the specified customer for the requested operation. Reset-claim reports it when there is no wallet account to reset; signing-quorum and recovery operations report it when the customer has no non-custodial provider account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"PROVIDER_ACCOUNT_NOT_FOUND","title":"Provider Account Not Found","status":404,"detail":"No provider account exists for the specified customer for the requested operation. Reset-claim reports it when there is no wallet account to reset; signing-quorum and recovery operations report it when the customer has no non-custodial provider account.","resolution":"Confirm the customer has an active wallet account before retrying. Signing-quorum and recovery operations require a non-custodial account specifically.","docs":"https://v2.docs.conduit.financial/errors#provider-account-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**CLAIM_RESET_BLOCKED**: The reset-claim endpoint cannot wipe the customer's wallet setup while any row still references it, for example a transaction, a deposit, a signature approval, or a record of a signing ceremony. Only rows that point at this account's wallet setup count: a transaction or deposit that references no wallet of this account never blocks a reset.\n\n**CONFLICT**: The request conflicts with the current state of the resource. This usually means a duplicate or a state transition that is not allowed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CLAIM_RESET_BLOCKED","title":"Claim Reset Blocked by Referencing Rows","status":409,"detail":"The reset-claim endpoint cannot wipe the customer's wallet setup while any row still references it, for example a transaction, a deposit, a signature approval, or a record of a signing ceremony. Only rows that point at this account's wallet setup count: a transaction or deposit that references no wallet of this account never blocks a reset.","resolution":"A reset cannot delete a record that still references this setup. On a non-custodial account, change who signs by adding or removing a signer on the roster instead: POST /v2/customers/{customerId}/wallet-signers and DELETE /v2/customers/{customerId}/wallet-signers/{signerId}. Those endpoints keep the wallets and their deposit addresses; a reset deletes the wallets, so a new claim mints new deposit addresses. A custodial wallet has no roster, so that lever does not apply to one.","docs":"https://v2.docs.conduit.financial/errors#claim-reset-blocked","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Reset a sandbox customer's wallet claim","tags":["Sandbox"]}},"/sandbox/wallets/registered-addresses/{id}/simulate/compliance-decision":{"post":{"description":"Resolves a registered address parked in pending screening (the 202 outcome of the register call), the customer-facing equivalent of the asynchronous screening resolution. `outcome: \"approve\"` registers the address and releases deposits from it that were waiting on registration; `outcome: \"reject\"` suspends it as sanctions-blocked — not reversible, and re-registration of the same address stays barred. The resolution is synchronous: the response carries the address at its final status. Replays: repeating the SAME decision after resolution returns 200 with the resource; a CONFLICTING decision returns 409 — a resolved verdict never flip-flops. In sandbox, park an address by registering one whose address starts with the review magic value `0x999`.","operationId":"RegisteredAddressesSimulateSandboxController_simulateComplianceDecision_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"wra_1A2b3C4d5E6f7G8h9I0jKl"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulateScreeningDecisionDtoClass"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisteredAddressResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**REGISTERED_ADDRESS_NOT_FOUND**: No registered address exists with the specified ID, or the registered address belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"REGISTERED_ADDRESS_NOT_FOUND","title":"Registered Address Not Found","status":404,"detail":"No registered address exists with the specified ID, or the registered address belongs to a different organization.","resolution":"Verify the registered address ID is correct. Use the list registered addresses endpoint to find valid IDs for the customer.","docs":"https://v2.docs.conduit.financial/errors#registered-address-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**REGISTERED_ADDRESS_INVALID_TRANSITION**: The requested status transition is not allowed for the registered address in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"REGISTERED_ADDRESS_INVALID_TRANSITION","title":"Registered Address Invalid Status Transition","status":409,"detail":"The requested status transition is not allowed for the registered address in its current state.","resolution":"Check the registered address's current status before performing status-change operations.","docs":"https://v2.docs.conduit.financial/errors#registered-address-invalid-transition","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Resolve a registered address parked in screening review (sandbox only)","tags":["Sandbox"]}},"/sandbox/applications/{id}/simulate/decision":{"post":{"description":"Drives an in-flight sandbox application to a deterministic compliance verdict. `outcome: \"approved\"` flips the application to APPROVED, activates the resource it produces (customer, organization, virtual account, wallet), and fires the matching `*.approved` event. `outcome: \"rejected\"` flips the application to REJECTED and fires the matching `*.rejected` event. The application response then carries `failureMessage`, `failureCode` (\"compliance_denied\" when the application carries a failed compliance verdict, otherwise \"rejected_by_ops\"), `resubmittable` (`false` only on a compliance denial), and, on a resubmittable customer onboarding rejection, `resubmissionGuidance` — the same fields production emits, except `reviewQuestions`, which only a Conduit review can attach, so either rejection branch can be exercised end to end here. On `rejected`, the optional body shapes the rejection: free-text `{ reason }` surfaces verbatim as the application's `failureMessage`, unless the application carries a failed compliance verdict, in which case the reason is suppressed and replaced with a generic contact-support message; structured `{ category, field? }` selects a canonical user-facing summary that appears on `failureMessage`. Categories: document_mismatch (optional `field`: tax_id, date_of_incorporation, business_name, business_entity_id, and for an individual application's own fields account_holder_birth_date, account_holder_address, account_holder_tax_id); data_sourcing_mismatch (optional `field`: business_entity_id, ubo_first_name, ubo_last_name, ubo_phone, ubo_email, ownership_list; on an individual application the `ubo_*` fields point at the account holder); compliance; generic (accepts an optional free-text `reason`). The `category` value is not case-sensitive. `category` is only applicable to KYB-pipeline applications; other application types yield 422 `REJECTION_CATEGORY_NOT_APPLICABLE`. An undecided application cancels on its own after 14 days. This call still decides it, including a CANCELLED one. The same outcome on an application that already carries it returns 200 with the application unchanged, so a call made after an automatic decision still succeeds. A call that overlaps the decision can return 409 `APPLICATION_INVALID_STATUS`. A different outcome on an APPROVED or REJECTED application returns 409 `APPLICATION_ALREADY_DECIDED`. The response is the application resource at its new state. Caller's API key must own the application.","operationId":"ApplicationsSandboxController_simulateDecision_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"app_1A2b3C4d5E6f7G8h9I0jKl"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulateApplicationDecisionDtoClass"}}}},"responses":{"200":{"description":"The application at its new terminal state","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CustomerOnboardingApplicationDto"},{"$ref":"#/components/schemas/CustomerUpdateApplicationDto"},{"$ref":"#/components/schemas/VirtualAccountFeatureApplicationDto"},{"$ref":"#/components/schemas/CryptoWalletFeatureApplicationDto"},{"$ref":"#/components/schemas/YieldFeatureApplicationDto"}],"discriminator":{"propertyName":"type"}}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.\n\n**CAPABILITY_SUSPENDED**: This account is currently restricted from this action: a money movement, or opening a new account, wallet, customer or payout destination.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**APPLICATION_NOT_FOUND**: No application exists with the specified ID, or the application belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"APPLICATION_NOT_FOUND","title":"Application Not Found","status":404,"detail":"No application exists with the specified ID, or the application belongs to a different organization.","resolution":"Verify the application ID is correct. Use the list applications endpoint to find valid application IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#application-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**APPLICATION_ALREADY_DECIDED**: The application has already reached a status where this action can't be applied again. Approved and rejected applications are always final. A cancelled application is usually final too — except on the sandbox `simulate/decision` endpoint, which can still decide one.\n\n**APPLICATION_INVALID_STATUS**: The requested operation cannot be performed because the application is not in the required status.\n\n**CONFLICT**: The request conflicts with the current state of the resource. This usually means a duplicate or a state transition that is not allowed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"APPLICATION_ALREADY_DECIDED","title":"Application Already Decided","status":409,"detail":"The application has already reached a status where this action can't be applied again. Approved and rejected applications are always final. A cancelled application is usually final too — except on the sandbox `simulate/decision` endpoint, which can still decide one.","resolution":"Create a new application instead of re-deciding one that's approved or rejected. A cancelled sandbox application is the exception — retry the sandbox `simulate/decision` call instead of creating a new one.","docs":"https://v2.docs.conduit.financial/errors#application-already-decided","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"422":{"description":"**REJECTION_CATEGORY_NOT_APPLICABLE**: The sandbox application-simulate `category` body field is only meaningful for KYB-pipeline applications. Other application types reject any `category` value.\n\n**CUSTOMER_MATERIALIZATION_INCOMPLETE_DATA**: An approved onboarding submission was missing data required to materialize the customer (an incomplete person, a missing incorporation date, or a missing registered address), so the customer record could not be materialized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"REJECTION_CATEGORY_NOT_APPLICABLE","title":"Rejection Category Not Applicable","status":422,"detail":"The sandbox application-simulate `category` body field is only meaningful for KYB-pipeline applications. Other application types reject any `category` value.","resolution":"Omit the `category` field (the service falls back to a generic sandbox-rejection sentinel) or call simulate/decision with `outcome: \"rejected\"` against a KYB-pipeline application.","docs":"https://v2.docs.conduit.financial/errors#rejection-category-not-applicable","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Simulate the compliance verdict on a sandbox application","tags":["Sandbox"]}},"/sandbox/payouts/{id}/simulate/settled":{"post":{"description":"Drives a sandbox fiat payout to a terminal settlement outcome (`completed` or `failed`), through sandbox settlement and ordinary settlement polling. `completed` requires a non-empty `utr` when supplied so `transaction.completed` carries a usable settlement reference. A payout whose simulated bank already settled the wire keeps the answer the bank reported, so `utr` and `reason` are ignored there. 404 if the payout is not a fiat WITHDRAWAL or does not belong to the org. Returns 422 `SANDBOX_TRANSACTION_NOT_FORCE_TERMINAL_READY` when the payout is parked at a review — call `POST /v2/sandbox/payouts/{id}/simulate-review-approve` first — or when the payout has no wire this call can settle: either none is submitted, or the submitted wire carries no provider reference yet. Retry once one is submitted and carries its reference. Returns 409 `CONFLICT` when the payout has already reached its final state, for example when its simulated bank completed the wire at submit. The outcome is always terminal: a payout whose simulated bank answered ambiguously stays in flight, and this call is what settles it.","operationId":"PayoutsSandboxController_simulateSettled_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"txn_1A2b3C4d5E6f7G8h9I0jKl"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulatePayoutSettledDtoClass"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicWithdrawalViewDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**PAYOUT_NOT_FOUND**: No payout exists with the specified ID, or the payout belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"PAYOUT_NOT_FOUND","title":"Payout Not Found","status":404,"detail":"No payout exists with the specified ID, or the payout belongs to a different organization.","resolution":"Verify the payout ID is correct. Use the list payouts endpoint to find valid payout IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#payout-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**CONFLICT**: The request conflicts with the current state of the resource. This usually means a duplicate or a state transition that is not allowed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CONFLICT","title":"Conflict","status":409,"detail":"The request conflicts with the current state of the resource. This usually means a duplicate or a state transition that is not allowed.","resolution":"Check the current state of the resource before retrying. If creating a resource, verify that a resource with the same unique fields does not already exist.","docs":"https://v2.docs.conduit.financial/errors#conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"422":{"description":"**SANDBOX_TRANSACTION_NOT_FORCE_TERMINAL_READY**: A sandbox simulate endpoint refused the request because the requested outcome is not viable in the transaction's current phase. Common cases: a payout parked at a review — a document gate or a compliance hold — receiving `simulate/terminal`, `simulate/settled` or `simulate/confirm` before that review is resolved; a fiat payout with no selected settlement route receiving `simulate/terminal` with `outcome: \"completed\"`; a fiat payout receiving `simulate/settled` before its wire has been submitted; an ONRAMP or OFFRAMP receiving `simulate/terminal` with `outcome: \"completed\"` before the funds have reached the destination; a payout in an in-progress phase with no transfer reference the simulation can safely drive yet, which leaves `simulate/terminal` and `simulate/confirm` nothing to act on.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"SANDBOX_TRANSACTION_NOT_FORCE_TERMINAL_READY","title":"Transaction Not Force-Terminal Ready","status":422,"detail":"A sandbox simulate endpoint refused the request because the requested outcome is not viable in the transaction's current phase. Common cases: a payout parked at a review — a document gate or a compliance hold — receiving `simulate/terminal`, `simulate/settled` or `simulate/confirm` before that review is resolved; a fiat payout with no selected settlement route receiving `simulate/terminal` with `outcome: \"completed\"`; a fiat payout receiving `simulate/settled` before its wire has been submitted; an ONRAMP or OFFRAMP receiving `simulate/terminal` with `outcome: \"completed\"` before the funds have reached the destination; a payout in an in-progress phase with no transfer reference the simulation can safely drive yet, which leaves `simulate/terminal` and `simulate/confirm` nothing to act on.","resolution":"If the payout is parked at a review, call `POST /v2/sandbox/payouts/{id}/simulate-review-approve` (or `simulate-review-reject`) first: while that review is open both outcomes are refused, and the one pair of levers resolves whichever review holds the payout. Past the gate, `simulate/terminal` callers wait for the transaction to advance to the next phase or call with `outcome: \"failed\"` to terminalize from the current phase. For `simulate/settled`, wait for the payout to submit its wire, then retry. When the payout is in an in-progress phase with no transfer reference the simulation can drive yet, retry the same call; a payout that keeps refusing needs a read of the transaction for its current state rather than an indefinite retry.","docs":"https://v2.docs.conduit.financial/errors#sandbox-transaction-not-force-terminal-ready","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Simulate fiat-rail settlement for a sandbox payout","tags":["Sandbox"]}},"/sandbox/payouts/{id}/simulate/counterparty-webhook":{"post":{"description":"Enqueues a synthetic Travel Rule counterparty status-change event for the payout's travel-rule transfer, exercising the same processing as a production counterparty webhook. 404 if no travel-rule transfer has been recorded for the payout yet. Returns the payout at its current state.","operationId":"PayoutsSandboxController_simulateCounterpartyWebhook_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"txn_1A2b3C4d5E6f7G8h9I0jKl"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulateCounterpartyWebhookDtoClass"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicWithdrawalViewDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**PAYOUT_NOT_FOUND**: No payout exists with the specified ID, or the payout belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"PAYOUT_NOT_FOUND","title":"Payout Not Found","status":404,"detail":"No payout exists with the specified ID, or the payout belongs to a different organization.","resolution":"Verify the payout ID is correct. Use the list payouts endpoint to find valid payout IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#payout-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Simulate a Travel Rule counterparty webhook for a sandbox payout","tags":["Sandbox"]}},"/sandbox/payouts/{id}/simulate-review-approve":{"post":{"description":"Releases every review that holds the payout, bypassing the real analyst queue: a supporting-document review, a compliance hold, or both. The payout does not report which reviews hold it, so this one call is the release lever for all of them, and `transaction.under_review` is the event that tells you a review opened. The call returns once the payout has left review, with the payout at that state; settlement can still take time. A payout that reads `stage: under_review` for something that is not a review — Conduit is choosing a payment route for it — is not this call's to resolve and answers 404; it resumes on its own. When the payout has not left review within the wait, the call answers 503 `SERVICE_UNAVAILABLE`: the release stands, so retry the call or read `GET /v2/payouts/{id}`. Replaying the release is safe: while the payout is still held the resolution is deduplicated, and once it is terminal the call returns the payout at that state without changing it. A review a verdict already stands on cannot be released — reject it instead (409), the same as in production. The call can also answer 409 once a Conduit analyst sent a request for information on the payout: Conduit then completes the review, and `simulate-review-reject` still ends the payout. 404 if the payout is not a WITHDRAWAL, does not belong to the org, or is not awaiting a review this call can resolve.","operationId":"PayoutsSandboxController_simulateReviewApprove_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"txn_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicWithdrawalViewDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**PAYOUT_NOT_FOUND**: No payout exists with the specified ID, or the payout belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"PAYOUT_NOT_FOUND","title":"Payout Not Found","status":404,"detail":"No payout exists with the specified ID, or the payout belongs to a different organization.","resolution":"Verify the payout ID is correct. Use the list payouts endpoint to find valid payout IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#payout-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**CONFLICT**: The request conflicts with the current state of the resource. This usually means a duplicate or a state transition that is not allowed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CONFLICT","title":"Conflict","status":409,"detail":"The request conflicts with the current state of the resource. This usually means a duplicate or a state transition that is not allowed.","resolution":"Check the current state of the resource before retrying. If creating a resource, verify that a resource with the same unique fields does not already exist.","docs":"https://v2.docs.conduit.financial/errors#conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"503":{"description":"**SERVICE_UNAVAILABLE**: The service is temporarily unable to handle your request due to maintenance or capacity constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"SERVICE_UNAVAILABLE","title":"Service Unavailable","status":503,"detail":"The service is temporarily unable to handle your request due to maintenance or capacity constraints.","resolution":"Retry the request using exponential backoff. When the response carries a `Retry-After` header (also in the `retryAfterSeconds` body field), wait at least that long before retrying. Check the status page for any ongoing incidents.","docs":"https://v2.docs.conduit.financial/errors#service-unavailable","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Release a sandbox payout held for review","tags":["Sandbox"]}},"/sandbox/payouts/{id}/simulate-review-reject":{"post":{"description":"Rejects whichever review holds the payout, bypassing the real analyst queue: a supporting-document review, or a compliance hold. The payout terminates as `failed` and reserved funds are returned. The payout does not report which review holds it, so this one call is the reject lever for every review. A payout that reads `stage: under_review` for something that is not a review — Conduit is choosing a payment route for it — is not this call's to resolve and answers 404. Rejecting a compliance hold is applied asynchronously, so the response body is the payout as of the call: poll `GET /v2/payouts/{id}` to observe the terminal state. Replaying the rejection is safe: while the payout is still held the resolution is deduplicated, and once it is terminal the call returns the payout at that state without changing it. 404 if the payout is not a WITHDRAWAL, does not belong to the org, or is not awaiting a review this call can resolve.","operationId":"PayoutsSandboxController_simulateReviewReject_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"txn_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicWithdrawalViewDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**PAYOUT_NOT_FOUND**: No payout exists with the specified ID, or the payout belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"PAYOUT_NOT_FOUND","title":"Payout Not Found","status":404,"detail":"No payout exists with the specified ID, or the payout belongs to a different organization.","resolution":"Verify the payout ID is correct. Use the list payouts endpoint to find valid payout IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#payout-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**CONFLICT**: The request conflicts with the current state of the resource. This usually means a duplicate or a state transition that is not allowed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CONFLICT","title":"Conflict","status":409,"detail":"The request conflicts with the current state of the resource. This usually means a duplicate or a state transition that is not allowed.","resolution":"Check the current state of the resource before retrying. If creating a resource, verify that a resource with the same unique fields does not already exist.","docs":"https://v2.docs.conduit.financial/errors#conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Reject a sandbox payout held for review","tags":["Sandbox"]}},"/sandbox/orders/{orderId}/deposits/simulate/compliance-decision":{"post":{"description":"Resolves the transfer into this order's funding address that is currently held for compliance review. The transfer is itself a readable `deposit` transaction on `GET /v2/transactions`. This lever takes the order id and applies the decision to the transfer the order is waiting on. `outcome: \"approve\"` clears the hold and the transfer goes on to fund the order; it is available only while the review is still pending, and returns 409 once the review has already rejected the transfer, matching production. `outcome: \"reject\"` holds the funds permanently — they neither fund the order nor go back — and the order goes unfunded and expires at its deadline. Returns 202: the resolution is applied asynchronously, and the body is the order as of the call, so poll `GET /v2/orders/{orderId}` for the outcome. Repeating the call while the review is still open is safe; once it has resolved, a repeat is a 409.","operationId":"OrdersDepositComplianceSandboxController_simulateFundingComplianceDecision_v2","parameters":[{"name":"orderId","required":true,"in":"path","schema":{"type":"string","example":"ord_1A2b3C4d5E6f7G8h9I0jKl"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulateComplianceDecisionDtoClass"}}}},"responses":{"202":{"description":"The order as of the compliance resolution","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderExternalResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**ORDER_NOT_FOUND**: No order exists with the specified ID, or the order has expired.\n\n**SANDBOX_ORDER_NO_PARKED_FUNDING**: No transfer into this order's funding address is currently held for compliance review. It may not have landed yet, it may have cleared on its own, or it may already have reached a terminal state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORDER_NOT_FOUND","title":"Order Not Found","status":404,"detail":"No order exists with the specified ID, or the order has expired.","resolution":"Verify the order ID is correct. Orders have a limited validity period; create a new order if the previous one has expired.","docs":"https://v2.docs.conduit.financial/errors#order-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**SANDBOX_ORDER_NOT_DEPOSIT_FUNDED**: The order names its own funding source, so it publishes no Conduit-managed funding address. Only a deposit-funded order has one to deposit to.\n\n**CONFLICT**: The request conflicts with the current state of the resource. This usually means a duplicate or a state transition that is not allowed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"SANDBOX_ORDER_NOT_DEPOSIT_FUNDED","title":"Order has no funding address to deposit to","status":409,"detail":"The order names its own funding source, so it publishes no Conduit-managed funding address. Only a deposit-funded order has one to deposit to.","resolution":"Fund the named source directly, or create the order without a `source` so it returns a funding address in `depositInstructions`.","docs":"https://v2.docs.conduit.financial/errors#sandbox-order-not-deposit-funded","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"503":{"description":"**SERVICE_UNAVAILABLE**: The service is temporarily unable to handle your request due to maintenance or capacity constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"SERVICE_UNAVAILABLE","title":"Service Unavailable","status":503,"detail":"The service is temporarily unable to handle your request due to maintenance or capacity constraints.","resolution":"Retry the request using exponential backoff. When the response carries a `Retry-After` header (also in the `retryAfterSeconds` body field), wait at least that long before retrying. Check the status page for any ongoing incidents.","docs":"https://v2.docs.conduit.financial/errors#service-unavailable","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Resolve a funding transfer held for compliance review (sandbox only)","tags":["Sandbox"]}},"/sandbox/orders/{id}/simulate/conversion-failed":{"post":{"description":"Forces the order's conversion to a failed terminal state. Safe to call at any point after order creation while the order is still pending: if the conversion is already running, it is driven to failed immediately; otherwise the failure is armed and applied as soon as the conversion starts. The order is driven to failed and a failure event is published. The optional `reason` body field is recorded as the note on the cancelled transfer; `order.failed.failureMessage` carries the standard text for the failure code, as in production. Returns 404 if the order is not found in the org. Replay (caller asks for `conversion-failed` against an already-terminal order) returns 200 with the order at its current state. Returns the order at its current state.","operationId":"OrdersSimulateConversionFailedSandboxController_simulateConversionFailed_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"ord_1A2b3C4d5E6f7G8h9I0jKl"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulateOrderConversionFailedDtoClass"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderExternalResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**ORDER_NOT_FOUND**: No order exists with the specified ID, or the order has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORDER_NOT_FOUND","title":"Order Not Found","status":404,"detail":"No order exists with the specified ID, or the order has expired.","resolution":"Verify the order ID is correct. Orders have a limited validity period; create a new order if the previous one has expired.","docs":"https://v2.docs.conduit.financial/errors#order-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Simulate an overall conversion failure for a sandbox order","tags":["Sandbox"]}},"/sandbox/transactions/{id}/simulate/terminal":{"post":{"description":"Requests a sandbox terminal transition for the transaction. `outcome` is `completed` or `failed`; the transaction type decides whether its current phase can accept that terminal outcome. For withdrawals, `outcome: \"failed\"` can run as soon as `POST /v2/payouts` accepts the payout: before any transfer is sent the payout is cancelled (`transaction.cancelled`), after that the transfer in flight fails (`transaction.failed`); `outcome: \"completed\"` requires a transfer in flight. While the payout is in an in-progress phase with no transfer reference this endpoint can safely drive, neither outcome is applied and it returns 422 `SANDBOX_TRANSACTION_NOT_FORCE_TERMINAL_READY`. A retry clears that once a reference is recorded; a payout that keeps refusing should be read with `GET /v2/transactions/{id}` for its current state rather than retried indefinitely. For deposits, `outcome: \"completed\"` supplies default sender information when needed and approves pending compliance review; an existing AML rejection cannot be overridden. `outcome: \"failed\"` freezes the received funds and reports the public `failed` status. For ONRAMP / OFFRAMP, `outcome: \"completed\"` requires the conversion to have delivered funds to the destination — before that it returns 422 `SANDBOX_TRANSACTION_NOT_FORCE_TERMINAL_READY`; use `outcome: \"failed\"` to exit an earlier state. The transaction publishes the matching public event (`transaction.completed` / `transaction.failed` for withdrawals and deposits; `order.succeeded` / `order.failed` for ONRAMP / OFFRAMP) with the same shape it would in production, and the matching terminal status is recorded atomically. `utr` (only meaningful on `completed`) is the synthetic settlement reference for withdrawals; it defaults to `sandbox-utr-<transactionId>` when omitted. A withdrawal whose simulated bank already settled the transfer keeps the answer the bank reported, so `utr` and `reason` are ignored there. Deposits retain their original detection reference. A delivered ONRAMP / OFFRAMP already carries the settlement reference its stand-in provider reported, so `utr` and `reason` are ignored there. `reason` defaults to a generic sandbox-driven sentinel. For withdrawals and conversions, `failed` releases reserved funds and reverses booked transfers. Supported types today: `WITHDRAWAL`, `ONRAMP`, `OFFRAMP`, `DEPOSIT`. Calls against `INTERNAL_TRANSFER` return 422 `SANDBOX_TRANSACTION_TYPE_NOT_SIMULATABLE`. Replays (caller asks `outcome: \"completed\"` against a transaction already settled `failed`, or vice versa) return the Transaction at its actual terminal state, with `status` reflecting reality, not the verb the caller used; a replay is a pure read and does not disturb settlement work still finishing (such as fee collection). A 200 response always carries the transaction at a terminal `status` (`completed` / `failed` / `cancelled`); the endpoint waits for the terminal state to be recorded before responding. In the rare case it has not been recorded within the wait budget, it returns 503 `SERVICE_UNAVAILABLE` rather than a still-processing body, so retry the read (`GET /v2/transactions/{id}`) or the call. A payout parked at a review cannot be forced to a terminal state while the review is open, so it returns 422 `SANDBOX_TRANSACTION_NOT_FORCE_TERMINAL_READY` — call `POST /v2/sandbox/payouts/{id}/simulate-review-approve` (or `simulate-review-reject`) first.","operationId":"TransactionsSimulateSandboxController_simulateTerminal_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"txn_1A2b3C4d5E6f7G8h9I0jKl"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulateTransactionTerminalDtoClass"}}}},"responses":{"200":{"description":"The transaction at its terminal state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicWithdrawalViewDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**TRANSACTION_NOT_FOUND**: No transaction exists with the specified ID, or the transaction belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"TRANSACTION_NOT_FOUND","title":"Transaction Not Found","status":404,"detail":"No transaction exists with the specified ID, or the transaction belongs to a different organization.","resolution":"Verify the transaction ID is correct. Use the list transactions endpoint to find valid IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#transaction-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**CONFLICT**: The request conflicts with the current state of the resource. This usually means a duplicate or a state transition that is not allowed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CONFLICT","title":"Conflict","status":409,"detail":"The request conflicts with the current state of the resource. This usually means a duplicate or a state transition that is not allowed.","resolution":"Check the current state of the resource before retrying. If creating a resource, verify that a resource with the same unique fields does not already exist.","docs":"https://v2.docs.conduit.financial/errors#conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"422":{"description":"**SANDBOX_TRANSACTION_TYPE_NOT_SIMULATABLE**: A sandbox simulate endpoint does not support this transaction type.\n\n**SANDBOX_TRANSACTION_NOT_FORCE_TERMINAL_READY**: A sandbox simulate endpoint refused the request because the requested outcome is not viable in the transaction's current phase. Common cases: a payout parked at a review — a document gate or a compliance hold — receiving `simulate/terminal`, `simulate/settled` or `simulate/confirm` before that review is resolved; a fiat payout with no selected settlement route receiving `simulate/terminal` with `outcome: \"completed\"`; a fiat payout receiving `simulate/settled` before its wire has been submitted; an ONRAMP or OFFRAMP receiving `simulate/terminal` with `outcome: \"completed\"` before the funds have reached the destination; a payout in an in-progress phase with no transfer reference the simulation can safely drive yet, which leaves `simulate/terminal` and `simulate/confirm` nothing to act on.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"SANDBOX_TRANSACTION_TYPE_NOT_SIMULATABLE","title":"Transaction Type Not Simulatable","status":422,"detail":"A sandbox simulate endpoint does not support this transaction type.","resolution":"`simulate/terminal` supports WITHDRAWAL, ONRAMP, OFFRAMP and DEPOSIT. `simulate/return` supports a fiat WITHDRAWAL and a fiat DEPOSIT that pay an outside bank and fund no order. Check the response body for the details.","docs":"https://v2.docs.conduit.financial/errors#sandbox-transaction-type-not-simulatable","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"503":{"description":"**SERVICE_UNAVAILABLE**: The service is temporarily unable to handle your request due to maintenance or capacity constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"SERVICE_UNAVAILABLE","title":"Service Unavailable","status":503,"detail":"The service is temporarily unable to handle your request due to maintenance or capacity constraints.","resolution":"Retry the request using exponential backoff. When the response carries a `Retry-After` header (also in the `retryAfterSeconds` body field), wait at least that long before retrying. Check the status page for any ongoing incidents.","docs":"https://v2.docs.conduit.financial/errors#service-unavailable","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Simulate a transaction terminal outcome (sandbox only)","tags":["Sandbox"]}},"/sandbox/transactions/{id}/simulate/return":{"post":{"description":"The simulated bank sends back a completed fiat payout or a completed fiat deposit of your organization, and Conduit resolves the return as it does in production: a payout refunds your virtual account, and a deposit reverses its credit. The transaction becomes `failed` with `failureCode: returned_by_sender`, `returnedAt`, `returnReason` and, when you send one, `returnCode`, and it publishes `transaction.failed`. The account statement shows the return line. `returnCode` is optional; Conduit classifies a Nacha code (ACH only) or an ISO 20022 code (Fedwire and SWIFT) into `returnReason`, and any other code reads `other`. `returnCode` shows a Nacha code only, as in production. Returns 404 `TRANSACTION_NOT_FOUND` for a transaction of another organization, 422 `SANDBOX_TRANSACTION_TYPE_NOT_SIMULATABLE` for a transaction that is not a fiat payout or a fiat deposit, 422 `SANDBOX_TRANSACTION_NOT_FORCE_TERMINAL_READY` for a transaction that is not `completed`, and 409 `CONFLICT` for a transaction that is already returned, so a repeated call changes nothing. When the transaction already has a bank return, the call resolves that return; a `returnCode` different from the recorded one, or a return that is already resolved, answers 409 `CONFLICT`. Send `{}` when there is no `returnCode`. Returns 503 `SERVICE_UNAVAILABLE` when the return is recorded but not processed in time; call again to finish it.","operationId":"TransactionsSimulateSandboxController_simulateReturn_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"txn_1A2b3C4d5E6f7G8h9I0jKl"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulateTransactionReturnDtoClass"}}}},"responses":{"200":{"description":"The returned transaction","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/PublicWithdrawalViewDto"},{"$ref":"#/components/schemas/PublicDepositViewDto"}],"discriminator":{"propertyName":"type","mapping":{"withdrawal":"#/components/schemas/PublicWithdrawalViewDto","deposit":"#/components/schemas/PublicDepositViewDto"}}}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**TRANSACTION_NOT_FOUND**: No transaction exists with the specified ID, or the transaction belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"TRANSACTION_NOT_FOUND","title":"Transaction Not Found","status":404,"detail":"No transaction exists with the specified ID, or the transaction belongs to a different organization.","resolution":"Verify the transaction ID is correct. Use the list transactions endpoint to find valid IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#transaction-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**CONFLICT**: The request conflicts with the current state of the resource. This usually means a duplicate or a state transition that is not allowed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CONFLICT","title":"Conflict","status":409,"detail":"The request conflicts with the current state of the resource. This usually means a duplicate or a state transition that is not allowed.","resolution":"Check the current state of the resource before retrying. If creating a resource, verify that a resource with the same unique fields does not already exist.","docs":"https://v2.docs.conduit.financial/errors#conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"422":{"description":"**SANDBOX_TRANSACTION_TYPE_NOT_SIMULATABLE**: A sandbox simulate endpoint does not support this transaction type.\n\n**SANDBOX_TRANSACTION_NOT_FORCE_TERMINAL_READY**: A sandbox simulate endpoint refused the request because the requested outcome is not viable in the transaction's current phase. Common cases: a payout parked at a review — a document gate or a compliance hold — receiving `simulate/terminal`, `simulate/settled` or `simulate/confirm` before that review is resolved; a fiat payout with no selected settlement route receiving `simulate/terminal` with `outcome: \"completed\"`; a fiat payout receiving `simulate/settled` before its wire has been submitted; an ONRAMP or OFFRAMP receiving `simulate/terminal` with `outcome: \"completed\"` before the funds have reached the destination; a payout in an in-progress phase with no transfer reference the simulation can safely drive yet, which leaves `simulate/terminal` and `simulate/confirm` nothing to act on.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"SANDBOX_TRANSACTION_TYPE_NOT_SIMULATABLE","title":"Transaction Type Not Simulatable","status":422,"detail":"A sandbox simulate endpoint does not support this transaction type.","resolution":"`simulate/terminal` supports WITHDRAWAL, ONRAMP, OFFRAMP and DEPOSIT. `simulate/return` supports a fiat WITHDRAWAL and a fiat DEPOSIT that pay an outside bank and fund no order. Check the response body for the details.","docs":"https://v2.docs.conduit.financial/errors#sandbox-transaction-type-not-simulatable","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"503":{"description":"**SERVICE_UNAVAILABLE**: The service is temporarily unable to handle your request due to maintenance or capacity constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"SERVICE_UNAVAILABLE","title":"Service Unavailable","status":503,"detail":"The service is temporarily unable to handle your request due to maintenance or capacity constraints.","resolution":"Retry the request using exponential backoff. When the response carries a `Retry-After` header (also in the `retryAfterSeconds` body field), wait at least that long before retrying. Check the status page for any ongoing incidents.","docs":"https://v2.docs.conduit.financial/errors#service-unavailable","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Return a completed transaction from the bank (sandbox only)","tags":["Sandbox"]}},"/sandbox/transactions/{id}/simulate/compliance-decision":{"post":{"description":"Resolves a transaction parked at the compliance review gate, the customer-facing equivalent of the operator compliance-decision action. `outcome: \"approve\"` clears the hold and the transaction resumes (a deposit credits, a withdrawal proceeds) — but only while the review is still open; once a verdict on it stands, `approve` returns 409 instead (a verdict can only be terminalized, matching production — `reject` remains the exit for that park). `approve` can also return 409 once a Conduit analyst sent a request for information on the transaction: Conduit then completes the review, and `reject` still ends it. The transaction does not report which review holds it. `outcome: \"reject\"` terminalizes the transaction using the transaction type's default compliance terminal — a deposit freezes, a withdrawal is rejected. Returns 202: the resolution is applied asynchronously; the response body is the transaction as-of the call, so poll the same id (`GET /v2/transactions/{id}`) to observe the terminal transition. While the transaction is still parked (PENDING), repeating the call is safe — the resolution is deduplicated. A compliance decision is a one-time action: once the transaction has resolved to a terminal state, a repeat returns 409 (already resolved) rather than re-applying, so a retried/duplicate call after resolution is a 409, not a 202 — poll `GET /v2/transactions/{id}` for the final state. Only DEPOSIT and WITHDRAWAL transactions can be resolved this way; other types return 400.","operationId":"TransactionsSimulateSandboxController_simulateComplianceDecision_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"txn_1A2b3C4d5E6f7G8h9I0jKl"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulateComplianceDecisionDtoClass"}}}},"responses":{"202":{"description":"The transaction as-of the compliance resolution","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicWithdrawalViewDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**TRANSACTION_NOT_FOUND**: No transaction exists with the specified ID, or the transaction belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"TRANSACTION_NOT_FOUND","title":"Transaction Not Found","status":404,"detail":"No transaction exists with the specified ID, or the transaction belongs to a different organization.","resolution":"Verify the transaction ID is correct. Use the list transactions endpoint to find valid IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#transaction-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**CONFLICT**: The request conflicts with the current state of the resource. This usually means a duplicate or a state transition that is not allowed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CONFLICT","title":"Conflict","status":409,"detail":"The request conflicts with the current state of the resource. This usually means a duplicate or a state transition that is not allowed.","resolution":"Check the current state of the resource before retrying. If creating a resource, verify that a resource with the same unique fields does not already exist.","docs":"https://v2.docs.conduit.financial/errors#conflict","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Resolve a transaction parked for compliance review (sandbox only)","tags":["Sandbox"]}},"/sandbox/customers/{customerId}/virtual-accounts/{virtualAccountId}/deposits/simulate":{"post":{"description":"Accepts a synthetic fiat deposit event for an ACTIVE sandbox virtual account. The event is processed exactly like a real provider deposit notification — asynchronously — so the response is an acknowledgement carrying the `externalReference` the deposit is detected under, not the deposit itself. Observe the deposit via the `transaction.created` webhook or `GET /v2/transactions?externalReference=…`. Re-using an `externalReference` re-acknowledges the existing deposit rather than creating a second one.","operationId":"DepositsSandboxController_simulateFiatDeposit_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}},{"name":"virtualAccountId","required":true,"in":"path","schema":{"type":"string","example":"vac_1A2b3C4d5E6f7G8h9I0jKl"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulateFiatDepositDtoClass"}}}},"responses":{"202":{"description":"Deposit accepted for ingestion; carries the reference to poll on","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulatedFiatDepositDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.\n\n**FEATURE_NOT_ENABLED**: Your account does not have access to this feature. Features are enabled on a per-account basis.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**VIRTUAL_ACCOUNT_NOT_FOUND**: No virtual account exists for the requested customer and asset, or the virtual account belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"VIRTUAL_ACCOUNT_NOT_FOUND","title":"Virtual Account Not Found","status":404,"detail":"No virtual account exists for the requested customer and asset, or the virtual account belongs to a different organization.","resolution":"Verify the customer has an active virtual account for the requested asset before creating a fiat payout.","docs":"https://v2.docs.conduit.financial/errors#virtual-account-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"422":{"description":"**VIRTUAL_ACCOUNT_NOT_ACTIVE**: The virtual account is not in active status and cannot accept deposits at this time.\n\n**VIRTUAL_ACCOUNT_ASSET_MISMATCH**: The asset or chain specified in the request does not match the virtual account's configured asset.\n\n**UNPROCESSABLE_ENTITY**: The request was well-formed but could not be processed due to semantic errors or business rule violations.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"VIRTUAL_ACCOUNT_NOT_ACTIVE","title":"Virtual Account Not Active","status":422,"detail":"The virtual account is not in active status and cannot accept deposits at this time.","resolution":"Check the virtual account's current status. Only active virtual accounts can receive simulated deposits.","docs":"https://v2.docs.conduit.financial/errors#virtual-account-not-active","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"503":{"description":"**RAIL_UNAVAILABLE**: No viable payment rail was available for the requested corridor. No funds were moved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"RAIL_UNAVAILABLE","title":"Payment rail unavailable","status":503,"detail":"No viable payment rail was available for the requested corridor. No funds were moved.","resolution":"Retry later. If the corridor is persistently unavailable, contact support.","docs":"https://v2.docs.conduit.financial/errors#rail-unavailable","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Simulate a fiat deposit to a sandbox virtual account","tags":["Sandbox"]}},"/sandbox/rfis/simulate":{"post":{"description":"Opens a request for information about one of your customers, as Conduit compliance does. The RFI is `open` with one round that carries your `ask`, every user of your organization is a recipient, and `rfi.published` fires. Read it with `GET /v2/rfis/{id}`, answer it with `POST /v2/rfis/{id}/responses`, and close it with `POST /v2/sandbox/rfis/{id}/simulate/resolve` or ask again with `POST /v2/sandbox/rfis/{id}/simulate/more-info`. `dueAt` is optional and is 48 hours from now when you do not send it. A customer that your organization does not own returns 404 `CUSTOMER_NOT_FOUND`.","operationId":"RfiSandboxController_simulateOpen_v2","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulateOpenRfiBodyDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientRfiDetailDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**CUSTOMER_NOT_FOUND**: No customer exists with the specified ID, or the customer belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CUSTOMER_NOT_FOUND","title":"Customer Not Found","status":404,"detail":"No customer exists with the specified ID, or the customer belongs to a different organization.","resolution":"Verify the customer ID is correct. Use the list customers endpoint to find valid customer IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#customer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Simulate a Conduit compliance RFI on a sandbox customer","tags":["Sandbox"]}},"/sandbox/rfis/{id}/simulate/resolve":{"post":{"description":"Resolves an `open` or `responded` RFI as Conduit compliance does. The RFI goes to `resolved` and `rfi.resolved` fires. Read the RFI or the payout to see the result. When the RFI asks for a payout document, `outcome: \"approved\"` releases the payout and `outcome: \"rejected\"` fails it. A `draft`, `resolved` or `cancelled` RFI returns 409 `RFI_INVALID_STATUS_TRANSITION`. An RFI that your organization does not own returns 404 `RFI_NOT_FOUND`.","operationId":"RfiSandboxController_simulateResolve_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"rfi_1A2b3C4d5E6f7G8h9I0jKl"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulateResolveRfiBodyDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientRfiDetailDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**RFI_NOT_FOUND**: No request-for-information exists with the specified ID, the RFI belongs to a different organization, or (on a client-facing surface) the RFI is still a draft and has never been published.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"RFI_NOT_FOUND","title":"RFI Not Found","status":404,"detail":"No request-for-information exists with the specified ID, the RFI belongs to a different organization, or (on a client-facing surface) the RFI is still a draft and has never been published.","resolution":"Verify the RFI ID is correct. Draft RFIs are never visible on client-facing surfaces — wait until the RFI is published.","docs":"https://v2.docs.conduit.financial/errors#rfi-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**RFI_INVALID_STATUS_TRANSITION**: The requested action cannot be performed from the RFI's current status. Each RFI action (publish, request-more-info, resolve, cancel, patch) is only valid from a specific set of prior statuses. Request-more-info also returns it when the round it names is no longer the RFI's current round.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"RFI_INVALID_STATUS_TRANSITION","title":"RFI Invalid Status Transition","status":409,"detail":"The requested action cannot be performed from the RFI's current status. Each RFI action (publish, request-more-info, resolve, cancel, patch) is only valid from a specific set of prior statuses. Request-more-info also returns it when the round it names is no longer the RFI's current round.","resolution":"Re-fetch the RFI to check its current status and refer to the documented lifecycle transitions before retrying.","docs":"https://v2.docs.conduit.financial/errors#rfi-invalid-status-transition","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Simulate the resolution of a sandbox RFI","tags":["Sandbox"]}},"/sandbox/rfis/{id}/simulate/more-info":{"post":{"description":"Asks again on an `open` or `responded` RFI as Conduit compliance does. The current round closes, a new round opens with the `ask`, the RFI goes to `open`, and `rfi.more_info_requested` fires. `dueAt` is optional and is 7 days from now when you do not send it. A reopened RFI shows the same way: status `open`, a new round, and `rfi.more_info_requested`. A `draft`, `resolved` or `cancelled` RFI returns 409 `RFI_INVALID_STATUS_TRANSITION`. An RFI that your organization does not own returns 404 `RFI_NOT_FOUND`.","operationId":"RfiSandboxController_simulateMoreInfo_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"rfi_1A2b3C4d5E6f7G8h9I0jKl"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulateMoreInfoRfiBodyDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientRfiDetailDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**RFI_NOT_FOUND**: No request-for-information exists with the specified ID, the RFI belongs to a different organization, or (on a client-facing surface) the RFI is still a draft and has never been published.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"RFI_NOT_FOUND","title":"RFI Not Found","status":404,"detail":"No request-for-information exists with the specified ID, the RFI belongs to a different organization, or (on a client-facing surface) the RFI is still a draft and has never been published.","resolution":"Verify the RFI ID is correct. Draft RFIs are never visible on client-facing surfaces — wait until the RFI is published.","docs":"https://v2.docs.conduit.financial/errors#rfi-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**RFI_INVALID_STATUS_TRANSITION**: The requested action cannot be performed from the RFI's current status. Each RFI action (publish, request-more-info, resolve, cancel, patch) is only valid from a specific set of prior statuses. Request-more-info also returns it when the round it names is no longer the RFI's current round.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"RFI_INVALID_STATUS_TRANSITION","title":"RFI Invalid Status Transition","status":409,"detail":"The requested action cannot be performed from the RFI's current status. Each RFI action (publish, request-more-info, resolve, cancel, patch) is only valid from a specific set of prior statuses. Request-more-info also returns it when the round it names is no longer the RFI's current round.","resolution":"Re-fetch the RFI to check its current status and refer to the documented lifecycle transitions before retrying.","docs":"https://v2.docs.conduit.financial/errors#rfi-invalid-status-transition","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Simulate a request for more information on a sandbox RFI","tags":["Sandbox"]}},"/sandbox/whitelist-recipients/{id}/simulate-approve":{"post":{"description":"Sandbox-only. Moves PENDING_REVIEW directly to REGISTERED and fires whitelist_recipient.registered.","operationId":"WhitelistRecipientsSandboxController_simulateApprove_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"wlr_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhitelistRecipientResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**WHITELIST_RECIPIENT_NOT_FOUND**: No whitelist recipient with this id exists for your organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"WHITELIST_RECIPIENT_NOT_FOUND","title":"Whitelist Recipient Not Found","status":404,"detail":"No whitelist recipient with this id exists for your organization.","resolution":"Check the id; list entries via GET /v2/customers/{customerId}/whitelist-recipients.","docs":"https://v2.docs.conduit.financial/errors#whitelist-recipient-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**WHITELIST_INVALID_TRANSITION**: The whitelist entry is not in a status that allows this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"WHITELIST_INVALID_TRANSITION","title":"Invalid Whitelist Transition","status":409,"detail":"The whitelist entry is not in a status that allows this action.","resolution":"Fetch the entry to inspect its current status.","docs":"https://v2.docs.conduit.financial/errors#whitelist-invalid-transition","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Simulate compliance approval of a pending whitelist registration","tags":["Sandbox"]}},"/sandbox/whitelist-recipients/{id}/simulate-reject":{"post":{"description":"Sandbox-only. Moves PENDING_REVIEW to REJECTED and fires whitelist_recipient.rejected.","operationId":"WhitelistRecipientsSandboxController_simulateReject_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"wlr_1A2b3C4d5E6f7G8h9I0jKl"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhitelistRecipientResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**WHITELIST_RECIPIENT_NOT_FOUND**: No whitelist recipient with this id exists for your organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"WHITELIST_RECIPIENT_NOT_FOUND","title":"Whitelist Recipient Not Found","status":404,"detail":"No whitelist recipient with this id exists for your organization.","resolution":"Check the id; list entries via GET /v2/customers/{customerId}/whitelist-recipients.","docs":"https://v2.docs.conduit.financial/errors#whitelist-recipient-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"409":{"description":"**WHITELIST_INVALID_TRANSITION**: The whitelist entry is not in a status that allows this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"WHITELIST_INVALID_TRANSITION","title":"Invalid Whitelist Transition","status":409,"detail":"The whitelist entry is not in a status that allows this action.","resolution":"Fetch the entry to inspect its current status.","docs":"https://v2.docs.conduit.financial/errors#whitelist-invalid-transition","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Simulate compliance rejection of a pending whitelist registration","tags":["Sandbox"]}},"/sandbox/orders/{id}/simulate/rate-lock-expired":{"post":{"description":"Expires the order's rate lock now. The order cancels within seconds with `order.cancelled` and `reason: expired`. There is no fixed delay: wait for the webhook, or poll the order. Use to test rate-lock-expiry handling without waiting for the live lock window. Returns the order at its current state.","operationId":"OrdersSimulateRateLockExpiredSandboxController_simulateRateLockExpired_v2","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","example":"ord_1A2b3C4d5E6f7G8h9I0jKl"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulateOrderRateLockExpiredDtoClass"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderExternalResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**ORDER_NOT_FOUND**: No order exists with the specified ID, or the order has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORDER_NOT_FOUND","title":"Order Not Found","status":404,"detail":"No order exists with the specified ID, or the order has expired.","resolution":"Verify the order ID is correct. Orders have a limited validity period; create a new order if the previous one has expired.","docs":"https://v2.docs.conduit.financial/errors#order-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Force a sandbox order's rate lock to expire immediately","tags":["Sandbox"]}},"/sandbox/customers/{customerId}/simulate/restrict":{"post":{"description":"Restricts one of your customers as Conduit compliance does. A full freeze or a withdrawal suspension fires `customer.restricted`. A conversion restriction fires no event. A money movement that the restriction blocks returns 403 `CAPABILITY_SUSPENDED`. A full freeze also refuses a new virtual account, wallet, payout destination or wallet signer for the customer with the same 403. A restriction of the same type that is already active is kept, and no second event fires. Lift it with `POST /v2/sandbox/customers/{customerId}/simulate/lift-restriction`. A customer that your organization does not own returns 404 `CUSTOMER_NOT_FOUND`.","operationId":"SubjectRestrictionsSandboxController_simulateRestrict_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulateCustomerRestrictionBodyDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SandboxCustomerRestrictionsResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**CUSTOMER_NOT_FOUND**: No customer exists with the specified ID, or the customer belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CUSTOMER_NOT_FOUND","title":"Customer Not Found","status":404,"detail":"No customer exists with the specified ID, or the customer belongs to a different organization.","resolution":"Verify the customer ID is correct. Use the list customers endpoint to find valid customer IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#customer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Simulate a Conduit restriction on a sandbox customer","tags":["Sandbox"]}},"/sandbox/customers/{customerId}/simulate/lift-restriction":{"post":{"description":"Lifts every active restriction of the given type on one of your customers, as Conduit compliance does. The money movements it blocked are allowed again. No event fires. A restriction that Conduit's country policy owns is not lifted and stays in `activeRestrictions`. A customer with no restriction of that type returns 200 with its current restrictions. A customer that your organization does not own returns 404 `CUSTOMER_NOT_FOUND`.","operationId":"SubjectRestrictionsSandboxController_simulateLift_v2","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"string","example":"cus_1A2b3C4d5E6f7G8h9I0jKl"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulateCustomerRestrictionBodyDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SandboxCustomerRestrictionsResponseDto"}}}},"400":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**MALFORMED_JSON**: The request body could not be parsed as JSON. Bodies declared as 'application/json' — and bodies with no Content-Type header, which are assumed to be JSON — must contain syntactically valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorDto"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"401":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"403":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.\n\n**API_KEY_READ_ONLY**: This API key has read-only access and cannot perform write operations. Read-only keys may make read requests (GET, HEAD, OPTIONS) only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"404":{"description":"**CUSTOMER_NOT_FOUND**: No customer exists with the specified ID, or the customer belongs to a different organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"CUSTOMER_NOT_FOUND","title":"Customer Not Found","status":404,"detail":"No customer exists with the specified ID, or the customer belongs to a different organization.","resolution":"Verify the customer ID is correct. Use the list customers endpoint to find valid customer IDs for your organization.","docs":"https://v2.docs.conduit.financial/errors#customer-not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"415":{"description":"**UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"UNSUPPORTED_MEDIA_TYPE","title":"Unsupported Media Type","status":415,"detail":"The request carries a body with a Content-Type this endpoint cannot parse. JSON endpoints accept 'application/json'; a body with no Content-Type header at all is assumed to be JSON. File-upload endpoints accept only 'multipart/form-data' — JSON or undeclared bodies are rejected there.","resolution":"Send the request body with the 'Content-Type: application/json' header. For file uploads, use 'Content-Type: multipart/form-data' — upload endpoints accept no other body type.","docs":"https://v2.docs.conduit.financial/errors#unsupported-media-type","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}},"429":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitedErrorDto"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}}},"500":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetailDto"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}}}},"summary":"Simulate a lifted restriction on a sandbox customer","tags":["Sandbox"]}}},"info":{"title":"Conduit Sandbox API","description":"**Sandbox API** — clients integrate against this surface to exercise happy and unhappy paths without consuming real KYC/PSP credits or moving real money. Customer KYC, banking partners, and crypto custody are stubbed; org-level KYB runs against real providers. Simulation endpoints under `/v2/sandbox/*` drive specific scenarios.\n\nInternal and portal endpoints are excluded from this spec.","version":"2.0","contact":{}},"tags":[{"name":"Customers"},{"name":"Registered Addresses"},{"name":"Wallets"},{"name":"Wallet Signers"},{"name":"Signing Quorum"},{"name":"Virtual Accounts"},{"name":"Applications"},{"name":"Verifications"},{"name":"Signing Requests"},{"name":"Transactions"},{"name":"Payouts"},{"name":"RFIs"},{"name":"Documents"},{"name":"Payee checks"},{"name":"Whitelist Recipients"},{"name":"Orders"},{"name":"Asset Chain Pairs"},{"name":"Quotes"},{"name":"Webhook Endpoints"},{"name":"Webhook Deliveries"},{"name":"Webhook Event Types"},{"name":"Events"},{"name":"Features"},{"name":"Customer Onboarding"},{"name":"Markup"},{"name":"Sandbox"}],"servers":[{"url":"https://api.sandbox.conduit.financial/v2","description":"Sandbox"},{"url":"https://api.conduit.financial/v2","description":"Production"}],"components":{"securitySchemes":{"api-key":{"type":"apiKey","in":"header","name":"x-api-key"}},"schemas":{"CustomerOnboardingApplicationDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^app_[0-9A-Za-z]{22}$","description":"Unique application identifier"},"status":{"type":"string","enum":["pending","processing","approved","rejected","cancelled"],"description":"Current lifecycle status of the application","example":"pending"},"clientReferenceId":{"description":"Client-provided identifier for cross-referencing. Omitted when the client did not supply one. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces.","example":"ext-12345","type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$"},"submittedAt":{"description":"Timestamp when the application was submitted for review. Omitted while still in progress.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the application was created","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp when the application was last modified","example":"2026-01-15T09:30:00.000Z"},"failureCode":{"description":"Machine-readable failure code on rejected applications. Omitted on non-rejected applications.","type":"string","enum":["rejected_by_ops","compliance_denied"]},"failureMessage":{"description":"Customer-facing failure message accompanying `failureCode`. Omitted on non-rejected applications.","type":"string"},"resubmittable":{"description":"Whether a corrected application will be considered. `true`: correct the data and submit a fresh application. `false`: the decision is final, do not resubmit. Omitted on non-rejected applications.","type":"boolean"},"type":{"type":"string","enum":["customer_onboarding"]},"reviewStage":{"description":"Where the review of a `processing` application stands. `automated`: Conduit's automated review is still running. `operator`: the automated review finished without a decision, or Conduit has an open request for information about the application. A Conduit operator owns the next step unless the request needs your answer. `operator` means no automated decision will come; expect a decision or a request for information from Conduit. Present only while `status` is `processing`.","type":"string","enum":["automated","operator"]},"customerId":{"description":"Customer this onboarding application produced. Omitted while the application is still being reviewed; present after approval persists the customer row.","type":"string","pattern":"^cus_[0-9A-Za-z]{22}$"},"persons":{"description":"People declared on the submission, in submit order: the owners, controlling persons and legal representatives of a business, or the one account holder of an individual. Omitted before the application carries a submission.","type":"array","items":{"type":"object","properties":{"referenceId":{"type":"string","description":"Server-assigned stable reference for this person. Use it to fetch the person's identity-verification link (POST /v2/applications/{applicationId}/persons/{referenceId}/idv-link) and to correlate `idv_link.created` webhook events."},"name":{"type":"string","description":"Person's name as submitted."}},"required":["referenceId","name"]}},"resubmissionGuidance":{"description":"Integrator guidance for the resubmission. Present only on a rejected application whose `resubmittable` is `true`. A fixed line — display or log it, do not parse it. Omitted on non-rejected applications and on final rejections.","type":"string"},"reviewQuestions":{"description":"Questions to address in the resubmission. Present only on a rejected application whose `resubmittable` is `true` when Conduit asks for more information. Omitted otherwise.","type":"array","items":{"type":"string"}}},"required":["id","status","createdAt","updatedAt","type"]},"CustomerUpdateApplicationDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^app_[0-9A-Za-z]{22}$","description":"Unique application identifier"},"status":{"type":"string","enum":["pending","processing","approved","rejected","cancelled"],"description":"Current lifecycle status of the application","example":"pending"},"clientReferenceId":{"description":"Client-provided identifier for cross-referencing. Omitted when the client did not supply one. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces.","example":"ext-12345","type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$"},"submittedAt":{"description":"Timestamp when the application was submitted for review. Omitted while still in progress.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the application was created","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp when the application was last modified","example":"2026-01-15T09:30:00.000Z"},"failureCode":{"description":"Machine-readable failure code on rejected applications. Omitted on non-rejected applications.","type":"string","enum":["rejected_by_ops","compliance_denied"]},"failureMessage":{"description":"Customer-facing failure message accompanying `failureCode`. Omitted on non-rejected applications.","type":"string"},"resubmittable":{"description":"Whether a corrected application will be considered. `true`: correct the data and submit a fresh application. `false`: the decision is final, do not resubmit. Omitted on non-rejected applications.","type":"boolean"},"type":{"type":"string","enum":["customer_update"]},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","description":"Customer this update application belongs to."}},"required":["id","status","createdAt","updatedAt","type","customerId"]},"VirtualAccountFeatureApplicationDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^app_[0-9A-Za-z]{22}$","description":"Unique application identifier"},"status":{"type":"string","enum":["pending","processing","approved","rejected","cancelled"],"description":"Current lifecycle status of the application","example":"pending"},"clientReferenceId":{"description":"Client-provided identifier for cross-referencing. Omitted when the client did not supply one. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces.","example":"ext-12345","type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$"},"submittedAt":{"description":"Timestamp when the application was submitted for review. Omitted while still in progress.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the application was created","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp when the application was last modified","example":"2026-01-15T09:30:00.000Z"},"failureCode":{"description":"Machine-readable failure code on rejected applications. Omitted on non-rejected applications.","type":"string","enum":["rejected_by_ops","compliance_denied"]},"failureMessage":{"description":"Customer-facing failure message accompanying `failureCode`. Omitted on non-rejected applications.","type":"string"},"resubmittable":{"description":"Whether a corrected application will be considered. `true`: correct the data and submit a fresh application. `false`: the decision is final, do not resubmit. Omitted on non-rejected applications.","type":"boolean"},"type":{"type":"string","enum":["virtual_account"]},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","description":"Customer this virtual-account application belongs to."},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code identifier","example":"USD"},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"description":"Blockchain network. `null`/omitted for fiat assets.","nullable":true}},"required":["code"],"description":"Target asset for this virtual-account feature application."}},"required":["id","status","createdAt","updatedAt","type","customerId","asset"]},"CryptoWalletFeatureApplicationDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^app_[0-9A-Za-z]{22}$","description":"Unique application identifier"},"status":{"type":"string","enum":["pending","processing","approved","rejected","cancelled"],"description":"Current lifecycle status of the application","example":"pending"},"clientReferenceId":{"description":"Client-provided identifier for cross-referencing. Omitted when the client did not supply one. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces.","example":"ext-12345","type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$"},"submittedAt":{"description":"Timestamp when the application was submitted for review. Omitted while still in progress.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the application was created","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp when the application was last modified","example":"2026-01-15T09:30:00.000Z"},"failureCode":{"description":"Machine-readable failure code on rejected applications. Omitted on non-rejected applications.","type":"string","enum":["rejected_by_ops","compliance_denied"]},"failureMessage":{"description":"Customer-facing failure message accompanying `failureCode`. Omitted on non-rejected applications.","type":"string"},"resubmittable":{"description":"Whether a corrected application will be considered. `true`: correct the data and submit a fresh application. `false`: the decision is final, do not resubmit. Omitted on non-rejected applications.","type":"boolean"},"type":{"type":"string","enum":["crypto_wallet"]},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","description":"Customer this crypto-wallet application belongs to."}},"required":["id","status","createdAt","updatedAt","type","customerId"]},"YieldFeatureApplicationDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^app_[0-9A-Za-z]{22}$","description":"Unique application identifier"},"status":{"type":"string","enum":["pending","processing","approved","rejected","cancelled"],"description":"Current lifecycle status of the application","example":"pending"},"clientReferenceId":{"description":"Client-provided identifier for cross-referencing. Omitted when the client did not supply one. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces.","example":"ext-12345","type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$"},"submittedAt":{"description":"Timestamp when the application was submitted for review. Omitted while still in progress.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the application was created","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp when the application was last modified","example":"2026-01-15T09:30:00.000Z"},"failureCode":{"description":"Machine-readable failure code on rejected applications. Omitted on non-rejected applications.","type":"string","enum":["rejected_by_ops","compliance_denied"]},"failureMessage":{"description":"Customer-facing failure message accompanying `failureCode`. Omitted on non-rejected applications.","type":"string"},"resubmittable":{"description":"Whether a corrected application will be considered. `true`: correct the data and submit a fresh application. `false`: the decision is final, do not resubmit. Omitted on non-rejected applications.","type":"boolean"},"type":{"type":"string","enum":["yield"]},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","description":"Customer this yield application belongs to."},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code identifier","example":"USD"},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"description":"Blockchain network. `null`/omitted for fiat assets.","nullable":true}},"required":["code"],"description":"Asset this customer asked to earn yield on. One approval covers the asset on every chain Conduit supports for it, so `chain` is omitted."}},"required":["id","status","createdAt","updatedAt","type","customerId","asset"]},"BusinessCustomerResponseDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","description":"Unique customer identifier"},"clientReferenceId":{"description":"Client-provided external identifier for cross-referencing. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces.","example":"client-cus-001","type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$"},"applicationId":{"type":"string","pattern":"^app_[0-9A-Za-z]{22}$","description":"ID of the onboarding application that created this customer."},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the customer was created","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp when the customer was last modified","example":"2026-01-15T09:30:00.000Z"},"features":{"type":"array","items":{"type":"object","properties":{"feature":{"description":"Feature identifier","type":"string","enum":["virtual_account","crypto_wallet"]},"isActive":{"type":"boolean","description":"Whether this feature is currently active for the customer","example":true}},"required":["feature","isActive"]},"description":"List of features enabled for this customer"},"isHouseAccount":{"type":"boolean","description":"Whether this customer is the organization's own house account rather than an external customer. Read-only on live; on sandbox, set it with `PATCH /v2/sandbox/customers/{customerId}/house-account`.","example":false},"signingMode":{"description":"Effective signing mode for this customer right now: the per-customer override if one exists, else the organization setting, else the default. For a customer with no wallet claim yet, this is the value `claim-non-custodial` would freeze and the roster shape it accepts. For a customer that already claimed, the claimed wallet keeps the mode it froze at claim time, even if this value changes afterward. This field may be absent temporarily while the API is being updated.","type":"string","enum":["passkey_required","programmatic","programmatic_unattended"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","description":"Registered legal name of the business","example":"Acme Payments Inc."},"tradeName":{"description":"Doing-business-as name. Omitted if same as legal name.","example":"Acme Pay","type":"string"},"registrationNumber":{"description":"Business registration or incorporation number","example":"12345678","type":"string"},"taxId":{"type":"string","description":"Government-issued tax identifier (e.g. EIN for US businesses). A US EIN captured from this release on is returned as nine digits without hyphens; an EIN stored earlier keeps the form it was stored in.","example":"123456789"},"registeredAddress":{"type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"],"description":"Registered office address. Same nested shape the onboarding request submits, so it round-trips field-for-field."},"dateOfIncorporation":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","description":"Date the business was incorporated (YYYY-MM-DD)","example":"2020-03-15"},"website":{"description":"Business website URL","example":"https://acmepay.com","type":"string"},"legalStructure":{"type":"string","description":"Legal structure of the business — the local jurisdiction name the customer declared at onboarding (e.g. 'Sociedade Limitada', 'GmbH', 'C-Corporation'). Free-form string; the available options are jurisdiction-specific and surfaced by the requirements discovery endpoint.","example":"Sociedade Limitada"},"primaryIndustry":{"description":"Attested primary industry. The accepted values change over time, so read the current set from `GET /v2/onboarding/policy-subjects?axis=industry`.","example":"fintech_companies","type":"string"},"primaryIndustryLabel":{"description":"Display name of the attested primary industry, as it appears in the current policy catalog. Omitted when the business attested no industry, or when the key has no catalog row.","example":"Fintech Companies","type":"string"},"regulatedOrRestrictedActivities":{"description":"Attested regulated or restricted activities. The accepted values change over time, so read the current set from `GET /v2/onboarding/policy-subjects?axis=regulated_activity`.","type":"array","items":{"type":"string"}},"contactEmail":{"type":"string","description":"Primary business contact email","example":"compliance@acmepay.com"},"contactPhone":{"description":"Primary business contact phone number","example":"+14155551234","type":"string"}},"required":["id","applicationId","createdAt","updatedAt","features","isHouseAccount","type","legalName","taxId","registeredAddress","dateOfIncorporation","legalStructure","contactEmail"]},"IndividualCustomerResponseDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","description":"Unique customer identifier"},"clientReferenceId":{"description":"Client-provided external identifier for cross-referencing. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces.","example":"client-cus-001","type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$"},"applicationId":{"type":"string","pattern":"^app_[0-9A-Za-z]{22}$","description":"ID of the onboarding application that created this customer."},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the customer was created","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp when the customer was last modified","example":"2026-01-15T09:30:00.000Z"},"features":{"type":"array","items":{"type":"object","properties":{"feature":{"description":"Feature identifier","type":"string","enum":["virtual_account","crypto_wallet"]},"isActive":{"type":"boolean","description":"Whether this feature is currently active for the customer","example":true}},"required":["feature","isActive"]},"description":"List of features enabled for this customer"},"isHouseAccount":{"type":"boolean","description":"Whether this customer is the organization's own house account rather than an external customer. Read-only on live; on sandbox, set it with `PATCH /v2/sandbox/customers/{customerId}/house-account`.","example":false},"signingMode":{"description":"Effective signing mode for this customer right now: the per-customer override if one exists, else the organization setting, else the default. For a customer with no wallet claim yet, this is the value `claim-non-custodial` would freeze and the roster shape it accepts. For a customer that already claimed, the claimed wallet keeps the mode it froze at claim time, even if this value changes afterward. This field may be absent temporarily while the API is being updated.","type":"string","enum":["passkey_required","programmatic","programmatic_unattended"]},"type":{"type":"string","enum":["individual"]},"individualId":{"type":"string","pattern":"^ind_[0-9A-Za-z]{22}$","description":"ID of the account holder's identity record. Send it as `ownership.persons[0].id` to edit the account holder through POST /customers/{customerId}/updates."},"firstName":{"type":"string","description":"Individual's first name","example":"Jane"},"lastName":{"type":"string","description":"Individual's last name","example":"Doe"},"middleName":{"description":"Individual's middle name. Omitted if not provided.","example":"Marie","type":"string"},"email":{"type":"string","description":"Individual's email address","example":"jane.doe@example.com"},"phone":{"description":"Individual's phone number as submitted at onboarding: E.164, or a national number that the address country completes","example":"+14155559876","type":"string"},"birthDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","description":"Date of birth (YYYY-MM-DD)","example":"1990-05-20"},"nationality":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country of nationality (ISO 3166-1 alpha-2)","example":"US"},"taxIdType":{"description":"The person's tax identification type (SSN or ITIN for US persons, national tax ID otherwise). Omitted for non-US persons who owe no tax ID.","example":"SSN","type":"string","enum":["PASSPORT","NATIONAL_ID","DRIVER_LICENSE","RESIDENT_CARD","SSN","ITIN"]},"taxIdCountry":{"description":"Country whose tax authority issued the tax ID (ISO 3166-1 alpha-2). Omitted for non-US persons who owe no tax ID.","example":"US","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"taxResidencyCountry":{"description":"Country of tax residency (ISO 3166-1 alpha-2). Omitted if not provided.","example":"US","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"address":{"description":"Residential address. Same nested shape the onboarding request submits under `ownership.persons[0].address`. Omitted when the person submitted none.","type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"]},"activity":{"type":"object","properties":{"occupation":{"example":"Teacher","type":"string"},"occupationCategory":{"type":"string","enum":["EMPLOYED_PROFESSIONAL","EMPLOYED_TRADES","GOVERNMENT_PUBLIC_SECTOR","FINANCIAL_LEGAL_ACCOUNTING","RETIRED","STUDENT","UNEMPLOYED_HOMEMAKER","SELF_EMPLOYED","REAL_ESTATE","BUSINESS_OWNER_CASH_INTENSIVE","DIGITAL_ASSETS_TRADING","HIGH_RISK_INDUSTRY","OTHER"]},"employerName":{"example":"Acme School","type":"string"},"accountPurpose":{"type":"array","items":{"type":"string","enum":["Receive Salary","Savings","Family Support","Pay Bills","Investment","Business Payments","Treasury Management","Payroll","Vendor/Supplier Payments","Operating Expenses","Client Collections","FX Settlement","Escrow","Other"]}},"sourceOfFunds":{"type":"array","items":{"type":"string","enum":["Salary","Business Income","Savings","Investment","Inheritance","Gift","Sale of Asset","Other","Revenue/Sales","VC/PE Investment","Loans/Debt Financing","Government Grant","Personal/Founder Funds","Donations"]}},"sourceOfWealth":{"type":"array","items":{"type":"string","enum":["Salary","Business Income","Savings","Investment","Inheritance","Gift","Sale of Asset","Other"]}},"expectedMonthlyVolume":{"type":"string","enum":["VOLUME_LT_10K","VOLUME_10K_50K","VOLUME_50K_250K","VOLUME_250K_1M","VOLUME_GT_1M"]},"expectedTransactionsPerMonth":{"type":"string","enum":["<10","10-50","50-200","200-1,000","1,000+"]},"countriesOfActivity":{"type":"array","items":{"type":"string","enum":["AFG","ALB","DZA","ASM","AND","AGO","AIA","ATA","ATG","ARG","ARM","ABW","AUS","AUT","AZE","BHS","BHR","BGD","BRB","BLR","BEL","BLZ","BEN","BMU","BTN","BOL","BES","BIH","BWA","BVT","BRA","IOT","BRN","BGR","BFA","BDI","CPV","KHM","CMR","CAN","CYM","CAF","TCD","CHL","CHN","CXR","CCK","COL","COM","COG","COD","COK","CRI","CIV","HRV","CUB","CUW","CYP","CZE","DNK","DJI","DMA","DOM","ECU","EGY","SLV","GNQ","ERI","EST","SWZ","ETH","FLK","FRO","FJI","FIN","FRA","GUF","PYF","ATF","GAB","GMB","GEO","DEU","GHA","GIB","GRC","GRL","GRD","GLP","GUM","GTM","GGY","GIN","GNB","GUY","HTI","HMD","VAT","HND","HKG","HUN","ISL","IND","IDN","IRN","IRQ","IRL","IMN","ISR","ITA","JAM","JPN","JEY","JOR","KAZ","KEN","KIR","PRK","KOR","KWT","KGZ","LAO","LVA","LBN","LSO","LBR","LBY","LIE","LTU","LUX","MAC","MDG","MWI","MYS","MDV","MLI","MLT","MHL","MTQ","MRT","MUS","MYT","MEX","FSM","MDA","MCO","MNG","MNE","MSR","MAR","MOZ","MMR","NAM","NRU","NPL","NLD","NCL","NZL","NIC","NER","NGA","NIU","NFK","MKD","MNP","NOR","OMN","PAK","PLW","PSE","PAN","PNG","PRY","PER","PHL","PCN","POL","PRT","PRI","QAT","REU","ROU","RUS","RWA","BLM","SHN","KNA","LCA","MAF","SPM","VCT","WSM","SMR","STP","SAU","SEN","SRB","SYC","SLE","SGP","SXM","SVK","SVN","SLB","SOM","ZAF","SGS","SSD","ESP","LKA","SDN","SUR","SJM","SWE","CHE","SYR","TWN","TJK","TZA","THA","TLS","TGO","TKL","TON","TTO","TUN","TUR","TKM","TCA","TUV","UGA","UKR","ARE","GBR","USA","UMI","URY","UZB","VUT","VEN","VNM","VGB","VIR","WLF","ESH","YEM","ZMB","ZWE"]}}},"description":"The account holder's activity answers, with the keys and values the onboarding request submits under `activity`. Omitted when none are on file."},"regulatoryHistory":{"description":"The account holder's politically-exposed-person answer, under the key the onboarding request submits. Omitted when none is on file.","type":"object","properties":{"isPoliticallyExposedPerson":{"type":"boolean"}},"required":["isPoliticallyExposedPerson"]}},"required":["id","applicationId","createdAt","updatedAt","features","isHouseAccount","type","individualId","firstName","lastName","email","birthDate","nationality"]},"CustomerPaginatedResponseDto":{"type":"object","properties":{"data":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","description":"Unique customer identifier"},"clientReferenceId":{"description":"Client-provided external identifier for cross-referencing. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces.","example":"client-cus-001","type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$"},"applicationId":{"type":"string","pattern":"^app_[0-9A-Za-z]{22}$","description":"ID of the onboarding application that created this customer."},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the customer was created","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp when the customer was last modified","example":"2026-01-15T09:30:00.000Z"},"features":{"type":"array","items":{"type":"object","properties":{"feature":{"description":"Feature identifier","type":"string","enum":["virtual_account","crypto_wallet"]},"isActive":{"type":"boolean","description":"Whether this feature is currently active for the customer","example":true}},"required":["feature","isActive"]},"description":"List of features enabled for this customer"},"isHouseAccount":{"type":"boolean","description":"Whether this customer is the organization's own house account rather than an external customer. Read-only on live; on sandbox, set it with `PATCH /v2/sandbox/customers/{customerId}/house-account`.","example":false},"signingMode":{"description":"Effective signing mode for this customer right now: the per-customer override if one exists, else the organization setting, else the default. For a customer with no wallet claim yet, this is the value `claim-non-custodial` would freeze and the roster shape it accepts. For a customer that already claimed, the claimed wallet keeps the mode it froze at claim time, even if this value changes afterward. This field may be absent temporarily while the API is being updated.","type":"string","enum":["passkey_required","programmatic","programmatic_unattended"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","description":"Registered legal name of the business","example":"Acme Payments Inc."},"tradeName":{"description":"Doing-business-as name. Omitted if same as legal name.","example":"Acme Pay","type":"string"},"registrationNumber":{"description":"Business registration or incorporation number","example":"12345678","type":"string"},"taxId":{"type":"string","description":"Government-issued tax identifier (e.g. EIN for US businesses). A US EIN captured from this release on is returned as nine digits without hyphens; an EIN stored earlier keeps the form it was stored in.","example":"123456789"},"registeredAddress":{"type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"],"description":"Registered office address. Same nested shape the onboarding request submits, so it round-trips field-for-field."},"dateOfIncorporation":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","description":"Date the business was incorporated (YYYY-MM-DD)","example":"2020-03-15"},"website":{"description":"Business website URL","example":"https://acmepay.com","type":"string"},"legalStructure":{"type":"string","description":"Legal structure of the business — the local jurisdiction name the customer declared at onboarding (e.g. 'Sociedade Limitada', 'GmbH', 'C-Corporation'). Free-form string; the available options are jurisdiction-specific and surfaced by the requirements discovery endpoint.","example":"Sociedade Limitada"},"primaryIndustry":{"description":"Attested primary industry. The accepted values change over time, so read the current set from `GET /v2/onboarding/policy-subjects?axis=industry`.","example":"fintech_companies","type":"string"},"primaryIndustryLabel":{"description":"Display name of the attested primary industry, as it appears in the current policy catalog. Omitted when the business attested no industry, or when the key has no catalog row.","example":"Fintech Companies","type":"string"},"regulatedOrRestrictedActivities":{"description":"Attested regulated or restricted activities. The accepted values change over time, so read the current set from `GET /v2/onboarding/policy-subjects?axis=regulated_activity`.","type":"array","items":{"type":"string"}},"contactEmail":{"type":"string","description":"Primary business contact email","example":"compliance@acmepay.com"},"contactPhone":{"description":"Primary business contact phone number","example":"+14155551234","type":"string"}},"required":["id","applicationId","createdAt","updatedAt","features","isHouseAccount","type","legalName","taxId","registeredAddress","dateOfIncorporation","legalStructure","contactEmail"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","description":"Unique customer identifier"},"clientReferenceId":{"description":"Client-provided external identifier for cross-referencing. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces.","example":"client-cus-001","type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$"},"applicationId":{"type":"string","pattern":"^app_[0-9A-Za-z]{22}$","description":"ID of the onboarding application that created this customer."},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the customer was created","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp when the customer was last modified","example":"2026-01-15T09:30:00.000Z"},"features":{"type":"array","items":{"type":"object","properties":{"feature":{"description":"Feature identifier","type":"string","enum":["virtual_account","crypto_wallet"]},"isActive":{"type":"boolean","description":"Whether this feature is currently active for the customer","example":true}},"required":["feature","isActive"]},"description":"List of features enabled for this customer"},"isHouseAccount":{"type":"boolean","description":"Whether this customer is the organization's own house account rather than an external customer. Read-only on live; on sandbox, set it with `PATCH /v2/sandbox/customers/{customerId}/house-account`.","example":false},"signingMode":{"description":"Effective signing mode for this customer right now: the per-customer override if one exists, else the organization setting, else the default. For a customer with no wallet claim yet, this is the value `claim-non-custodial` would freeze and the roster shape it accepts. For a customer that already claimed, the claimed wallet keeps the mode it froze at claim time, even if this value changes afterward. This field may be absent temporarily while the API is being updated.","type":"string","enum":["passkey_required","programmatic","programmatic_unattended"]},"type":{"type":"string","enum":["individual"]},"individualId":{"type":"string","pattern":"^ind_[0-9A-Za-z]{22}$","description":"ID of the account holder's identity record. Send it as `ownership.persons[0].id` to edit the account holder through POST /customers/{customerId}/updates."},"firstName":{"type":"string","description":"Individual's first name","example":"Jane"},"lastName":{"type":"string","description":"Individual's last name","example":"Doe"},"middleName":{"description":"Individual's middle name. Omitted if not provided.","example":"Marie","type":"string"},"email":{"type":"string","description":"Individual's email address","example":"jane.doe@example.com"},"phone":{"description":"Individual's phone number as submitted at onboarding: E.164, or a national number that the address country completes","example":"+14155559876","type":"string"},"birthDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","description":"Date of birth (YYYY-MM-DD)","example":"1990-05-20"},"nationality":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country of nationality (ISO 3166-1 alpha-2)","example":"US"},"taxIdType":{"description":"The person's tax identification type (SSN or ITIN for US persons, national tax ID otherwise). Omitted for non-US persons who owe no tax ID.","example":"SSN","type":"string","enum":["PASSPORT","NATIONAL_ID","DRIVER_LICENSE","RESIDENT_CARD","SSN","ITIN"]},"taxIdCountry":{"description":"Country whose tax authority issued the tax ID (ISO 3166-1 alpha-2). Omitted for non-US persons who owe no tax ID.","example":"US","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"taxResidencyCountry":{"description":"Country of tax residency (ISO 3166-1 alpha-2). Omitted if not provided.","example":"US","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"address":{"description":"Residential address. Same nested shape the onboarding request submits under `ownership.persons[0].address`. Omitted when the person submitted none.","type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"]},"activity":{"type":"object","properties":{"occupation":{"example":"Teacher","type":"string"},"occupationCategory":{"type":"string","enum":["EMPLOYED_PROFESSIONAL","EMPLOYED_TRADES","GOVERNMENT_PUBLIC_SECTOR","FINANCIAL_LEGAL_ACCOUNTING","RETIRED","STUDENT","UNEMPLOYED_HOMEMAKER","SELF_EMPLOYED","REAL_ESTATE","BUSINESS_OWNER_CASH_INTENSIVE","DIGITAL_ASSETS_TRADING","HIGH_RISK_INDUSTRY","OTHER"]},"employerName":{"example":"Acme School","type":"string"},"accountPurpose":{"type":"array","items":{"type":"string","enum":["Receive Salary","Savings","Family Support","Pay Bills","Investment","Business Payments","Treasury Management","Payroll","Vendor/Supplier Payments","Operating Expenses","Client Collections","FX Settlement","Escrow","Other"]}},"sourceOfFunds":{"type":"array","items":{"type":"string","enum":["Salary","Business Income","Savings","Investment","Inheritance","Gift","Sale of Asset","Other","Revenue/Sales","VC/PE Investment","Loans/Debt Financing","Government Grant","Personal/Founder Funds","Donations"]}},"sourceOfWealth":{"type":"array","items":{"type":"string","enum":["Salary","Business Income","Savings","Investment","Inheritance","Gift","Sale of Asset","Other"]}},"expectedMonthlyVolume":{"type":"string","enum":["VOLUME_LT_10K","VOLUME_10K_50K","VOLUME_50K_250K","VOLUME_250K_1M","VOLUME_GT_1M"]},"expectedTransactionsPerMonth":{"type":"string","enum":["<10","10-50","50-200","200-1,000","1,000+"]},"countriesOfActivity":{"type":"array","items":{"type":"string","enum":["AFG","ALB","DZA","ASM","AND","AGO","AIA","ATA","ATG","ARG","ARM","ABW","AUS","AUT","AZE","BHS","BHR","BGD","BRB","BLR","BEL","BLZ","BEN","BMU","BTN","BOL","BES","BIH","BWA","BVT","BRA","IOT","BRN","BGR","BFA","BDI","CPV","KHM","CMR","CAN","CYM","CAF","TCD","CHL","CHN","CXR","CCK","COL","COM","COG","COD","COK","CRI","CIV","HRV","CUB","CUW","CYP","CZE","DNK","DJI","DMA","DOM","ECU","EGY","SLV","GNQ","ERI","EST","SWZ","ETH","FLK","FRO","FJI","FIN","FRA","GUF","PYF","ATF","GAB","GMB","GEO","DEU","GHA","GIB","GRC","GRL","GRD","GLP","GUM","GTM","GGY","GIN","GNB","GUY","HTI","HMD","VAT","HND","HKG","HUN","ISL","IND","IDN","IRN","IRQ","IRL","IMN","ISR","ITA","JAM","JPN","JEY","JOR","KAZ","KEN","KIR","PRK","KOR","KWT","KGZ","LAO","LVA","LBN","LSO","LBR","LBY","LIE","LTU","LUX","MAC","MDG","MWI","MYS","MDV","MLI","MLT","MHL","MTQ","MRT","MUS","MYT","MEX","FSM","MDA","MCO","MNG","MNE","MSR","MAR","MOZ","MMR","NAM","NRU","NPL","NLD","NCL","NZL","NIC","NER","NGA","NIU","NFK","MKD","MNP","NOR","OMN","PAK","PLW","PSE","PAN","PNG","PRY","PER","PHL","PCN","POL","PRT","PRI","QAT","REU","ROU","RUS","RWA","BLM","SHN","KNA","LCA","MAF","SPM","VCT","WSM","SMR","STP","SAU","SEN","SRB","SYC","SLE","SGP","SXM","SVK","SVN","SLB","SOM","ZAF","SGS","SSD","ESP","LKA","SDN","SUR","SJM","SWE","CHE","SYR","TWN","TJK","TZA","THA","TLS","TGO","TKL","TON","TTO","TUN","TUR","TKM","TCA","TUV","UGA","UKR","ARE","GBR","USA","UMI","URY","UZB","VUT","VEN","VNM","VGB","VIR","WLF","ESH","YEM","ZMB","ZWE"]}}},"description":"The account holder's activity answers, with the keys and values the onboarding request submits under `activity`. Omitted when none are on file."},"regulatoryHistory":{"description":"The account holder's politically-exposed-person answer, under the key the onboarding request submits. Omitted when none is on file.","type":"object","properties":{"isPoliticallyExposedPerson":{"type":"boolean"}},"required":["isPoliticallyExposedPerson"]}},"required":["id","applicationId","createdAt","updatedAt","features","isHouseAccount","type","individualId","firstName","lastName","email","birthDate","nationality"]}]}},"meta":{"type":"object","properties":{"mode":{"type":"string","description":"Pagination mode","example":"cursor","enum":["cursor"]},"nextCursor":{"type":"string","description":"Cursor for the page after this one. Use it with `direction=forward`; it is `null` when no more rows follow. A backward page always carries one, so do not loop on it while `direction=backward`.","example":"eyJpZCI6ImN1c18yeFBxTjhSIn0","nullable":true},"previousCursor":{"type":"string","description":"Cursor for the page before this one. Use it with `direction=backward`. It is `null` on the first page of a forward walk and when no earlier rows remain.","example":null,"nullable":true},"total":{"type":"number","description":"Total number of records matching the query","example":42}},"required":["mode","nextCursor","previousCursor","total"]}},"required":["data","meta"]},"ValidationErrorDto":{"type":"object","properties":{"type":{"type":"string","description":"Machine-readable error code","example":"CUSTOMER_NOT_FOUND"},"title":{"type":"string","description":"Human-readable error type label","example":"Customer Not Found"},"status":{"type":"number","description":"HTTP status code","example":404},"detail":{"type":"string","description":"Human-readable explanation of this occurrence","example":"Customer with id cus_034A0gCCVsxdV2PjHLx9k1 not found"},"resolution":{"type":"string","description":"What the developer should do to resolve this error","example":"Verify the customer ID. Check you are using the correct API key for this organization."},"docs":{"type":"string","description":"URL to error documentation","example":"https://v2.docs.conduit.financial/errors#customer-not-found"},"instance":{"type":"string","description":"Request path that produced the error","example":"/v2/customers/cus_034A0gCCVsxdV2PjHLx9k1"},"correlationId":{"description":"Request correlation ID","example":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","type":"string"},"timestamp":{"type":"string","description":"ISO 8601 UTC timestamp","example":"2026-04-27T20:00:00.000Z"},"details":{"description":"Additional structured data for domain-specific errors (e.g. missing field lists, pair info)"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"JSON pointer to the invalid field","example":"/email"},"detail":{"type":"string","description":"What is wrong with this field","example":"Invalid email format"},"allowedValues":{"description":"The values this field accepts, when it is a closed set","example":["ach","fedwire","rtp"],"type":"array","items":{"type":"string"}},"category":{"description":"Class of blocker (requirements-validator output only). 'field' = form-field gap, 'document' = missing or insufficient document (including per-UBO document slots), 'individual' = required person missing.","example":"field","type":"string","enum":["field","document","individual"]}},"required":["pointer","detail"]}}},"required":["type","title","status","detail","resolution","docs","instance","timestamp"]},"ProblemDetailDto":{"type":"object","properties":{"type":{"type":"string","description":"Machine-readable error code","example":"CUSTOMER_NOT_FOUND"},"title":{"type":"string","description":"Human-readable error type label","example":"Customer Not Found"},"status":{"type":"number","description":"HTTP status code","example":404},"detail":{"type":"string","description":"Human-readable explanation of this occurrence","example":"Customer with id cus_034A0gCCVsxdV2PjHLx9k1 not found"},"resolution":{"type":"string","description":"What the developer should do to resolve this error","example":"Verify the customer ID. Check you are using the correct API key for this organization."},"docs":{"type":"string","description":"URL to error documentation","example":"https://v2.docs.conduit.financial/errors#customer-not-found"},"instance":{"type":"string","description":"Request path that produced the error","example":"/v2/customers/cus_034A0gCCVsxdV2PjHLx9k1"},"correlationId":{"description":"Request correlation ID","example":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","type":"string"},"timestamp":{"type":"string","description":"ISO 8601 UTC timestamp","example":"2026-04-27T20:00:00.000Z"},"details":{"description":"Additional structured data for domain-specific errors (e.g. missing field lists, pair info)"}},"required":["type","title","status","detail","resolution","docs","instance","timestamp"]},"RateLimitedErrorDto":{"type":"object","properties":{"type":{"type":"string","description":"Machine-readable error code","example":"CUSTOMER_NOT_FOUND"},"title":{"type":"string","description":"Human-readable error type label","example":"Customer Not Found"},"status":{"type":"number","description":"HTTP status code","example":404},"detail":{"type":"string","description":"Human-readable explanation of this occurrence","example":"Customer with id cus_034A0gCCVsxdV2PjHLx9k1 not found"},"resolution":{"type":"string","description":"What the developer should do to resolve this error","example":"Verify the customer ID. Check you are using the correct API key for this organization."},"docs":{"type":"string","description":"URL to error documentation","example":"https://v2.docs.conduit.financial/errors#customer-not-found"},"instance":{"type":"string","description":"Request path that produced the error","example":"/v2/customers/cus_034A0gCCVsxdV2PjHLx9k1"},"correlationId":{"description":"Request correlation ID","example":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","type":"string"},"timestamp":{"type":"string","description":"ISO 8601 UTC timestamp","example":"2026-04-27T20:00:00.000Z"},"details":{"description":"Additional structured data for domain-specific errors (e.g. missing field lists, pair info)"},"retryAfterSeconds":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991,"description":"Seconds to wait before retrying","example":3}},"required":["type","title","status","detail","resolution","docs","instance","timestamp","retryAfterSeconds"]},"CustomerUpdateSubmitDto":{"type":"object","properties":{"businessInfo":{"type":"object","description":"Business-level data about the entity. Send only the leaves you want to change.","properties":{"legalName":{"type":"string","description":"The full legal name of the entity as registered with government authorities (matches its Articles of Incorporation or equivalent formation document). Do not abbreviate.","maxLength":255},"alternateNameDba":{"type":"string","description":"Any trading name, brand name, or 'doing business as' (DBA) the company uses publicly that differs from the legal name. Leave blank if the company only trades under the legal name.","maxLength":255},"businessEntityId":{"type":"string","description":"Business Entity ID","maxLength":255},"taxId":{"type":"string","description":"Tax Identification Number"},"chapter4Status":{"type":"string","description":"The entity's chapter 4 status as stated on line 5 of its Form W-8BEN-E.","enum":["Participating FFI","Reporting Model 1 FFI","Reporting Model 2 FFI","Active NFFE","Passive NFFE"]},"giin":{"type":"string","description":"Global Intermediary Identification Number from the IRS FFI List, line 9a of Form W-8BEN-E; required for an FFI status.","pattern":"^[0-9A-Z]{6}\\.[0-9A-Z]{5}\\.[A-Z]{2}\\.[0-9]{3}$"},"website":{"type":"string","description":"Website","format":"uri","maxLength":500},"companyEmail":{"type":"string","description":"Company Email","format":"email","maxLength":255},"companyPhone":{"type":"string","description":"Company Phone"}},"additionalProperties":{}},"registeredAddress":{"type":"object","description":"Registered business address. `country` accepts ISO 3166-1 alpha-2 or alpha-3. Send only the leaves you want to change.","properties":{"country":{"type":"string","description":"Country"},"addressLine1":{"type":"string","description":"Street 1","maxLength":500},"addressLine2":{"type":"string","description":"Street 2","maxLength":500},"city":{"type":"string","description":"City","maxLength":255},"state":{"type":"string","description":"State / Province","maxLength":255},"postalCode":{"type":"string","description":"Zip Code","maxLength":20},"poBox":{"type":"string","description":"P.O. Box Number","pattern":"^[0-9]{4,5}$"}},"additionalProperties":{}},"operatingAddress":{"type":"object","description":"Operating address when it differs from the registered one. Same leaves and `country` rules. Send only the leaves you want to change.","properties":{"sameAsRegistered":{"type":"boolean","description":"Is the operating address the same as the registered address?"},"addressLine1":{"type":"string","description":"Street 1"},"addressLine2":{"type":"string","description":"Street 2"},"city":{"type":"string","description":"City"},"state":{"type":"string","description":"State / Province"},"country":{"type":"string","description":"Country"},"postalCode":{"type":"string","description":"Zip Code"}},"additionalProperties":{}},"companyClassification":{"type":"object","description":"Legal-structure and industry classification. `legalStructure` and `primaryIndustry` are jurisdiction-specific; take their accepted values from `GET /v2/onboarding/requirements`. Send only the leaves you want to change.","properties":{"legalStructure":{"type":"string","description":"Legal Structure"},"llcTaxClassification":{"type":"string","description":"How the IRS taxes this US LLC: Partnership, C-Corp or S-Corp. A multi-member LLC that made no election is a Partnership. Applies only to an LLC registered in the USA.","enum":["Partnership","C-Corp","S-Corp"]},"legalStructureOther":{"type":"string","description":"Legal Structure (Other)","pattern":"\\S","maxLength":255},"incorporationDate":{"type":"string","description":"Date of Incorporation","format":"date"},"primaryIndustry":{"type":"string","description":"The single industry that best describes your primary revenue source, chosen from the current policy catalog. If the business spans multiple industries, pick the one generating the most revenue rather than the broadest category.","maxLength":120},"primaryIndustryOther":{"type":"string","description":"Primary Industry (Other)","maxLength":500},"hasDba":{"type":"boolean","description":"Has DBA / Trade Name?"},"isPubliclyListed":{"type":"boolean","description":"Publicly Listed?"},"stockExchange":{"type":"string","description":"Stock Exchange","enum":["NYSE","NASDAQ","LSE","JSE","NSE","B3","BMV","SGX","HKEX","TSX","ASX","Other"]},"stockExchangeOther":{"type":"string","description":"Stock Exchange (Other)"},"tickerSymbol":{"type":"string","description":"Ticker Symbol"}},"additionalProperties":{}},"businessActivity":{"type":"object","description":"Operating-activity descriptors. Send only the leaves you want to change.","properties":{"businessActivitiesDescription":{"type":"string","description":"Plain-language summary of what the business actually does day-to-day. A paragraph is enough — describe the core economic activity, not the legal form."},"accountPurpose":{"type":"array","description":"Select every USD virtual-account use case that applies, even those that are infrequent. This drives risk-tier categorisation and monitoring thresholds, so being complete is better than picking only the dominant flow.","items":{"type":"string","enum":["Treasury Management","Payroll","Vendor/Supplier Payments","Operating Expenses","Client Collections","Investment","FX Settlement","Escrow","Other"]}},"accountPurposeOther":{"type":"string","description":"Describe the USD VA use case"},"productsServices":{"type":"array","description":"What the business sells to its customers. Internal-use products (HR systems, IT tooling, etc.) are not the target here — focus on what generates revenue. Select all that apply.","items":{"type":"string","enum":["Technology / SaaS Provider","Sale of Goods / Non-Financial Services","Import / Export","Wholesale / Distribution","Investment Advisory","Digital Wallets / Stored Value","Custody","Lending / Credit","Escrow / Settlement Services","Crypto Exchange or Trading","Cross-Border Payments","NFT / DeFi / Web3","Foreign Exchange / Currency Conversion","Card Issuance & Merchant Services","Brokerage / Trading Platform","Asset Management / Fund Services","Precious Metals / High-Value Commodities","Marketplace or Platform Operator","Real Estate / Title / Property Escrow","Crowdfunding / Capital Raising Platforms","Trust and Company Services (TCSP)"]}},"productsServicesOther":{"type":"string","description":"Products / Services (Other)"},"countriesOfActivity":{"type":"array","description":"Countries where the business has customers, counterparties, or operations. Include jurisdictions where the business receives payments, sends payments, or holds assets — not just the country of incorporation.","items":{"type":"string","enum":["AFG","ALB","DZA","ASM","AND","AGO","AIA","ATA","ATG","ARG","ARM","ABW","AUS","AUT","AZE","BHS","BHR","BGD","BRB","BLR","BEL","BLZ","BEN","BMU","BTN","BOL","BES","BIH","BWA","BVT","BRA","IOT","BRN","BGR","BFA","BDI","CPV","KHM","CMR","CAN","CYM","CAF","TCD","CHL","CHN","CXR","CCK","COL","COM","COG","COD","COK","CRI","CIV","HRV","CUB","CUW","CYP","CZE","DNK","DJI","DMA","DOM","ECU","EGY","SLV","GNQ","ERI","EST","SWZ","ETH","FLK","FRO","FJI","FIN","FRA","GUF","PYF","ATF","GAB","GMB","GEO","DEU","GHA","GIB","GRC","GRL","GRD","GLP","GUM","GTM","GGY","GIN","GNB","GUY","HTI","HMD","VAT","HND","HKG","HUN","ISL","IND","IDN","IRN","IRQ","IRL","IMN","ISR","ITA","JAM","JPN","JEY","JOR","KAZ","KEN","KIR","PRK","KOR","KWT","KGZ","LAO","LVA","LBN","LSO","LBR","LBY","LIE","LTU","LUX","MAC","MDG","MWI","MYS","MDV","MLI","MLT","MHL","MTQ","MRT","MUS","MYT","MEX","FSM","MDA","MCO","MNG","MNE","MSR","MAR","MOZ","MMR","NAM","NRU","NPL","NLD","NCL","NZL","NIC","NER","NGA","NIU","NFK","MKD","MNP","NOR","OMN","PAK","PLW","PSE","PAN","PNG","PRY","PER","PHL","PCN","POL","PRT","PRI","QAT","REU","ROU","RUS","RWA","BLM","SHN","KNA","LCA","MAF","SPM","VCT","WSM","SMR","STP","SAU","SEN","SRB","SYC","SLE","SGP","SXM","SVK","SVN","SLB","SOM","ZAF","SGS","SSD","ESP","LKA","SDN","SUR","SJM","SWE","CHE","SYR","TWN","TJK","TZA","THA","TLS","TGO","TKL","TON","TTO","TUN","TUR","TKM","TCA","TUV","UGA","UKR","ARE","GBR","USA","UMI","URY","UZB","VUT","VEN","VNM","VGB","VIR","WLF","ESH","YEM","ZMB","ZWE"]}},"countriesOfActivityOther":{"type":"string","description":"Countries of Activity (Other)"},"avgMonthlyVolume":{"type":"string","description":"Expected average USD value flowing through the business's Conduit virtual account each month, across all in- and out-bound transactions combined.","enum":["VOLUME_LT_10K","VOLUME_10K_50K","VOLUME_50K_250K","VOLUME_250K_1M","VOLUME_GT_1M"]},"estimatedTransactionsPerMonth":{"type":"string","description":"Expected average count of transactions per month through the business's Conduit virtual account, across all flows combined (deposits, withdrawals, conversions).","enum":["<10","10-50","50-200","200-1,000","1,000+"]},"sourceOfFunds":{"type":"array","description":"Where the money the business expects to receive through Conduit originates. Select all that apply (e.g. customer revenue, investor capital, lending proceeds). Use the 'Other' follow-up for sources not on the list.","items":{"type":"string","enum":["Revenue/Sales","VC/PE Investment","Loans/Debt Financing","Government Grant","Personal/Founder Funds","Donations","Other"]}},"sourceOfFundsOther":{"type":"string","description":"Source of Funds (Other)"},"fundFlowDescription":{"type":"string","description":"Describe the typical end-to-end flow of funds through the business: who sends money in, what triggers the inbound flow, and where the money is ultimately paid out. One or two paragraphs."},"isRegulated":{"type":"boolean","description":"Regulated / Financial Services?"},"regulatoryAuthorities":{"type":"array","description":"Regulatory Authorities","items":{"type":"string","enum":["Central Bank of Kenya","FCA","SEC","OCC","FinCEN","SARB","CBN","BdF","BaFin","MAS","Other"]}},"regulatoryAuthorityOther":{"type":"string","description":"Regulatory Authority (Other)"},"licenseNumber":{"type":"string","description":"License / Registration Number"},"isNonbankFinancialInstitution":{"type":"boolean","description":"Yes if the business provides financial services without holding a banking charter — e.g. lending, money transmission or payment services, broker-dealer or investment advisory activity, insurance, currency exchange, or consumer finance. Chartered banks and credit unions answer No."},"operatesOnBehalf":{"type":"boolean","description":"Select Yes if the business receives, holds or sends money that belongs to its own clients or customers. Select No if the business only moves its own money, including payments to its own vendors or suppliers."},"holdsClientFundsInVirtualAccounts":{"type":"boolean","description":"Select Yes if the business holds, receives or sends funds that belong to its clients through virtual accounts opened in its name. Select No if every virtual account holds only the company's own funds."},"usesBlockchainWallets":{"type":"boolean","description":"Uses Blockchain Wallets?"},"onBehalfDescription":{"type":"string","description":"On Behalf Description"},"walletAddresses":{"type":"string","description":"Blockchain Wallet Addresses"},"walletExchanges":{"type":"string","description":"Blockchain Wallet Exchanges"},"isGeneratingRevenue":{"type":"boolean","description":"Currently Generating Revenue?"},"revenueCovers":{"type":"string","description":"What share of the business's monthly operating expenses its revenue currently covers, on average over the trailing three months.","enum":["All operating expenses","Most","Some","Minimal"]},"hasInstitutionalInvestors":{"type":"boolean","description":"Yes if the business has raised capital from venture capital, private equity, hedge funds, family offices, or strategic corporate investors. Friends-and-family or solo-angel equity does not count as institutional."},"financialRunway":{"type":"string","description":"Financial Runway (Months)","enum":["RUNWAY_LT_3M","RUNWAY_3M_6M","RUNWAY_6M_12M","RUNWAY_GT_12M"]},"cashOnHand":{"type":"string","description":"Total liquid funds the business currently holds across all business accounts (cash, money-market, short-dated treasuries). Excludes owners' personal accounts and illiquid or locked-up assets.","enum":["<$50K","$50K-$250K","$250K-$1M","$1M-$5M","$5M-$25M","$25M+"]},"runwayExplanation":{"type":"string","description":"Runway Explanation"},"hasIndependentAmlAudit":{"type":"boolean","description":"Has Independent AML Audit?"},"hasHighRiskIndustries":{"type":"boolean","description":"Answer Yes if the business directly participates in or earns revenue from any of these high-risk industries: Adult Entertainment, Cannabis/Marijuana, Cryptocurrency/Digital Assets, Firearms/Ammunition, Gambling/Online Gaming, Money Services Business, Precious Metals/Stones, Third-Party Payment Processing, Virtual Currency/Digital Tokens, Pawnbroker, Tobacco, Pharmaceutical Sales (Online), Shell Banks, Non-Profit / Charity, Cash-Intensive Retail. If the activity isn't listed but is high-risk, answer Yes and select \"Other\" to describe it."},"highRiskIndustries":{"type":"array","description":"Industries the business directly participates in or earns revenue from. This asks about direct participation, not incidental exposure (e.g. having a customer in a high-risk industry). Select 'Other' if the activity isn't listed, then describe it.","items":{"type":"string","enum":["Adult Entertainment","Cannabis/Marijuana","Cryptocurrency/Digital Assets","Firearms/Ammunition","Gambling/Online Gaming","Money Services Business","Precious Metals/Stones","Third-Party Payment Processing","Virtual Currency/Digital Tokens","Pawnbroker","Tobacco","Pharmaceutical Sales (Online)","Shell Banks","Non-Profit / Charity","Cash-Intensive Retail","Other","None of the Above"]}},"highRiskDetails":{"type":"string","description":"High-Risk Details"},"hasRegulatedOrRestrictedActivities":{"type":"boolean","description":"Answer Yes if the business directly participates in or earns revenue from any activity on the current policy catalog. If the activity isn't listed but is regulated or restricted, answer Yes and select \"Other\" to describe it."},"regulatedOrRestrictedActivities":{"type":"array","description":"Activities the business directly participates in or earns revenue from, chosen from the current policy catalog. This asks about direct participation, not incidental exposure. \"Other\" is composable with named activities — select it alongside any that apply, then describe it below.","items":{"type":"string"}},"otherActivityDescription":{"type":"string","description":"Other Activity Description","maxLength":500}},"additionalProperties":{}},"compliance":{"type":"object","description":"Compliance-programme attestations. Send only the leaves you want to change.","properties":{"hasComplianceProgram":{"type":"boolean","description":"Yes if the business has documented BSA/AML or KYC policies, named a compliance owner, and operates ongoing controls (screening, monitoring, periodic reviews). Informal or ad-hoc controls do not qualify as a 'program'."},"complianceManager":{"type":"string","description":"Compliance Manager"},"complianceManagerEmail":{"type":"string","description":"Compliance Manager Email","format":"email"},"sanctionsScreening":{"type":"string","description":"How the business screens customers and counterparties against sanctions lists (OFAC, UN, EU). Pick the primary method: automated vendor (e.g. ComplyAdvantage, LexisNexis, Refinitiv), in-house tooling, manual checks against published lists, or none.","enum":["Chainalysis","Elliptic","ComplyAdvantage","Sardine","TRM Labs","Refinitiv World-Check","Dow Jones Risk & Compliance","LexisNexis","Sanctions.io","Manual OFAC List Checks","No Screening","Other"]},"sanctionsScreeningOther":{"type":"string","description":"Sanctions Screening (Other)"},"cddMethod":{"type":"string","description":"How the business verifies the identity of its customers and their beneficial owners (Customer Due Diligence). Pick the primary approach: third-party KYC vendor, in-house workflow, document-only review at onboarding, or none.","enum":["Jumio","Onfido","Veriff","Sumsub","Persona","Alloy","Trulioo","LexisNexis","Plaid Identity Verification","Manual Document Review","No CDD Process","Other"]},"cddMethodOther":{"type":"string","description":"Customer Due Diligence Method (Other)"},"transactionMonitoring":{"type":"array","description":"How the business flags unusual transaction patterns post-onboarding. Select all that apply: rule-based engines, vendor platforms, manual review against thresholds, periodic file review, etc.","items":{"type":"string","enum":["Chainalysis KYT","Elliptic Lens","ComplyAdvantage","Sardine","TRM Labs","Featurespace","Manual Monitoring","No Transaction Monitoring","Other"]}},"transactionMonitoringOther":{"type":"string","description":"Transaction Monitoring (Other)"},"complianceTraining":{"type":"array","description":"Compliance Training Programs","items":{"type":"string","enum":["Annual AML/KYC Training","Role-Specific Compliance Training","External Compliance Certifications","Ad Hoc Training Only","No Formal Training Program"]}},"hasAmlAudit":{"type":"boolean","description":"Has Independent AML Audit?"},"noAuditExplanation":{"type":"string","description":"No Audit Explanation"},"auditIntention":{"type":"string","description":"Audit Intention"},"leadershipExperience":{"type":"string","description":"Aggregate years of BSA / AML / financial-compliance experience among the leadership responsible for the program — typically the compliance manager or MLRO, plus the CEO if owner-operator.","enum":["Extensive (5+ years in compliance/regulated industry)","Moderate (2-5 years in compliance/regulated industry)","Limited (Less than 2 years or no direct experience)"]}},"additionalProperties":{}},"regulatoryHistory":{"type":"object","description":"Regulatory and adverse-action history. Send only the leaves you want to change.","properties":{"hasUSBankAccount":{"type":"boolean","description":"Existing US Bank Account?"},"deniedBankAccount":{"type":"boolean","description":"Ever Denied a US Bank Account?"},"deniedBankAccountDetails":{"type":"string","description":"The reason the bank gave for denying the account. Do not enter account or routing numbers."},"subjectToAdverseActions":{"type":"boolean","description":"Yes if the business has ever been subject to regulatory enforcement, consent orders, fines, license revocations, criminal proceedings, or significant civil litigation — past or pending. Use the follow-up field to describe each instance."},"hasPoliticallyExposedPersons":{"type":"boolean","description":"Yes if any owner, director, or senior executive of the business is — or is a close family member or known associate of — a current or former senior government official, head of state, senior politician, judge, or military officer. This is the standard 'Politically Exposed Person' (PEP) definition. Disclose the business's own people, not its customers."},"businessAdverseActions":{"type":"array","description":"Business Adverse Actions","items":{"type":"string","enum":["Sanctions","Regulatory enforcement","Criminal investigation","Civil litigation","Bankruptcy/insolvency","Account closure/termination","Consent order","Seizure/forfeiture","None"]}},"ownersDirectorsAdverseActions":{"type":"array","description":"Adverse-action categories that have affected any current owner, director, or senior executive personally — not the business entity itself. Includes past employer enforcement actions where the individual was named. Select 'None' if none apply.","items":{"type":"string","enum":["Sanctions","Regulatory enforcement","Criminal investigation","Civil litigation","Bankruptcy/insolvency","Account closure/termination","Consent order","Seizure/forfeiture","None"]}},"adverseActionsDetails":{"type":"string","description":"Adverse Actions Details"},"isPoliticallyExposedPerson":{"type":"boolean","description":"Yes if the account holder is — or is a close family member or known associate of — a current or former senior government official, head of state, senior politician, judge, or military officer. This is the standard 'Politically Exposed Person' (PEP) definition."},"adverseActions":{"type":"array","description":"Adverse Actions","items":{"type":"string","enum":["Sanctions","Regulatory enforcement","Criminal investigation","Civil litigation","Bankruptcy/insolvency","Account closure/termination","Consent order","Seizure/forfeiture","None"]}}},"additionalProperties":{}},"activity":{"type":"object","description":"Account holder's activity and due-diligence descriptors on an individual application: occupation, employer, account purpose, source of funds, expected volumes and countries of activity. Individual customer only: the account holder's activity answers. Send only the answers that change; the others keep their stored value. A business customer update with `activity` returns 400.","properties":{"occupation":{"type":"string","description":"The account holder's current occupation or profession. Describe the role, not the employer.","maxLength":255},"occupationCategory":{"type":"string","description":"The category that best describes the account holder's occupation or main source of income.","enum":["EMPLOYED_PROFESSIONAL","EMPLOYED_TRADES","GOVERNMENT_PUBLIC_SECTOR","FINANCIAL_LEGAL_ACCOUNTING","RETIRED","STUDENT","UNEMPLOYED_HOMEMAKER","SELF_EMPLOYED","REAL_ESTATE","BUSINESS_OWNER_CASH_INTENSIVE","DIGITAL_ASSETS_TRADING","HIGH_RISK_INDUSTRY","OTHER"]},"employerName":{"type":"string","description":"The name of the account holder's current employer, if any.","maxLength":255},"accountPurpose":{"type":"array","description":"Select every account use case that applies, even those that are infrequent. This drives risk-tier categorisation and monitoring thresholds.","items":{"type":"string","enum":["Receive Salary","Savings","Family Support","Pay Bills","Investment","Business Payments"]}},"sourceOfFunds":{"type":"array","description":"Where the money flowing into the account comes from. Select all that apply. Use the 'Other' follow-up for a source not on the list.","items":{"type":"string","enum":["Salary","Business Income","Savings","Investment","Inheritance","Gift","Sale of Asset","Other"]}},"sourceOfFundsOther":{"type":"string","description":"Source of Funds (Other)"},"sourceOfWealth":{"type":"array","description":"Where the account holder's overall wealth comes from. Select all that apply. Use the 'Other' follow-up for a source not on the list.","items":{"type":"string","enum":["Salary","Business Income","Savings","Investment","Inheritance","Gift","Sale of Asset","Other"]}},"sourceOfWealthOther":{"type":"string","description":"Source of Wealth (Other)"},"expectedMonthlyVolume":{"type":"string","description":"Expected average USD value flowing through the account each month, across all in- and out-bound transactions combined.","enum":["VOLUME_LT_10K","VOLUME_10K_50K","VOLUME_50K_250K","VOLUME_250K_1M","VOLUME_GT_1M"]},"expectedTransactionsPerMonth":{"type":"string","description":"Expected number of transactions through the account each month, in- and out-bound combined.","enum":["<10","10-50","50-200","200-1,000","1,000+"]},"countriesOfActivity":{"type":"array","description":"Countries where the account holder receives payments, sends payments, or holds assets.","items":{"type":"string","enum":["AFG","ALB","DZA","ASM","AND","AGO","AIA","ATA","ATG","ARG","ARM","ABW","AUS","AUT","AZE","BHS","BHR","BGD","BRB","BLR","BEL","BLZ","BEN","BMU","BTN","BOL","BES","BIH","BWA","BVT","BRA","IOT","BRN","BGR","BFA","BDI","CPV","KHM","CMR","CAN","CYM","CAF","TCD","CHL","CHN","CXR","CCK","COL","COM","COG","COD","COK","CRI","CIV","HRV","CUB","CUW","CYP","CZE","DNK","DJI","DMA","DOM","ECU","EGY","SLV","GNQ","ERI","EST","SWZ","ETH","FLK","FRO","FJI","FIN","FRA","GUF","PYF","ATF","GAB","GMB","GEO","DEU","GHA","GIB","GRC","GRL","GRD","GLP","GUM","GTM","GGY","GIN","GNB","GUY","HTI","HMD","VAT","HND","HKG","HUN","ISL","IND","IDN","IRN","IRQ","IRL","IMN","ISR","ITA","JAM","JPN","JEY","JOR","KAZ","KEN","KIR","PRK","KOR","KWT","KGZ","LAO","LVA","LBN","LSO","LBR","LBY","LIE","LTU","LUX","MAC","MDG","MWI","MYS","MDV","MLI","MLT","MHL","MTQ","MRT","MUS","MYT","MEX","FSM","MDA","MCO","MNG","MNE","MSR","MAR","MOZ","MMR","NAM","NRU","NPL","NLD","NCL","NZL","NIC","NER","NGA","NIU","NFK","MKD","MNP","NOR","OMN","PAK","PLW","PSE","PAN","PNG","PRY","PER","PHL","PCN","POL","PRT","PRI","QAT","REU","ROU","RUS","RWA","BLM","SHN","KNA","LCA","MAF","SPM","VCT","WSM","SMR","STP","SAU","SEN","SRB","SYC","SLE","SGP","SXM","SVK","SVN","SLB","SOM","ZAF","SGS","SSD","ESP","LKA","SDN","SUR","SJM","SWE","CHE","SYR","TWN","TJK","TZA","THA","TLS","TGO","TKL","TON","TTO","TUN","TUR","TKM","TCA","TUV","UGA","UKR","ARE","GBR","USA","UMI","URY","UZB","VUT","VEN","VNM","VGB","VIR","WLF","ESH","YEM","ZMB","ZWE"]}}},"additionalProperties":{}},"ownership":{"type":"object","description":"Beneficial-owner and controlling-person disclosure under `persons[]`. Persons are natural people: disclose a corporate owner under `relatedCompany` and look through it to the individuals behind it. Business customer: sending `ownership.persons` replaces the full owner set — to edit an existing owner, include its `id` (from a customer read) plus the fields you want to change; omit `id` to add a new owner (full identity required); owners not listed are removed. Individual customer: send exactly the account holder as one entry whose `id` is the `individualId` from the customer read, with no `roles`; adding a person, omitting the id, or sending roles returns 400.","properties":{"persons":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Person Record ID"},"firstName":{"type":"string","description":"First Name","maxLength":255},"lastName":{"type":"string","description":"Last Name","maxLength":255},"middleName":{"type":"string","description":"Middle Name","maxLength":255},"email":{"type":"string","description":"Email","format":"email","maxLength":255},"phoneNumber":{"type":"string","description":"Phone Number"},"birthDate":{"type":"string","description":"Date of Birth","format":"date"},"identityDocumentExpiryDate":{"type":"string","description":"The expiry date of the identity document, as verified by the identity provider. The document must not have expired.","format":"date"},"identityVerificationDate":{"type":"string","description":"The date the identity verification of this person was completed, as shown on the identity verification report. Without it, approval depends on reading the date from the report and can wait for a manual review.","format":"date"},"nationality":{"type":"string","description":"Country of citizenship. For dual nationals, use the citizenship matching the tax ID provided; if asked about additional nationalities elsewhere, disclose them there."},"taxIdType":{"type":"string","description":"An individual may send one of PASSPORT, NATIONAL_ID, DRIVER_LICENSE, RESIDENT_CARD, SSN, ITIN, subject to the nationality rule below. A business owner accepts only SSN, ITIN, NATIONAL_ID. For an individual customer, a US national sends SSN. ITIN is for a US resident of another nationality. For an individual customer, a NATIONAL_ID issued by CAN, NLD, IRL, AUS, JPN is not accepted. For an individual customer, a NATIONAL_ID must be the 13-digit French tax number (numéro fiscal) for FRA, the 16-digit PhilSys card number (PCN) for PHL, a PAN for IND, the 13-digit CNIC for PAK, the 11-digit CPF for BRA, the 18-character CURP for MEX, the 11-digit NIN for NGA, the 10-, 13- or 17-digit NID for BGD, the 11-digit T.C. Kimlik No for TUR. Spaces, dashes, dots, slashes and letter case are ignored. Check digits are verified for FRA, BRA, MEX, TUR. For an individual customer, send a PASSPORT, DRIVER_LICENSE or RESIDENT_CARD instead.","enum":["PASSPORT","NATIONAL_ID","DRIVER_LICENSE","RESIDENT_CARD","SSN","ITIN"]},"taxIdNumber":{"type":"string","description":"For an individual customer, a NATIONAL_ID issued by CAN, NLD, IRL, AUS, JPN is not accepted. For an individual customer, a NATIONAL_ID must be the 13-digit French tax number (numéro fiscal) for FRA, the 16-digit PhilSys card number (PCN) for PHL, a PAN for IND, the 13-digit CNIC for PAK, the 11-digit CPF for BRA, the 18-character CURP for MEX, the 11-digit NIN for NGA, the 10-, 13- or 17-digit NID for BGD, the 11-digit T.C. Kimlik No for TUR. Spaces, dashes, dots, slashes and letter case are ignored. Check digits are verified for FRA, BRA, MEX, TUR. For an individual customer, send a PASSPORT, DRIVER_LICENSE or RESIDENT_CARD instead."},"taxIdCountry":{"type":"string","description":"The country whose tax authority issued the tax identification number (TIN). May differ from the person's nationality or country of residence."},"immigrationStatus":{"type":"string","description":"US immigration status — only relevant for non-US citizens currently living in the United States. Skip if the person is a US citizen or does not live in the US.","enum":["Permanent U.S. Resident","Non-Permanent U.S. Resident","Non-Resident of U.S."]},"taxResidencyCountry":{"type":"string","description":"The country whose tax authority the person files personal income tax with. May differ from nationality (citizenship) or current residence. For multiple tax residencies, list the primary one."},"ownershipPercent":{"type":"number","description":"Direct or indirect ownership share in the business, including ownership held through intermediate entities. For tiered ownership structures, give the effective beneficial share at this entity — not the immediate-parent share.","minimum":0,"maximum":100},"sharesAllocated":{"type":"integer","description":"Shares Allocated","minimum":0},"roles":{"type":"array","description":"Which capacity each person fills. Beneficial Owner: holds ≥25% ownership or otherwise exercises ultimate control. Controlling Person: a senior managing official (CEO / CFO / COO / General Counsel / President or equivalent), regardless of ownership. Legal Representative: authorized to sign on behalf of the entity. Account Holder: the person who opens the account in their own name. Select all that apply.","items":{"type":"string","enum":["BENEFICIAL_OWNER","CONTROLLING_PERSON","LEGAL_REPRESENTATIVE","ACCOUNT_HOLDER"]}},"address":{"type":"object","properties":{"country":{"type":"string","description":"Country"},"addressLine1":{"type":"string","description":"Street 1","maxLength":255},"addressLine2":{"type":"string","description":"Street 2","maxLength":255},"city":{"type":"string","description":"City","maxLength":255},"state":{"type":"string","description":"State / Province","maxLength":255},"postalCode":{"type":"string","description":"Zip Code","maxLength":50}}},"documentIds":{"type":"array","maxItems":100,"items":{"type":"string","minLength":1},"description":"Ids of documents uploaded with `POST /v2/documents` for this person, for example the identity verification attestation."}}}}},"additionalProperties":{}},"relatedCompany":{"type":"object","description":"Related-company disclosure for affiliated entities — a parent, subsidiary, sister company or holding entity. Send only the leaves you want to change.","properties":{"hasRelatedCompany":{"type":"boolean","description":"Yes if the business is part of a corporate group: a subsidiary, a parent company, sibling entities under common ownership, or a holding-company structure. Independent companies that merely share investors do not count."},"companies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Related Company Record ID"},"companyName":{"type":"string","description":"Related Company Name"},"description":{"type":"string","description":"Related Company Description"},"role":{"type":"string","description":"How this related entity is connected to the business — parent, subsidiary, sister/affiliate, or a holding entity. Choose the closest match; this drives how the relationship is documented in the group structure chart.","enum":["Ultimate Parent Company","Subsidiary","Affiliate","Holding Company"]},"ownershipPercent":{"type":"string","description":"Related Company Ownership Percent","pattern":"^(100(\\.0+)?|\\d{1,2}(\\.\\d+)?)$"},"email":{"type":"string","description":"Related Company Email","format":"email"},"phone":{"type":"string","description":"Related Company Phone Number"},"formationDate":{"type":"string","description":"Related Company Formation Date","format":"date"}}}}},"additionalProperties":{}},"certification":{"type":"object","description":"Legal certifications the customer must affirm. Same `mustEqual: true` gating as onboarding.","properties":{"authorityToBind":{"type":"boolean","description":"By checking this box and clicking Submit, I hereby swear, affirm, and attest that I have the requisite internal authority to bind the company submitting the information contained herein."},"consentToElectronicSignatures":{"type":"boolean","description":"I, and the company for which I am submitting the information contained herein, acknowledge and agree that by checking this box and clicking Submit we are electronically signing and such electronic signature is legally binding and enforceable in the same manner as a handwritten signature."},"termsAndConditions":{"description":"The customer's acceptance of Conduit's Terms and Conditions. The acceptance record is the current form. `true` is the earlier form. `GET /v2/onboarding/requirements` shows which form the active rules accept.","anyOf":[{"type":"boolean","enum":[true]},{"type":"object","properties":{"accepted":{"type":"boolean","description":"Read the terms at https://conduitpay.com/terms-of-service"},"acceptedAt":{"type":"string","description":"When the customer accepted, not when you submit this form","format":"date-time"},"acceptedByName":{"type":"string","description":"The person who accepted for the customer","maxLength":140},"acceptedByEmail":{"type":"string","description":"Email of the person who accepted","format":"email","maxLength":254},"ipAddress":{"type":"string","description":"The IP address your customer accepted from, as your platform recorded it. Not your own IP address."},"isAuthenticated":{"type":"boolean","description":"Your customer was signed in to your platform when they accepted"},"version":{"type":"string","description":"Terms version","maxLength":64}}}]},"treasuryOnlyCertification":{"type":"boolean","description":"Certify that this entity will use the Conduit account exclusively for its own treasury operations — not on behalf of clients, customers, or third parties. Required to enroll in the treasury-only product configuration."}},"additionalProperties":{}},"documentIds":{"description":"Customer-level document IDs from `POST /v2/documents` to attach to this update. Per-person documents go on `ownership.persons[i].documentIds[]`.","example":["doc_2xKjF9mQb7vN4hL1pR3w8t"],"maxItems":100,"type":"array","items":{"type":"string","minLength":1}},"clientReferenceId":{"description":"Optional client-supplied identifier for the resulting customer-update application. Useful for reconciling the submission against an external system. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces.","example":"ext-update-2026-05-14-001","type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$"}},"additionalProperties":false},"UpdateHouseAccountDto":{"type":"object","properties":{"isHouseAccount":{"type":"boolean","description":"Whether this customer is the organization's own house account — the only kind of account a `prefunding` payout can be sent from.","example":true}},"required":["isHouseAccount"],"additionalProperties":false},"CreateSelfCustodyAddressDto":{"type":"object","properties":{"type":{"type":"string","description":"Self-custody attestation: the customer signs that the wallet is owned and controlled by them, not a third-party VASP. Requires `selfCustodyAttestation: true`.","enum":["self_custody"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"],"description":"Blockchain network of the address. Lowercase on the wire (e.g. `ethereum`, `polygon`)."},"address":{"type":"string","minLength":1,"maxLength":255,"description":"On-chain destination address, in the encoding its chain uses: EVM chains (`ethereum`, `base`, `polygon`) take a `0x` hex address and reject a mixed-case value whose EIP-55 checksum does not match; `solana` takes a base58 public key; `tron` a base58 address whose base58check checksum must match; `stellar` a `G`-prefixed key whose checksum must match. An address that does not match its chain is rejected with `INVALID_ADDRESS_FORMAT`."},"label":{"description":"Optional human-readable label.","type":"string","maxLength":255},"selfCustodyAttestation":{"type":"boolean","description":"Must be exactly `true` on a self_custody registration. The literal opts the customer into the self-custody attestation; any other value (including absence) is rejected.","enum":[true]}},"required":["type","chain","address","selfCustodyAttestation"],"additionalProperties":false},"CreateThirdPartyAddressDto":{"type":"object","properties":{"type":{"type":"string","description":"Third-party registration: the wallet belongs to a different beneficial owner. Requires `originatorDetails` to satisfy travel-rule disclosure.","enum":["third_party"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"],"description":"Blockchain network of the address. Lowercase on the wire."},"address":{"type":"string","minLength":1,"maxLength":255,"description":"On-chain destination address, in the encoding its chain uses: EVM chains (`ethereum`, `base`, `polygon`) take a `0x` hex address and reject a mixed-case value whose EIP-55 checksum does not match; `solana` takes a base58 public key; `tron` a base58 address whose base58check checksum must match; `stellar` a `G`-prefixed key whose checksum must match. An address that does not match its chain is rejected with `INVALID_ADDRESS_FORMAT`."},"label":{"description":"Optional human-readable label.","type":"string","maxLength":255},"originatorDetails":{"description":"Travel-rule originator disclosure for the address's beneficial owner. Required on third_party registrations.","oneOf":[{"type":"object","properties":{"entityType":{"type":"string","enum":["business"]},"legalName":{"type":"string","minLength":1,"maxLength":255},"country":{"type":"string"}},"required":["entityType","legalName","country"]},{"type":"object","properties":{"entityType":{"type":"string","enum":["individual"]},"firstName":{"type":"string","minLength":1,"maxLength":255},"lastName":{"type":"string","minLength":1,"maxLength":255},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["entityType","firstName","lastName","dateOfBirth","countryOfCitizenship"]}]}},"required":["type","chain","address","originatorDetails"],"additionalProperties":false},"RegisteredAddressResponseDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^wra_[0-9A-Za-z]{22}$","description":"Id of the registered address. Each id has the form `wra_` followed by 22 alphanumeric characters."},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","description":"Customer the address is registered against. Each id has the form `cus_` followed by 22 alphanumeric characters."},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"],"description":"Blockchain network of the address. Lowercase on the wire (e.g. `ethereum`, `polygon`)."},"address":{"type":"string","description":"The registered address, echoed in the normalized form Conduit matches on (lowercase on EVM chains)."},"type":{"description":"Who controls the address. `self_custody` means the customer owns it, and only a `self_custody` address unlocks a payout with `purpose: intercompany` or `purpose: personal_transfer_of_funds`. `third_party` means it belongs to another beneficial owner, described in `originatorDetails`; it clears an inbound transfer but never an `intercompany` or `personal_transfer_of_funds` payout.","type":"string","enum":["self_custody","third_party"]},"status":{"description":"`registered`: screened and usable. `pending_screening`: screening is not finished, so an `intercompany` or `personal_transfer_of_funds` payout to the address is still refused, while an inbound transfer from it is held rather than sent back. `suspended`: blocked — do not retry, contact Conduit. `revoked`: cancelled with `DELETE`. A revoked address stops being usable, but Conduit can restore it on request, so do not treat this status as permanent.","type":"string","enum":["registered","pending_screening","suspended","revoked"]},"label":{"type":"string","description":"Human-readable label given at registration. Null when none was given.","nullable":true},"originatorDetails":{"oneOf":[{"type":"object","properties":{"entityType":{"type":"string","description":"The address belongs to a business.","enum":["business"]},"legalName":{"type":"string","description":"Legal name of the business that owns the address."},"country":{"description":"Country the business is registered in, as an ISO 3166-1 alpha-2 or alpha-3 code.","type":"string"}},"required":["entityType","legalName","country"]},{"type":"object","properties":{"entityType":{"type":"string","description":"The address belongs to a person.","enum":["individual"]},"firstName":{"type":"string","description":"Given name of the person who owns the address."},"lastName":{"type":"string","description":"Family name of the person who owns the address."},"dateOfBirth":{"type":"string","description":"Date of birth of the person who owns the address.","format":"date","example":"1985-04-12"},"countryOfCitizenship":{"description":"Country the person is a citizen of, as an ISO 3166-1 alpha-2 or alpha-3 code.","type":"string"}},"required":["entityType","firstName","lastName","dateOfBirth","countryOfCitizenship"]},{"type":"object","nullable":true,"enum":[null]}],"description":"Beneficial owner of a `third_party` address, disclosed at registration. Null on a `self_custody` address, where the customer is the owner."},"selfCustodyAttestation":{"type":"boolean","description":"`true` when the customer attested that they own and control the address. Null on a `third_party` address.","nullable":true},"attestedAt":{"type":"string","format":"date-time","description":"When the customer made the self-custody attestation. Null on a `third_party` address.","example":"2026-01-15T09:30:00.000Z","nullable":true},"screenedAt":{"type":"string","format":"date-time","description":"When the address was screened.","example":"2026-01-15T09:30:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"When the address was registered.","example":"2026-01-15T09:30:00.000Z"}},"required":["id","customerId","chain","address","type","status","label","originatorDetails","selfCustodyAttestation","attestedAt","screenedAt","createdAt"]},"RegisteredAddressListResponseDto":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^wra_[0-9A-Za-z]{22}$","description":"Id of the registered address. Each id has the form `wra_` followed by 22 alphanumeric characters."},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","description":"Customer the address is registered against. Each id has the form `cus_` followed by 22 alphanumeric characters."},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"],"description":"Blockchain network of the address. Lowercase on the wire (e.g. `ethereum`, `polygon`)."},"address":{"type":"string","description":"The registered address, echoed in the normalized form Conduit matches on (lowercase on EVM chains)."},"type":{"description":"Who controls the address. `self_custody` means the customer owns it, and only a `self_custody` address unlocks a payout with `purpose: intercompany` or `purpose: personal_transfer_of_funds`. `third_party` means it belongs to another beneficial owner, described in `originatorDetails`; it clears an inbound transfer but never an `intercompany` or `personal_transfer_of_funds` payout.","type":"string","enum":["self_custody","third_party"]},"status":{"description":"`registered`: screened and usable. `pending_screening`: screening is not finished, so an `intercompany` or `personal_transfer_of_funds` payout to the address is still refused, while an inbound transfer from it is held rather than sent back. `suspended`: blocked — do not retry, contact Conduit. `revoked`: cancelled with `DELETE`. A revoked address stops being usable, but Conduit can restore it on request, so do not treat this status as permanent.","type":"string","enum":["registered","pending_screening","suspended","revoked"]},"label":{"type":"string","description":"Human-readable label given at registration. Null when none was given.","nullable":true},"originatorDetails":{"oneOf":[{"type":"object","properties":{"entityType":{"type":"string","description":"The address belongs to a business.","enum":["business"]},"legalName":{"type":"string","description":"Legal name of the business that owns the address."},"country":{"description":"Country the business is registered in, as an ISO 3166-1 alpha-2 or alpha-3 code.","type":"string"}},"required":["entityType","legalName","country"]},{"type":"object","properties":{"entityType":{"type":"string","description":"The address belongs to a person.","enum":["individual"]},"firstName":{"type":"string","description":"Given name of the person who owns the address."},"lastName":{"type":"string","description":"Family name of the person who owns the address."},"dateOfBirth":{"type":"string","description":"Date of birth of the person who owns the address.","format":"date","example":"1985-04-12"},"countryOfCitizenship":{"description":"Country the person is a citizen of, as an ISO 3166-1 alpha-2 or alpha-3 code.","type":"string"}},"required":["entityType","firstName","lastName","dateOfBirth","countryOfCitizenship"]},{"type":"object","nullable":true,"enum":[null]}],"description":"Beneficial owner of a `third_party` address, disclosed at registration. Null on a `self_custody` address, where the customer is the owner."},"selfCustodyAttestation":{"type":"boolean","description":"`true` when the customer attested that they own and control the address. Null on a `third_party` address.","nullable":true},"attestedAt":{"type":"string","format":"date-time","description":"When the customer made the self-custody attestation. Null on a `third_party` address.","example":"2026-01-15T09:30:00.000Z","nullable":true},"screenedAt":{"type":"string","format":"date-time","description":"When the address was screened.","example":"2026-01-15T09:30:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"When the address was registered.","example":"2026-01-15T09:30:00.000Z"}},"required":["id","customerId","chain","address","type","status","label","originatorDetails","selfCustodyAttestation","attestedAt","screenedAt","createdAt"]}},"meta":{"type":"object","properties":{"mode":{"type":"string","description":"Pagination mode","example":"cursor","enum":["cursor"]},"nextCursor":{"type":"string","description":"Cursor for the page after this one. Use it with `direction=forward`; it is `null` when no more rows follow. A backward page always carries one, so do not loop on it while `direction=backward`.","example":"eyJpZCI6ImN1c18yeFBxTjhSIn0","nullable":true},"previousCursor":{"type":"string","description":"Cursor for the page before this one. Use it with `direction=backward`. It is `null` on the first page of a forward walk and when no earlier rows remain.","example":null,"nullable":true},"total":{"type":"number","description":"Total number of records matching the query","example":42}},"required":["mode","nextCursor","previousCursor","total"]}},"required":["data","meta"]},"ClaimNonCustodialDto":{"type":"object","properties":{"roster":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"email":{"description":"Signer's email address. Lowercased on receipt, and the identity they activate their signer with.","type":"string","format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"name":{"description":"Signer's display name, shown on approval screens.","type":"string"},"role":{"type":"string","enum":["admin","signer"],"description":"How much authority this signer holds. A business roster has exactly 2 admins. An individual's roster has exactly one admin."},"credentialType":{"type":"string","enum":["passkey","api_key"],"description":"How this signer will stamp. `api_key` requires `publicKey`."},"signatureScheme":{"description":"Signature scheme an api_key signer stamps with: `p256` (default when omitted), `secp256k1`, or `secp256k1_eip191` (EVM personal_sign). Ignored for passkeys. The public key must be a valid point on the matching curve.","type":"string","enum":["p256","secp256k1","secp256k1_eip191"]},"publicKey":{"description":"Machine-signer compressed public key (33 bytes, 02/03 prefix + 64 hex chars, optional 0x prefix), on the curve of the selected `signatureScheme`. Required when credentialType=api_key.","example":"02a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2","pattern":"^(?:0x)?(?:02|03)[0-9a-fA-F]{64}$","type":"string"}},"required":["email","role","credentialType"],"additionalProperties":false},"description":"Everyone who will be able to approve on this wallet. Each member activates their own signer afterwards. A business customer's roster has exactly 2 admins. An individual customer's roster has exactly one admin and at most one person: the person is the member under the individual's email on file, with `credentialType: passkey`, is the admin, and enrolls two passkeys before the wallet activates; every other member is an `api_key` signer. Under programmatic unattended the roster can instead be one `api_key` admin and `api_key` signers."},"signingThreshold":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"How many roster members must approve before a transaction is signed. At least 1, and never more than the roster size."},"chains":{"description":"Optional. Chains to provision (each must be a supported chain). Omit to auto-provision each default chain that settles in this environment (recommended) so later chain use needs no re-authentication. Accepting a chain here does not imply Conduit operationally supports asset movement on it yet.","minItems":1,"maxItems":100,"type":"array","items":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]}}},"required":["roster","signingThreshold"],"additionalProperties":false},"ClaimNonCustodialResponse":{"type":"object","properties":{"claimId":{"type":"string","pattern":"^wcc_[0-9A-Za-z]{22}$","description":"Id of this claim, carried by the webhooks that report its progress. Each id has the form `wcc_` followed by 22 alphanumeric characters."},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","description":"Customer the wallets are provisioned for. Each id has the form `cus_` followed by 22 alphanumeric characters."},"status":{"type":"string","description":"Always `provisioning`: the claim was accepted and the wallets are being set up in the background. Wait for the `wallet_signer.*` and `crypto_wallet.completed` webhooks.","enum":["provisioning"]},"rosterSize":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"How many signers the claim put on the roster."},"signingThreshold":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991,"description":"How many signer stamps each payout needs to proceed. Separate from activation, which waits for every roster member to enroll."},"estimatedActivationCompletionMinutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Advisory estimate of minutes to full activation (not an SLA)."}},"required":["claimId","customerId","status","rosterSize","signingThreshold","estimatedActivationCompletionMinutes"]},"CreateWalletDto":{"type":"object","properties":{"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"],"description":"Blockchain network for the new wallet"},"clientReferenceId":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces."}},"required":["chain"],"additionalProperties":false},"WalletResponse":{"type":"object","properties":{"id":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$","description":"Unique wallet identifier","example":"wlt_2xKjF9mQb7vN4hL1pR3w8t"},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"],"description":"Blockchain network of the wallet"},"address":{"type":"string","description":"On-chain wallet address, null while provisioning","example":"0x742d35Cc6634C0532925a3b844Bc9e7595f2bD18","nullable":true},"status":{"description":"Current wallet lifecycle status","type":"string","enum":["pending","active","disabled"]},"custodyModel":{"description":"`non_custodial` — the customer co-signs each payout via the verify URL (see `requiresUserSignature` on payouts). `custodial` is a return-only value for legacy/operational wallets. Omitted until the custody model is determined.","type":"string","enum":["non_custodial","custodial"]},"rotatedAt":{"description":"Timestamp of the last key rotation, omitted until rotated","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"replacedByWalletId":{"description":"ID of the wallet that replaced this one after rotation, omitted until rotated","type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"clientReferenceId":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces."},"balances":{"type":"array","items":{"type":"object","properties":{"available":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"pending":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"frozen":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["available","pending","frozen"],"description":"Balance for one asset on an account: available, pending, and frozen buckets all in the same asset. Frozen is money under a compliance hold or on a bank account the bank has blocked."},"description":"Wallet balances by asset"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the wallet was created","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp when the wallet was last updated","example":"2026-01-15T09:30:00.000Z"}},"required":["id","chain","address","status","balances","createdAt","updatedAt"]},"WalletCreateCeremonyPendingResponse":{"type":"object","properties":{"ceremonyId":{"type":"string","pattern":"^wcm_[0-9A-Za-z]{22}$","description":"Ceremony ID for the pending wallet provisioning"},"verificationUrl":{"type":"string","description":"URL for admin approval of the ceremony"}},"required":["ceremonyId","verificationUrl"]},"WalletListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$","description":"Unique wallet identifier","example":"wlt_2xKjF9mQb7vN4hL1pR3w8t"},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"],"description":"Blockchain network of the wallet"},"address":{"type":"string","description":"On-chain wallet address, null while provisioning","example":"0x742d35Cc6634C0532925a3b844Bc9e7595f2bD18","nullable":true},"status":{"description":"Current wallet lifecycle status","type":"string","enum":["pending","active","disabled"]},"custodyModel":{"description":"`non_custodial` — the customer co-signs each payout via the verify URL (see `requiresUserSignature` on payouts). `custodial` is a return-only value for legacy/operational wallets. Omitted until the custody model is determined.","type":"string","enum":["non_custodial","custodial"]},"rotatedAt":{"description":"Timestamp of the last key rotation, omitted until rotated","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"replacedByWalletId":{"description":"ID of the wallet that replaced this one after rotation, omitted until rotated","type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"clientReferenceId":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces."},"balances":{"type":"array","items":{"type":"object","properties":{"available":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"pending":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"frozen":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["available","pending","frozen"],"description":"Balance for one asset on an account: available, pending, and frozen buckets all in the same asset. Frozen is money under a compliance hold or on a bank account the bank has blocked."},"description":"Wallet balances by asset"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the wallet was created","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp when the wallet was last updated","example":"2026-01-15T09:30:00.000Z"}},"required":["id","chain","address","status","balances","createdAt","updatedAt"]},"description":"List of wallets"},"meta":{"type":"object","properties":{"mode":{"type":"string","description":"Pagination mode","example":"cursor","enum":["cursor"]},"nextCursor":{"type":"string","description":"Cursor for the page after this one. Use it with `direction=forward`; it is `null` when no more rows follow. A backward page always carries one, so do not loop on it while `direction=backward`.","example":"eyJpZCI6ImN1c18yeFBxTjhSIn0","nullable":true},"previousCursor":{"type":"string","description":"Cursor for the page before this one. Use it with `direction=backward`. It is `null` on the first page of a forward walk and when no earlier rows remain.","example":null,"nullable":true},"total":{"type":"number","description":"Total number of records matching the query","example":42}},"required":["mode","nextCursor","previousCursor","total"],"description":"Pagination metadata"}},"required":["data","meta"]},"ClaimStatusListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"claimId":{"type":"string","pattern":"^wcc_[0-9A-Za-z]{22}$"},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$"},"status":{"description":"provisioning while signers enroll and the wallet activates; completed once activated; failed if provisioning could not complete.","type":"string","enum":["provisioning","completed","failed"]},"rosterSize":{"type":"integer","minimum":0,"maximum":9007199254740991},"signingThreshold":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"chains":{"type":"array","items":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"description":"Chains provisioned for the claim. When the claim request omits `chains`, each default chain that settles in this environment is provisioned. A wallet address is created on each; note that Solana is address-only for now — it is not in the default set (request it explicitly), and payouts on Solana are not yet available for non-custodial wallets."},"estimatedActivationCompletionMinutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Advisory estimate of minutes to full activation (not an SLA)."},"walletIds":{"description":"Wallets activated by the claim; omitted until completed.","type":"array","items":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"}},"failureReason":{"description":"Human-readable reason a failed claim could not be provisioned.","type":"string"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"completedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"failedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"}},"required":["claimId","customerId","status","rosterSize","signingThreshold","chains","estimatedActivationCompletionMinutes","createdAt","updatedAt"]}},"meta":{"type":"object","properties":{"mode":{"type":"string","description":"Pagination mode","example":"cursor","enum":["cursor"]},"nextCursor":{"type":"string","description":"Cursor for the page after this one. Use it with `direction=forward`; it is `null` when no more rows follow. A backward page always carries one, so do not loop on it while `direction=backward`.","example":"eyJpZCI6ImN1c18yeFBxTjhSIn0","nullable":true},"previousCursor":{"type":"string","description":"Cursor for the page before this one. Use it with `direction=backward`. It is `null` on the first page of a forward walk and when no earlier rows remain.","example":null,"nullable":true},"total":{"type":"number","description":"Total number of records matching the query","example":42}},"required":["mode","nextCursor","previousCursor","total"]}},"required":["data","meta"]},"ClaimStatusResponse":{"type":"object","properties":{"claimId":{"type":"string","pattern":"^wcc_[0-9A-Za-z]{22}$"},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$"},"status":{"description":"provisioning while signers enroll and the wallet activates; completed once activated; failed if provisioning could not complete.","type":"string","enum":["provisioning","completed","failed"]},"rosterSize":{"type":"integer","minimum":0,"maximum":9007199254740991},"signingThreshold":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"chains":{"type":"array","items":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"description":"Chains provisioned for the claim. When the claim request omits `chains`, each default chain that settles in this environment is provisioned. A wallet address is created on each; note that Solana is address-only for now — it is not in the default set (request it explicitly), and payouts on Solana are not yet available for non-custodial wallets."},"estimatedActivationCompletionMinutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Advisory estimate of minutes to full activation (not an SLA)."},"walletIds":{"description":"Wallets activated by the claim; omitted until completed.","type":"array","items":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"}},"failureReason":{"description":"Human-readable reason a failed claim could not be provisioned.","type":"string"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"completedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"failedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"signers":{"type":"array","items":{"type":"object","properties":{"walletSignerId":{"type":"string","pattern":"^wsg_[0-9A-Za-z]{22}$"},"email":{"type":"string","description":"Signer's email address"},"role":{"description":"Signer role","type":"string","enum":["admin","signer"]},"status":{"description":"Signer enrollment status; a non-active signer on a still-provisioning claim is the one holding activation up.","type":"string","enum":["pending_activation","activating","active","pending_removal","removed","error"]},"error":{"description":"Failure reason when the signer is in ERROR (e.g. email mismatch); omitted otherwise. Surfaces which signer wedged a stalled claim.","type":"string"}},"required":["walletSignerId","email","role","status"]},"description":"Roster signers and their enrollment status."}},"required":["claimId","customerId","status","rosterSize","signingThreshold","chains","estimatedActivationCompletionMinutes","createdAt","updatedAt","signers"]},"AccountBalancesResponse":{"type":"object","properties":{"date":{"description":"The UTC day the balances close, as YYYY-MM-DD. Absent when the balances are the ones the account holds now.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"balances":{"type":"array","items":{"type":"object","properties":{"available":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"pending":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"frozen":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["available","pending","frozen"],"description":"Balance for one asset on an account: available, pending, and frozen buckets all in the same asset. Frozen is money under a compliance hold or on a bank account the bank has blocked."},"description":"One element for each asset the account holds."}},"required":["balances"],"description":"What an account holds, at the end of a past UTC day or at this moment."},"AccountStatementResponse":{"type":"object","properties":{"account":{"type":"object","properties":{"type":{"type":"string","enum":["wallet","virtual_account"]},"id":{"type":"string"}},"required":["type","id"],"description":"The account the statement covers."},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code identifier","example":"USD"},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"description":"Blockchain network. `null`/omitted for fiat assets.","nullable":true}},"required":["code"]},"period":{"type":"object","properties":{"from":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"to":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["from","to"],"description":"The UTC days the statement covers. Both days are included."},"openingBalance":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false,"description":"What the account held when the period began."},"closingBalance":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false,"description":"What the account held when the period ended."},"totals":{"type":"object","properties":{"credits":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false,"description":"What came into the account."},"debits":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false,"description":"What left the account. Fees are part of this amount."},"fees":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false,"description":"What Conduit charged over the period. It is already inside every line's `net`, so it is reflected in `credits` or in `debits` and must be added to neither."}},"required":["credits","debits","fees"],"description":"The movement over the whole period."},"lines":{"type":"array","items":{"type":"object","properties":{"completedAt":{"type":"string","format":"date-time","description":"The instant the transaction completed. The same instant `completedAt` carries on the transaction.","example":"2026-01-15T09:30:00.000Z"},"transactionId":{"type":"string","description":"The transaction this line reports. Read it on `/v2/transactions/:id`."},"type":{"description":"The type of that transaction, such as `deposit` or `withdrawal`.","type":"string","enum":["deposit","onramp","offramp","withdrawal","conversion","fiat_conversion","deposit_return"]},"description":{"description":"The customer's own words for the payment. Omitted when none was sent.","type":"string"},"reference":{"description":"The `clientReferenceId` you gave the transaction, where you gave one.","type":"string"},"swiftUetr":{"description":"The UETR of the fiat leg, the ISO 20022 unique end-to-end transaction reference. A Fedwire message carries one too, so its presence does not mean the payment travelled on SWIFT. Omitted when the rail supplied none.","type":"string"},"counterparty":{"description":"Who the money came from, or who it went to. Absent where the transaction names nobody a client can read.","type":"object","properties":{"name":{"type":"string"},"accountNumberLast4":{"type":"string"}}},"amount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false,"description":"What the payment itself was worth, before Conduit's fee. Negative when it left the account."},"fee":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false,"description":"What Conduit charged the account for that transaction, as a negative amount. A fee Conduit invoices to you monthly is not here."},"net":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false,"description":"`amount` plus `fee`. This is what the balance moved by."},"balanceAfter":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false,"description":"What the account held after this line."}},"required":["completedAt","transactionId","type","amount","fee","net","balanceAfter"],"description":"One completed transaction on the account."},"description":"One page of lines, oldest first. `openingBalance`, `closingBalance` and `totals` cover the whole period on every page."},"meta":{"type":"object","properties":{"mode":{"type":"string","description":"Pagination mode","example":"cursor","enum":["cursor"]},"nextCursor":{"type":"string","description":"Cursor for the next page. Send it as `cursor` with the same query. It is `null` on the last page.","example":"eyJpZCI6ImN1c18yeFBxTjhSIn0","nullable":true}},"required":["mode","nextCursor"]}},"required":["account","asset","period","openingBalance","closingBalance","totals","lines","meta"],"description":"Every transaction that completed on an account over a period, with what the account held before and after."},"AddWalletSignerDto":{"type":"object","properties":{"email":{"type":"string","format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$","description":"Email address of the signer to add","example":"signer@example.com"},"name":{"description":"Display name of the signer","example":"Jane Doe","type":"string"},"role":{"description":"Only `signer` is accepted. A business has exactly 2 admins, set at the claim; `admin` returns 409 ROOT_AT_CAPACITY_SWAP_REQUIRED. To make someone an admin, add them as a signer, then promote them with `demoteSignerId`.","type":"string","enum":["admin","signer"]},"credentialType":{"description":"How this signer will stamp. api_key requires `publicKey`.","type":"string","enum":["passkey","api_key"]},"signatureScheme":{"description":"Signature scheme an api_key signer stamps with: `p256` (default when omitted), `secp256k1`, or `secp256k1_eip191` (EVM personal_sign). Ignored for passkeys. The public key must be a valid point on the matching curve.","type":"string","enum":["p256","secp256k1","secp256k1_eip191"]},"publicKey":{"description":"Machine-signer compressed public key (33 bytes, 02/03 prefix + 64 hex chars, optional 0x prefix), on the curve of the selected `signatureScheme`. Required when credentialType=api_key.","example":"02a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2","pattern":"^(?:0x)?(?:02|03)[0-9a-fA-F]{64}$","type":"string"}},"required":["email"],"additionalProperties":false},"AddWalletSignerResponseDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^wsg_[0-9A-Za-z]{22}$","description":"Unique wallet signer identifier"},"email":{"type":"string","description":"Signer's email address","example":"signer@example.com"},"name":{"type":"string","description":"Signer's display name","example":"Jane Doe","nullable":true},"role":{"description":"admin = approves roster and governance changes and signs; signer = signs only. A business has exactly 2 admins, an individual 1.","type":"string","enum":["admin","signer"]},"credentialType":{"description":"How this signer stamps requests","type":"string","enum":["passkey","api_key"]},"passkeyCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of passkeys enrolled for this signer","example":0},"status":{"description":"Current signer status","type":"string","enum":["pending_activation","activating","active","pending_removal","removed","error"]},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the signer was created","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp when the signer was last updated","example":"2026-01-15T09:30:00.000Z"},"verificationUrl":{"type":"string","description":"Synchronous URL for this add, or null when none applies. Read `urlAudience` to know who it is for before delivering it — a passkey add returns the signer's enrollment link, an api_key add pending approval returns a customer admin's co-stamp link. On a live roster a `\"signer\"` link is the FIRST of two links, not full self-service: after the signer enrolls their passkey the add parks a roster-add ceremony for an admin co-stamp, whose link arrives only on the `wallet_ceremony.awaiting_admin_approval` webhook (carrying the ceremony's `ceremonyId`).","example":"https://app.conduit.financial/verify/mtQzSU2hdy0DuZ6za2IHIoVDgXzshrFtN38kMULRDFw","nullable":true},"urlAudience":{"type":"string","enum":["signer","admin",null],"description":"Audience of `verificationUrl`: `signer` = the new signer's credential-enrollment link (deliver to the signer) — on a live roster this is only the first of two links, the second being an admin co-stamp delivered on the `wallet_ceremony.awaiting_admin_approval` webhook; `admin` = a customer admin's approval link (deliver to an admin; also delivered via the `wallet_ceremony.awaiting_admin_approval` webhook); null when there is no URL.","nullable":true},"awaitingProvider":{"description":"True only while the parked activity is still resolving at the custody provider — `verificationUrl`/`urlAudience` are null here too, but unlike a synchronously-admitted add there is a `ceremonyId` to track and nothing yet for any human to approve. Absent on every other outcome.","type":"boolean","enum":[true]},"machineApproval":{"description":"Additional material for a machine (api_key) add that parks for approval on a roster carrying an ACTIVE api_key admin. It is handed back ALONGSIDE `verificationUrl` (`urlAudience: \"admin\"`) and the `wallet_ceremony.awaiting_admin_approval` webhook, which are always present — approve either way. Stamp `approvalMaterial` with an ACTIVE api_key admin's machine key, under the signature scheme that admin is enrolled with, and POST `{ method: \"api_key\", credential }` to `/v2/verifications/{token}/complete` (credential is `{ signedBody, stamp, organizationId }` as a nested JSON object; a JSON string of the same is deprecated and will be rejected in a future release) to activate the signer — the same stamp-and-approve step every machine governance ceremony uses. Absent when the roster has no api_key admin to stamp.","type":"object","properties":{"token":{"type":"string","description":"Verification token. Approve by POSTing the admin stamp to `/v2/verifications/{token}/complete` as `{ method: \"api_key\", credential }`, where credential is `{ signedBody, stamp, organizationId }` as a nested JSON object (a JSON string of the same is deprecated and will be rejected in a future release)."},"approvalMaterial":{"type":"object","properties":{"activityId":{"type":"string","description":"Signing activity id the admin stamp approves."},"fingerprint":{"type":"string","description":"Activity fingerprint the stamped body must carry."},"subOrganizationId":{"type":"string","description":"Signing sub-organization the stamp must target."}},"required":["activityId","fingerprint","subOrganizationId"]}},"required":["token","approvalMaterial"]}},"required":["id","email","name","role","credentialType","passkeyCount","status","createdAt","updatedAt","verificationUrl","urlAudience"]},"ReissueInviteResponseDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^wsg_[0-9A-Za-z]{22}$","description":"Unique wallet signer identifier"},"email":{"type":"string","description":"Signer's email address","example":"signer@example.com"},"name":{"type":"string","description":"Signer's display name","example":"Jane Doe","nullable":true},"role":{"description":"admin = approves roster and governance changes and signs; signer = signs only. A business has exactly 2 admins, an individual 1.","type":"string","enum":["admin","signer"]},"credentialType":{"description":"How this signer stamps requests","type":"string","enum":["passkey","api_key"]},"passkeyCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of passkeys enrolled for this signer","example":0},"status":{"description":"Current signer status","type":"string","enum":["pending_activation","activating","active","pending_removal","removed","error"]},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the signer was created","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp when the signer was last updated","example":"2026-01-15T09:30:00.000Z"},"verificationUrl":{"type":"string","description":"Synchronous URL for this add, or null when none applies. Read `urlAudience` to know who it is for before delivering it — a passkey add returns the signer's enrollment link, an api_key add pending approval returns a customer admin's co-stamp link. On a live roster a `\"signer\"` link is the FIRST of two links, not full self-service: after the signer enrolls their passkey the add parks a roster-add ceremony for an admin co-stamp, whose link arrives only on the `wallet_ceremony.awaiting_admin_approval` webhook (carrying the ceremony's `ceremonyId`).","example":"https://app.conduit.financial/verify/mtQzSU2hdy0DuZ6za2IHIoVDgXzshrFtN38kMULRDFw","nullable":true},"urlAudience":{"type":"string","enum":["signer","admin",null],"description":"Audience of `verificationUrl`: `signer` = the new signer's credential-enrollment link (deliver to the signer) — on a live roster this is only the first of two links, the second being an admin co-stamp delivered on the `wallet_ceremony.awaiting_admin_approval` webhook; `admin` = a customer admin's approval link (deliver to an admin; also delivered via the `wallet_ceremony.awaiting_admin_approval` webhook); null when there is no URL.","nullable":true},"expiresAt":{"type":"string","format":"date-time","description":"When the reissued verification link expires (hard TTL).","example":"2026-01-15T09:30:00.000Z"}},"required":["id","email","name","role","credentialType","passkeyCount","status","createdAt","updatedAt","verificationUrl","urlAudience","expiresAt"]},"ReissueAdminApprovalResponseDto":{"type":"object","properties":{"signerId":{"type":"string","pattern":"^wsg_[0-9A-Za-z]{22}$","description":"The signer whose pending admin approval this link co-stamps."},"ceremonyId":{"type":"string","description":"The wallet ceremony this approval belongs to. Null for an extra passkey on a signer who is already enrolled: that add carries no ceremony id, so key your handling on `signerId`.","pattern":"^wcm_[0-9A-Za-z]{22}$","nullable":true},"adminVerificationUrl":{"type":"string","format":"uri","description":"The live Conduit-hosted admin co-stamp link — deliver it to an admin. Unchanged on repeat calls (no rotation)."}},"required":["signerId","ceremonyId","adminVerificationUrl"]},"SignerRecoveryResponseDto":{"type":"object","properties":{"signerId":{"type":"string","pattern":"^wsg_[0-9A-Za-z]{22}$","description":"The signer who lost a passkey"},"ceremonyId":{"type":"string","description":"Recovery ceremony. The `wallet_ceremony.*` events of type `recovery` carry the same id."},"verificationUrl":{"type":"string","format":"uri","description":"Conduit-hosted recovery link to route the signer to. The signer creates the new passkey and confirms the change with the passkey they kept.","example":"https://app.conduit.financial/verify/mtQzSU2hdy0DuZ6za2IHIoVDgXzshrFtN38kMULRDFw"},"expiresAt":{"type":"string","format":"date-time","description":"When the link expires. Call the endpoint again for a fresh link.","example":"2026-01-15T09:30:00.000Z"}},"required":["signerId","ceremonyId","verificationUrl","expiresAt"]},"WalletSignerListResponseDto":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^wsg_[0-9A-Za-z]{22}$","description":"Unique wallet signer identifier"},"email":{"type":"string","description":"Signer's email address","example":"signer@example.com"},"name":{"type":"string","description":"Signer's display name","example":"Jane Doe","nullable":true},"role":{"description":"admin = approves roster and governance changes and signs; signer = signs only. A business has exactly 2 admins, an individual 1.","type":"string","enum":["admin","signer"]},"credentialType":{"description":"How this signer stamps requests","type":"string","enum":["passkey","api_key"]},"passkeyCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of passkeys enrolled for this signer","example":0},"status":{"description":"Current signer status","type":"string","enum":["pending_activation","activating","active","pending_removal","removed","error"]},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the signer was created","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp when the signer was last updated","example":"2026-01-15T09:30:00.000Z"}},"required":["id","email","name","role","credentialType","passkeyCount","status","createdAt","updatedAt"]},"description":"List of wallet signers"},"meta":{"type":"object","properties":{"mode":{"type":"string","description":"Pagination mode","example":"cursor","enum":["cursor"]},"nextCursor":{"type":"string","description":"Cursor for the page after this one. Use it with `direction=forward`; it is `null` when no more rows follow. A backward page always carries one, so do not loop on it while `direction=backward`.","example":"eyJpZCI6ImN1c18yeFBxTjhSIn0","nullable":true},"previousCursor":{"type":"string","description":"Cursor for the page before this one. Use it with `direction=backward`. It is `null` on the first page of a forward walk and when no earlier rows remain.","example":null,"nullable":true},"total":{"type":"number","description":"Total number of records matching the query","example":42}},"required":["mode","nextCursor","previousCursor","total"],"description":"Pagination metadata"}},"required":["data","meta"]},"PromoteSignerDto":{"type":"object","properties":{"demoteSignerId":{"description":"Wallet-signer id (wsg_…) of the admin to replace. In the same ceremony that admin becomes a signer. Without it the promote returns 409 ROOT_AT_CAPACITY_SWAP_REQUIRED.","example":"wsg_034A1PiBr2b8JduxWEpO3E","type":"string","pattern":"^wsg_[0-9A-Za-z]{22}$"}},"default":{},"additionalProperties":false},"RosterUpdateCeremonyResponseDto":{"type":"object","properties":{"ceremonyId":{"type":"string","pattern":"^wcm_[0-9A-Za-z]{22}$","description":"Identifier for the roster-update ceremony; completion is reported via wallet_signer.promoted / wallet_signer.demoted webhooks."}},"required":["ceremonyId"]},"SigningQuorumResponseDto":{"type":"object","properties":{"threshold":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Customer-level number of approvals required by default.","example":2},"pendingThreshold":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Customer-level threshold awaiting signer approval, or null when no change is pending.","nullable":true},"eligibleSigners":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Number of active signers that can approve transactions.","example":3},"wallets":{"type":"array","items":{"type":"object","properties":{"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$","description":"Wallet this quorum entry describes"},"threshold":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Effective number of approvals required for this wallet (the override when set, otherwise the customer-level threshold).","example":2},"override":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Per-wallet override of the customer threshold, or null when the wallet inherits the customer threshold.","nullable":true},"pendingOverride":{"oneOf":[{"type":"object","properties":{"action":{"type":"string","enum":["set"]},"threshold":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Override value awaiting approval."}},"required":["action","threshold"]},{"type":"object","properties":{"action":{"type":"string","enum":["clear"]}},"required":["action"]},{"type":"object","nullable":true,"enum":[null]}],"description":"Pending per-wallet override change awaiting signer approval: `{action:'set',threshold}` to set/raise/lower, `{action:'clear'}` to remove the override, or null when no change is pending."}},"required":["walletId","threshold","override","pendingOverride"]},"description":"Per-wallet quorum configuration."}},"required":["threshold","pendingThreshold","eligibleSigners","wallets"]},"SetSigningQuorumDto":{"type":"object","properties":{"threshold":{"type":"integer","minimum":1,"maximum":100,"description":"Number of eligible signers required to approve a transaction. Must not exceed the number of active signers.","example":2}},"required":["threshold"],"additionalProperties":false},"QuorumChangeResponseDto":{"type":"object","properties":{"status":{"description":"active when the change applied immediately; pending_approval when signer approval is required.","type":"string","enum":["active","pending_approval"]},"verificationUrl":{"type":"string","description":"URL for signers to approve the change when pending_approval, otherwise null.","example":"https://app.conduit.financial/verify/mtQzSU2hdy0DuZ6za2IHIoVDgXzshrFtN38kMULRDFw","nullable":true}},"required":["status","verificationUrl"]},"ClaimResetResponseDto":{"type":"object","properties":{"customerId":{"type":"string"},"removedProviderAccount":{"type":"boolean"},"removedSignerCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"removedCeremonyCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"removedClaimCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"removedFeatureRow":{"type":"boolean"}},"required":["customerId","removedProviderAccount","removedSignerCount","removedCeremonyCount","removedClaimCount","removedFeatureRow"]},"SimulateScreeningDecisionDtoClass":{"type":"object","properties":{"outcome":{"type":"string","enum":["approve","reject"],"description":"`approve` clears the screening review: the address becomes registered and deposits from it that were waiting on registration resume. `reject` confirms the hit: the address is suspended as sanctions-blocked (not reversible) and re-registration of the same address stays barred."}},"required":["outcome"],"additionalProperties":false},"VirtualAccountListResponseClass":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$","description":"Id of the virtual account. Each id has the form `vac_` followed by 22 alphanumeric characters."},"status":{"description":"`pending_activation`: the account was requested and is still being set up, so nobody can pay into it yet. `active`: the customer can be paid into it. `disabled`: the account takes no new deposits.","type":"string","enum":["pending_activation","active","disabled"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code identifier","example":"USD"},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"description":"Blockchain network. `null`/omitted for fiat assets.","nullable":true}},"required":["code"]},"balances":{"type":"array","items":{"type":"object","properties":{"available":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"pending":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"frozen":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["available","pending","frozen"],"description":"Balance for one asset on an account: available, pending, and frozen buckets all in the same asset. Frozen is money under a compliance hold or on a bank account the bank has blocked."},"description":"What the account holds, in the account's own asset."},"activatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z","nullable":true},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"depositInstructions":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["us_domestic"]},"currency":{"type":"string","enum":["USD"],"description":"Currency this block collects. Always USD: ACH, Fedwire and RTP are US clearing networks and settle dollars only."},"accountNumber":{"type":"string"},"beneficiaryName":{"type":"string"},"beneficiaryAddress":{"type":"string"},"beneficiaryPostalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"]},"bank":{"type":"object","properties":{"legalName":{"type":"string"},"address":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"]},"bic":{"type":"string"}},"required":["legalName","address"]},"paymentReference":{"type":"string"},"paymentReferenceRequired":{"description":"True when the payer must put paymentReference in the transfer memo. The collecting account is shared, so the reference is what names the destination; a missing or incorrect one delays credit.","type":"boolean"},"rails":{"minItems":1,"type":"array","items":{"type":"object","properties":{"rail":{"anyOf":[{"type":"string","enum":["ach"]},{"type":"string","enum":["fedwire"]},{"type":"string","enum":["rtp"]}]},"routingNumber":{"type":"string"},"sameDayEligible":{"type":"boolean"},"networks":{"type":"array","items":{"type":"string","enum":["tch","fednow"]}},"fednowCap":{"type":"string"}},"required":["rail","routingNumber"]},"description":"US domestic networks this account collects on. Every entry carries its own routing number; the payer picks one network."}},"required":["type","currency","accountNumber","beneficiaryName","rails"],"description":"Domestic US clearing coordinates: an account number plus one routing number per network (ACH, Fedwire, RTP).","example":{"type":"us_domestic","currency":"USD","accountNumber":"123456789","beneficiaryName":"Example Customer","beneficiaryAddress":"1 Main St, New York, NY","bank":{"legalName":"Example Bank","address":"2 Bank St, New York, NY","postalAddress":{"addressLine1":"2 Bank St","city":"New York","state":"NY","postalCode":"10005","country":"US"}},"rails":[{"rail":"ach","routingNumber":"021000021","sameDayEligible":false},{"rail":"fedwire","routingNumber":"021000021"},{"rail":"rtp","routingNumber":"021000021","networks":["tch"]}]}},{"type":"object","properties":{"type":{"type":"string","enum":["swift"]},"currency":{"type":"string","enum":["AED","ARS","AUD","BRL","CAD","CHF","CLP","CNY","COP","CZK","DKK","EGP","EUR","GBP","GHS","HKD","HUF","IDR","ILS","INR","JPY","KES","KRW","MXN","MYR","NGN","NOK","NZD","PEN","PHP","PLN","SAR","SEK","SGD","THB","TRY","TWD","USD","VND","ZAR"],"description":"Currency this block collects. The rail family and the currency are independent here: correspondent banking settles many currencies, so read this field rather than inferring one from the family."},"accountNumber":{"type":"string"},"iban":{"type":"string"},"beneficiaryName":{"type":"string"},"beneficiaryAddress":{"type":"string"},"beneficiaryPostalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"]},"bank":{"type":"object","properties":{"legalName":{"type":"string"},"address":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"]},"bic":{"type":"string"}},"required":["legalName","address"]},"correspondent":{"type":"object","properties":{"name":{"type":"string"},"address":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"]},"bic":{"type":"string"},"accountNumber":{"type":"string"}},"required":["name","address","bic"]},"paymentReference":{"type":"string"},"paymentReferenceRequired":{"description":"True when the payer must put paymentReference in the transfer memo. The collecting account is shared, so the reference is what names the destination; a missing or incorrect one delays credit.","type":"boolean"},"rails":{"minItems":1,"maxItems":1,"type":"array","items":{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]}},"required":["rail"]}}},"required":["type","currency","beneficiaryName","rails"],"description":"International SWIFT coordinates: an account number or an IBAN, the collecting bank's BIC, and the correspondent to route through where one applies.","example":{"type":"swift","currency":"USD","accountNumber":"123456789","beneficiaryName":"Example Customer","bank":{"legalName":"Example Bank","address":"2 Bank St, New York, NY","postalAddress":{"addressLine1":"2 Bank St","city":"New York","state":"NY","postalCode":"10005","country":"US"},"bic":"EXMPUS33XXX"},"correspondent":{"name":"Correspondent Bank","address":"3 Wall St, New York, NY","postalAddress":{"addressLine1":"3 Wall St","city":"New York","state":"NY","postalCode":"10005","country":"US"},"bic":"CORRUS33XXX"},"rails":[{"rail":"swift"}]}},{"type":"object","properties":{"type":{"type":"string","enum":["sepa"]},"currency":{"type":"string","enum":["EUR"],"description":"Currency this block collects. Always EUR: a SEPA credit transfer is euro-denominated by scheme."},"iban":{"type":"string"},"bic":{"type":"string","description":"Collecting bank's BIC. Always present: a SEPA credit transfer has no correspondent hop to fall back on, so this is a coordinate rather than bank disclosure."},"beneficiaryName":{"type":"string"},"beneficiaryAddress":{"type":"string"},"beneficiaryPostalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"]},"bank":{"type":"object","properties":{"legalName":{"type":"string"},"address":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"]},"bic":{"type":"string"}},"required":["legalName","address"]},"paymentReference":{"type":"string"},"paymentReferenceRequired":{"description":"True when the payer must put paymentReference in the transfer memo. The collecting account is shared, so the reference is what names the destination; a missing or incorrect one delays credit.","type":"boolean"},"rails":{"minItems":1,"maxItems":1,"type":"array","items":{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]}},"required":["rail"]}}},"required":["type","currency","iban","bic","beneficiaryName","rails"],"description":"Euro-area credit-transfer coordinates: an IBAN plus a BIC. Settles at the collecting bank with no US correspondent hop.","example":{"type":"sepa","currency":"EUR","iban":"DE89370400440532013000","bic":"EXMPDEFFXXX","beneficiaryName":"Example Customer","beneficiaryAddress":"1 Hauptstrasse, Berlin","bank":{"legalName":"Example Bank Europe","address":"2 Bankstrasse, Frankfurt","postalAddress":{"addressLine1":"2 Bankstrasse","city":"Frankfurt","postalCode":"60311","country":"DE"},"bic":"EXMPDEFFXXX"},"rails":[{"rail":"sepa"}]}},{"type":"object","properties":{"type":{"type":"string","enum":["uk_domestic"]},"currency":{"type":"string","enum":["GBP"],"description":"Currency this block collects. Always GBP: Faster Payments and CHAPS are UK clearing schemes and settle no other currency."},"accountNumber":{"type":"string"},"sortCode":{"type":"string","description":"Collecting bank's six-digit UK sort code. Always present: the UK domestic schemes address an account by sort code plus account number, so this is a coordinate rather than bank disclosure."},"beneficiaryName":{"type":"string"},"beneficiaryAddress":{"type":"string"},"beneficiaryPostalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"]},"bank":{"type":"object","properties":{"legalName":{"type":"string"},"address":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"]},"bic":{"type":"string"}},"required":["legalName","address"]},"paymentReference":{"type":"string"},"paymentReferenceRequired":{"description":"True when the payer must put paymentReference in the transfer memo. The collecting account is shared, so the reference is what names the destination; a missing or incorrect one delays credit.","type":"boolean"},"rails":{"minItems":1,"type":"array","items":{"type":"object","properties":{"rail":{"anyOf":[{"type":"string","enum":["faster_payments"]},{"type":"string","enum":["chaps"]}]}},"required":["rail"]},"description":"UK domestic schemes this account collects on. Both address the same sort code and account number; the payer picks one."}},"required":["type","currency","accountNumber","sortCode","beneficiaryName","rails"],"description":"UK domestic credit-transfer coordinates: an account number plus a sort code, shared by Faster Payments and CHAPS. Settles at the collecting bank with no correspondent hop.","example":{"type":"uk_domestic","currency":"GBP","accountNumber":"12345678","sortCode":"040004","beneficiaryName":"Example Customer","beneficiaryAddress":"1 High Street, London","bank":{"legalName":"Example Bank UK","address":"2 Bank Street, London","postalAddress":{"addressLine1":"2 Bank Street","city":"London","postalCode":"EC1V 9NR","country":"GB"},"bic":"EXMPGB2LXXX"},"rails":[{"rail":"faster_payments"},{"rail":"chaps"}]}},{"type":"object","properties":{"type":{"type":"string","enum":["brazil"]},"currency":{"type":"string","enum":["BRL"],"description":"Currency this block collects. Always BRL: PIX and TED are Brazilian clearing schemes and settle no other currency."},"beneficiaryName":{"type":"string"},"beneficiaryTaxId":{"type":"string","description":"CNPJ of the account holder the payer pays."},"bankCode":{"type":"string","description":"Three-digit code of the collecting bank, for a TED."},"bankName":{"description":"Name of the bank that `bankCode` names, for a TED. Absent when Conduit has no name for the code.","type":"string"},"branch":{"type":"string","description":"Four-digit branch of the collecting account."},"accountNumber":{"type":"string","description":"Collecting account number with its check digit."},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"],"description":"PIX key of the collecting account, for a PIX payment."},"bank":{"type":"object","properties":{"legalName":{"type":"string"},"address":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"]},"bic":{"type":"string"}},"required":["legalName","address"]},"paymentReference":{"type":"string","description":"Include the full payment reference in the transfer description. A missing or wrong reference delays credit."},"paymentReferenceRequired":{"type":"boolean","enum":[true]},"rails":{"minItems":1,"type":"array","items":{"type":"object","properties":{"rail":{"anyOf":[{"type":"string","enum":["pix"]},{"type":"string","enum":["ted"]}]}},"required":["rail"]},"description":"Brazilian schemes this account collects on. PIX pays the key; TED pays the bank code, branch and account number."}},"required":["type","currency","beneficiaryName","beneficiaryTaxId","bankCode","branch","accountNumber","pixKey","paymentReference","paymentReferenceRequired","rails"],"description":"Brazilian credit-transfer coordinates: a PIX key, and a bank code, branch and account number for TED. The collecting account is shared, so every payment must carry the payment reference.","example":{"type":"brazil","currency":"BRL","beneficiaryName":"Example Collections Ltda","beneficiaryTaxId":"11222333000181","bankCode":"001","branch":"0001","accountNumber":"123456","pixKey":{"type":"cnpj","value":"11222333000181"},"paymentReference":"REF12345","paymentReferenceRequired":true,"rails":[{"rail":"pix"},{"rail":"ted"}]}},{"type":"object","properties":{"type":{"type":"string","enum":["mexico"]},"currency":{"type":"string","enum":["MXN"],"description":"Currency this block collects. Always MXN: SPEI is the Mexican clearing scheme and settles no other currency."},"clabe":{"type":"string","description":"18-digit CLABE of the collecting account. The CLABE names the bank, so the payer needs no bank code."},"beneficiaryName":{"type":"string"},"beneficiaryAddress":{"type":"string"},"beneficiaryPostalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"]},"bank":{"type":"object","properties":{"legalName":{"type":"string"},"address":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"]},"bic":{"type":"string"}},"required":["legalName","address"]},"paymentReference":{"type":"string"},"paymentReferenceRequired":{"description":"True when the payer must put paymentReference in the transfer memo. The collecting account is shared, so the reference is what names the destination; a missing or incorrect one delays credit.","type":"boolean"},"rails":{"minItems":1,"type":"array","items":{"type":"object","properties":{"rail":{"type":"string","enum":["spei"]}},"required":["rail"]},"description":"Mexican schemes this account collects on."}},"required":["type","currency","clabe","beneficiaryName","rails"],"description":"Mexican credit-transfer coordinates: a CLABE that SPEI pays. Settles at the collecting bank with no correspondent hop.","example":{"type":"mexico","currency":"MXN","clabe":"000000123456789014","beneficiaryName":"Example Customer","bank":{"legalName":"Example Bank Mexico","address":"Ciudad de Mexico"},"rails":[{"rail":"spei"}]}}]},"description":"Coordinates to give a payer, grouped by collection method — branch on each block's `type`, and read the currency off the block's `currency` rather than off `type`. Empty until `status` is `active`."}},"required":["id","status","asset","balances","activatedAt","createdAt","updatedAt","depositInstructions"]}},"meta":{"type":"object","properties":{"mode":{"type":"string","description":"Pagination mode","example":"cursor","enum":["cursor"]},"nextCursor":{"type":"string","description":"Cursor for the page after this one. Use it with `direction=forward`; it is `null` when no more rows follow. A backward page always carries one, so do not loop on it while `direction=backward`.","example":"eyJpZCI6ImN1c18yeFBxTjhSIn0","nullable":true},"previousCursor":{"type":"string","description":"Cursor for the page before this one. Use it with `direction=backward`. It is `null` on the first page of a forward walk and when no earlier rows remain.","example":null,"nullable":true},"total":{"type":"number","description":"Total number of records matching the query","example":42}},"required":["mode","nextCursor","previousCursor","total"]}},"required":["data","meta"]},"VirtualAccountResponseClass":{"type":"object","properties":{"id":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$","description":"Id of the virtual account. Each id has the form `vac_` followed by 22 alphanumeric characters."},"status":{"description":"`pending_activation`: the account was requested and is still being set up, so nobody can pay into it yet. `active`: the customer can be paid into it. `disabled`: the account takes no new deposits.","type":"string","enum":["pending_activation","active","disabled"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code identifier","example":"USD"},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"description":"Blockchain network. `null`/omitted for fiat assets.","nullable":true}},"required":["code"]},"balances":{"type":"array","items":{"type":"object","properties":{"available":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"pending":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"frozen":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["available","pending","frozen"],"description":"Balance for one asset on an account: available, pending, and frozen buckets all in the same asset. Frozen is money under a compliance hold or on a bank account the bank has blocked."},"description":"What the account holds, in the account's own asset."},"activatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z","nullable":true},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"depositInstructions":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["us_domestic"]},"currency":{"type":"string","enum":["USD"],"description":"Currency this block collects. Always USD: ACH, Fedwire and RTP are US clearing networks and settle dollars only."},"accountNumber":{"type":"string"},"beneficiaryName":{"type":"string"},"beneficiaryAddress":{"type":"string"},"beneficiaryPostalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"]},"bank":{"type":"object","properties":{"legalName":{"type":"string"},"address":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"]},"bic":{"type":"string"}},"required":["legalName","address"]},"paymentReference":{"type":"string"},"paymentReferenceRequired":{"description":"True when the payer must put paymentReference in the transfer memo. The collecting account is shared, so the reference is what names the destination; a missing or incorrect one delays credit.","type":"boolean"},"rails":{"minItems":1,"type":"array","items":{"type":"object","properties":{"rail":{"anyOf":[{"type":"string","enum":["ach"]},{"type":"string","enum":["fedwire"]},{"type":"string","enum":["rtp"]}]},"routingNumber":{"type":"string"},"sameDayEligible":{"type":"boolean"},"networks":{"type":"array","items":{"type":"string","enum":["tch","fednow"]}},"fednowCap":{"type":"string"}},"required":["rail","routingNumber"]},"description":"US domestic networks this account collects on. Every entry carries its own routing number; the payer picks one network."}},"required":["type","currency","accountNumber","beneficiaryName","rails"],"description":"Domestic US clearing coordinates: an account number plus one routing number per network (ACH, Fedwire, RTP).","example":{"type":"us_domestic","currency":"USD","accountNumber":"123456789","beneficiaryName":"Example Customer","beneficiaryAddress":"1 Main St, New York, NY","bank":{"legalName":"Example Bank","address":"2 Bank St, New York, NY","postalAddress":{"addressLine1":"2 Bank St","city":"New York","state":"NY","postalCode":"10005","country":"US"}},"rails":[{"rail":"ach","routingNumber":"021000021","sameDayEligible":false},{"rail":"fedwire","routingNumber":"021000021"},{"rail":"rtp","routingNumber":"021000021","networks":["tch"]}]}},{"type":"object","properties":{"type":{"type":"string","enum":["swift"]},"currency":{"type":"string","enum":["AED","ARS","AUD","BRL","CAD","CHF","CLP","CNY","COP","CZK","DKK","EGP","EUR","GBP","GHS","HKD","HUF","IDR","ILS","INR","JPY","KES","KRW","MXN","MYR","NGN","NOK","NZD","PEN","PHP","PLN","SAR","SEK","SGD","THB","TRY","TWD","USD","VND","ZAR"],"description":"Currency this block collects. The rail family and the currency are independent here: correspondent banking settles many currencies, so read this field rather than inferring one from the family."},"accountNumber":{"type":"string"},"iban":{"type":"string"},"beneficiaryName":{"type":"string"},"beneficiaryAddress":{"type":"string"},"beneficiaryPostalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"]},"bank":{"type":"object","properties":{"legalName":{"type":"string"},"address":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"]},"bic":{"type":"string"}},"required":["legalName","address"]},"correspondent":{"type":"object","properties":{"name":{"type":"string"},"address":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"]},"bic":{"type":"string"},"accountNumber":{"type":"string"}},"required":["name","address","bic"]},"paymentReference":{"type":"string"},"paymentReferenceRequired":{"description":"True when the payer must put paymentReference in the transfer memo. The collecting account is shared, so the reference is what names the destination; a missing or incorrect one delays credit.","type":"boolean"},"rails":{"minItems":1,"maxItems":1,"type":"array","items":{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]}},"required":["rail"]}}},"required":["type","currency","beneficiaryName","rails"],"description":"International SWIFT coordinates: an account number or an IBAN, the collecting bank's BIC, and the correspondent to route through where one applies.","example":{"type":"swift","currency":"USD","accountNumber":"123456789","beneficiaryName":"Example Customer","bank":{"legalName":"Example Bank","address":"2 Bank St, New York, NY","postalAddress":{"addressLine1":"2 Bank St","city":"New York","state":"NY","postalCode":"10005","country":"US"},"bic":"EXMPUS33XXX"},"correspondent":{"name":"Correspondent Bank","address":"3 Wall St, New York, NY","postalAddress":{"addressLine1":"3 Wall St","city":"New York","state":"NY","postalCode":"10005","country":"US"},"bic":"CORRUS33XXX"},"rails":[{"rail":"swift"}]}},{"type":"object","properties":{"type":{"type":"string","enum":["sepa"]},"currency":{"type":"string","enum":["EUR"],"description":"Currency this block collects. Always EUR: a SEPA credit transfer is euro-denominated by scheme."},"iban":{"type":"string"},"bic":{"type":"string","description":"Collecting bank's BIC. Always present: a SEPA credit transfer has no correspondent hop to fall back on, so this is a coordinate rather than bank disclosure."},"beneficiaryName":{"type":"string"},"beneficiaryAddress":{"type":"string"},"beneficiaryPostalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"]},"bank":{"type":"object","properties":{"legalName":{"type":"string"},"address":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"]},"bic":{"type":"string"}},"required":["legalName","address"]},"paymentReference":{"type":"string"},"paymentReferenceRequired":{"description":"True when the payer must put paymentReference in the transfer memo. The collecting account is shared, so the reference is what names the destination; a missing or incorrect one delays credit.","type":"boolean"},"rails":{"minItems":1,"maxItems":1,"type":"array","items":{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]}},"required":["rail"]}}},"required":["type","currency","iban","bic","beneficiaryName","rails"],"description":"Euro-area credit-transfer coordinates: an IBAN plus a BIC. Settles at the collecting bank with no US correspondent hop.","example":{"type":"sepa","currency":"EUR","iban":"DE89370400440532013000","bic":"EXMPDEFFXXX","beneficiaryName":"Example Customer","beneficiaryAddress":"1 Hauptstrasse, Berlin","bank":{"legalName":"Example Bank Europe","address":"2 Bankstrasse, Frankfurt","postalAddress":{"addressLine1":"2 Bankstrasse","city":"Frankfurt","postalCode":"60311","country":"DE"},"bic":"EXMPDEFFXXX"},"rails":[{"rail":"sepa"}]}},{"type":"object","properties":{"type":{"type":"string","enum":["uk_domestic"]},"currency":{"type":"string","enum":["GBP"],"description":"Currency this block collects. Always GBP: Faster Payments and CHAPS are UK clearing schemes and settle no other currency."},"accountNumber":{"type":"string"},"sortCode":{"type":"string","description":"Collecting bank's six-digit UK sort code. Always present: the UK domestic schemes address an account by sort code plus account number, so this is a coordinate rather than bank disclosure."},"beneficiaryName":{"type":"string"},"beneficiaryAddress":{"type":"string"},"beneficiaryPostalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"]},"bank":{"type":"object","properties":{"legalName":{"type":"string"},"address":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"]},"bic":{"type":"string"}},"required":["legalName","address"]},"paymentReference":{"type":"string"},"paymentReferenceRequired":{"description":"True when the payer must put paymentReference in the transfer memo. The collecting account is shared, so the reference is what names the destination; a missing or incorrect one delays credit.","type":"boolean"},"rails":{"minItems":1,"type":"array","items":{"type":"object","properties":{"rail":{"anyOf":[{"type":"string","enum":["faster_payments"]},{"type":"string","enum":["chaps"]}]}},"required":["rail"]},"description":"UK domestic schemes this account collects on. Both address the same sort code and account number; the payer picks one."}},"required":["type","currency","accountNumber","sortCode","beneficiaryName","rails"],"description":"UK domestic credit-transfer coordinates: an account number plus a sort code, shared by Faster Payments and CHAPS. Settles at the collecting bank with no correspondent hop.","example":{"type":"uk_domestic","currency":"GBP","accountNumber":"12345678","sortCode":"040004","beneficiaryName":"Example Customer","beneficiaryAddress":"1 High Street, London","bank":{"legalName":"Example Bank UK","address":"2 Bank Street, London","postalAddress":{"addressLine1":"2 Bank Street","city":"London","postalCode":"EC1V 9NR","country":"GB"},"bic":"EXMPGB2LXXX"},"rails":[{"rail":"faster_payments"},{"rail":"chaps"}]}},{"type":"object","properties":{"type":{"type":"string","enum":["brazil"]},"currency":{"type":"string","enum":["BRL"],"description":"Currency this block collects. Always BRL: PIX and TED are Brazilian clearing schemes and settle no other currency."},"beneficiaryName":{"type":"string"},"beneficiaryTaxId":{"type":"string","description":"CNPJ of the account holder the payer pays."},"bankCode":{"type":"string","description":"Three-digit code of the collecting bank, for a TED."},"bankName":{"description":"Name of the bank that `bankCode` names, for a TED. Absent when Conduit has no name for the code.","type":"string"},"branch":{"type":"string","description":"Four-digit branch of the collecting account."},"accountNumber":{"type":"string","description":"Collecting account number with its check digit."},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"],"description":"PIX key of the collecting account, for a PIX payment."},"bank":{"type":"object","properties":{"legalName":{"type":"string"},"address":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"]},"bic":{"type":"string"}},"required":["legalName","address"]},"paymentReference":{"type":"string","description":"Include the full payment reference in the transfer description. A missing or wrong reference delays credit."},"paymentReferenceRequired":{"type":"boolean","enum":[true]},"rails":{"minItems":1,"type":"array","items":{"type":"object","properties":{"rail":{"anyOf":[{"type":"string","enum":["pix"]},{"type":"string","enum":["ted"]}]}},"required":["rail"]},"description":"Brazilian schemes this account collects on. PIX pays the key; TED pays the bank code, branch and account number."}},"required":["type","currency","beneficiaryName","beneficiaryTaxId","bankCode","branch","accountNumber","pixKey","paymentReference","paymentReferenceRequired","rails"],"description":"Brazilian credit-transfer coordinates: a PIX key, and a bank code, branch and account number for TED. The collecting account is shared, so every payment must carry the payment reference.","example":{"type":"brazil","currency":"BRL","beneficiaryName":"Example Collections Ltda","beneficiaryTaxId":"11222333000181","bankCode":"001","branch":"0001","accountNumber":"123456","pixKey":{"type":"cnpj","value":"11222333000181"},"paymentReference":"REF12345","paymentReferenceRequired":true,"rails":[{"rail":"pix"},{"rail":"ted"}]}},{"type":"object","properties":{"type":{"type":"string","enum":["mexico"]},"currency":{"type":"string","enum":["MXN"],"description":"Currency this block collects. Always MXN: SPEI is the Mexican clearing scheme and settles no other currency."},"clabe":{"type":"string","description":"18-digit CLABE of the collecting account. The CLABE names the bank, so the payer needs no bank code."},"beneficiaryName":{"type":"string"},"beneficiaryAddress":{"type":"string"},"beneficiaryPostalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"]},"bank":{"type":"object","properties":{"legalName":{"type":"string"},"address":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","description":"Primary street address","example":"100 Market St"},"addressLine2":{"description":"Secondary address line (suite, floor, etc.)","example":"Suite 400","type":"string"},"city":{"type":"string","description":"City","example":"San Francisco"},"state":{"description":"State or province","example":"CA","type":"string"},"postalCode":{"description":"Postal code","example":"94105","type":"string"},"country":{"type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"description":"Country (ISO 3166-1 alpha-2)","example":"US"}},"required":["addressLine1","city","country"]},"bic":{"type":"string"}},"required":["legalName","address"]},"paymentReference":{"type":"string"},"paymentReferenceRequired":{"description":"True when the payer must put paymentReference in the transfer memo. The collecting account is shared, so the reference is what names the destination; a missing or incorrect one delays credit.","type":"boolean"},"rails":{"minItems":1,"type":"array","items":{"type":"object","properties":{"rail":{"type":"string","enum":["spei"]}},"required":["rail"]},"description":"Mexican schemes this account collects on."}},"required":["type","currency","clabe","beneficiaryName","rails"],"description":"Mexican credit-transfer coordinates: a CLABE that SPEI pays. Settles at the collecting bank with no correspondent hop.","example":{"type":"mexico","currency":"MXN","clabe":"000000123456789014","beneficiaryName":"Example Customer","bank":{"legalName":"Example Bank Mexico","address":"Ciudad de Mexico"},"rails":[{"rail":"spei"}]}}]},"description":"Coordinates to give a payer, grouped by collection method — branch on each block's `type`, and read the currency off the block's `currency` rather than off `type`. Empty until `status` is `active`."}},"required":["id","status","asset","balances","activatedAt","createdAt","updatedAt","depositInstructions"]},"ApplicationPaginatedResponseDto":{"type":"object","properties":{"data":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","pattern":"^app_[0-9A-Za-z]{22}$","description":"Unique application identifier"},"status":{"type":"string","enum":["pending","processing","approved","rejected","cancelled"],"description":"Current lifecycle status of the application","example":"pending"},"clientReferenceId":{"description":"Client-provided identifier for cross-referencing. Omitted when the client did not supply one. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces.","example":"ext-12345","type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$"},"submittedAt":{"description":"Timestamp when the application was submitted for review. Omitted while still in progress.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the application was created","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp when the application was last modified","example":"2026-01-15T09:30:00.000Z"},"failureCode":{"description":"Machine-readable failure code on rejected applications. Omitted on non-rejected applications.","type":"string","enum":["rejected_by_ops","compliance_denied"]},"failureMessage":{"description":"Customer-facing failure message accompanying `failureCode`. Omitted on non-rejected applications.","type":"string"},"resubmittable":{"description":"Whether a corrected application will be considered. `true`: correct the data and submit a fresh application. `false`: the decision is final, do not resubmit. Omitted on non-rejected applications.","type":"boolean"},"type":{"type":"string","enum":["virtual_account"]},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","description":"Customer this virtual-account application belongs to."},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code identifier","example":"USD"},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"description":"Blockchain network. `null`/omitted for fiat assets.","nullable":true}},"required":["code"],"description":"Target asset for this virtual-account feature application."}},"required":["id","status","createdAt","updatedAt","type","customerId","asset"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^app_[0-9A-Za-z]{22}$","description":"Unique application identifier"},"status":{"type":"string","enum":["pending","processing","approved","rejected","cancelled"],"description":"Current lifecycle status of the application","example":"pending"},"clientReferenceId":{"description":"Client-provided identifier for cross-referencing. Omitted when the client did not supply one. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces.","example":"ext-12345","type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$"},"submittedAt":{"description":"Timestamp when the application was submitted for review. Omitted while still in progress.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the application was created","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp when the application was last modified","example":"2026-01-15T09:30:00.000Z"},"failureCode":{"description":"Machine-readable failure code on rejected applications. Omitted on non-rejected applications.","type":"string","enum":["rejected_by_ops","compliance_denied"]},"failureMessage":{"description":"Customer-facing failure message accompanying `failureCode`. Omitted on non-rejected applications.","type":"string"},"resubmittable":{"description":"Whether a corrected application will be considered. `true`: correct the data and submit a fresh application. `false`: the decision is final, do not resubmit. Omitted on non-rejected applications.","type":"boolean"},"type":{"type":"string","enum":["customer_onboarding"]},"reviewStage":{"description":"Where the review of a `processing` application stands. `automated`: Conduit's automated review is still running. `operator`: the automated review finished without a decision, or Conduit has an open request for information about the application. A Conduit operator owns the next step unless the request needs your answer. `operator` means no automated decision will come; expect a decision or a request for information from Conduit. Present only while `status` is `processing`.","type":"string","enum":["automated","operator"]},"customerId":{"description":"Customer this onboarding application produced. Omitted while the application is still being reviewed; present after approval persists the customer row.","type":"string","pattern":"^cus_[0-9A-Za-z]{22}$"},"persons":{"description":"People declared on the submission, in submit order: the owners, controlling persons and legal representatives of a business, or the one account holder of an individual. Omitted before the application carries a submission.","type":"array","items":{"type":"object","properties":{"referenceId":{"type":"string","description":"Server-assigned stable reference for this person. Use it to fetch the person's identity-verification link (POST /v2/applications/{applicationId}/persons/{referenceId}/idv-link) and to correlate `idv_link.created` webhook events."},"name":{"type":"string","description":"Person's name as submitted."}},"required":["referenceId","name"]}},"resubmissionGuidance":{"description":"Integrator guidance for the resubmission. Present only on a rejected application whose `resubmittable` is `true`. A fixed line — display or log it, do not parse it. Omitted on non-rejected applications and on final rejections.","type":"string"},"reviewQuestions":{"description":"Questions to address in the resubmission. Present only on a rejected application whose `resubmittable` is `true` when Conduit asks for more information. Omitted otherwise.","type":"array","items":{"type":"string"}}},"required":["id","status","createdAt","updatedAt","type"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^app_[0-9A-Za-z]{22}$","description":"Unique application identifier"},"status":{"type":"string","enum":["pending","processing","approved","rejected","cancelled"],"description":"Current lifecycle status of the application","example":"pending"},"clientReferenceId":{"description":"Client-provided identifier for cross-referencing. Omitted when the client did not supply one. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces.","example":"ext-12345","type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$"},"submittedAt":{"description":"Timestamp when the application was submitted for review. Omitted while still in progress.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the application was created","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp when the application was last modified","example":"2026-01-15T09:30:00.000Z"},"failureCode":{"description":"Machine-readable failure code on rejected applications. Omitted on non-rejected applications.","type":"string","enum":["rejected_by_ops","compliance_denied"]},"failureMessage":{"description":"Customer-facing failure message accompanying `failureCode`. Omitted on non-rejected applications.","type":"string"},"resubmittable":{"description":"Whether a corrected application will be considered. `true`: correct the data and submit a fresh application. `false`: the decision is final, do not resubmit. Omitted on non-rejected applications.","type":"boolean"},"type":{"type":"string","enum":["customer_update"]},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","description":"Customer this update application belongs to."}},"required":["id","status","createdAt","updatedAt","type","customerId"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^app_[0-9A-Za-z]{22}$","description":"Unique application identifier"},"status":{"type":"string","enum":["pending","processing","approved","rejected","cancelled"],"description":"Current lifecycle status of the application","example":"pending"},"clientReferenceId":{"description":"Client-provided identifier for cross-referencing. Omitted when the client did not supply one. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces.","example":"ext-12345","type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$"},"submittedAt":{"description":"Timestamp when the application was submitted for review. Omitted while still in progress.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the application was created","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp when the application was last modified","example":"2026-01-15T09:30:00.000Z"},"failureCode":{"description":"Machine-readable failure code on rejected applications. Omitted on non-rejected applications.","type":"string","enum":["rejected_by_ops","compliance_denied"]},"failureMessage":{"description":"Customer-facing failure message accompanying `failureCode`. Omitted on non-rejected applications.","type":"string"},"resubmittable":{"description":"Whether a corrected application will be considered. `true`: correct the data and submit a fresh application. `false`: the decision is final, do not resubmit. Omitted on non-rejected applications.","type":"boolean"},"type":{"type":"string","enum":["crypto_wallet"]},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","description":"Customer this crypto-wallet application belongs to."}},"required":["id","status","createdAt","updatedAt","type","customerId"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^app_[0-9A-Za-z]{22}$","description":"Unique application identifier"},"status":{"type":"string","enum":["pending","processing","approved","rejected","cancelled"],"description":"Current lifecycle status of the application","example":"pending"},"clientReferenceId":{"description":"Client-provided identifier for cross-referencing. Omitted when the client did not supply one. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces.","example":"ext-12345","type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$"},"submittedAt":{"description":"Timestamp when the application was submitted for review. Omitted while still in progress.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the application was created","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp when the application was last modified","example":"2026-01-15T09:30:00.000Z"},"failureCode":{"description":"Machine-readable failure code on rejected applications. Omitted on non-rejected applications.","type":"string","enum":["rejected_by_ops","compliance_denied"]},"failureMessage":{"description":"Customer-facing failure message accompanying `failureCode`. Omitted on non-rejected applications.","type":"string"},"resubmittable":{"description":"Whether a corrected application will be considered. `true`: correct the data and submit a fresh application. `false`: the decision is final, do not resubmit. Omitted on non-rejected applications.","type":"boolean"},"type":{"type":"string","enum":["yield"]},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","description":"Customer this yield application belongs to."},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code identifier","example":"USD"},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"description":"Blockchain network. `null`/omitted for fiat assets.","nullable":true}},"required":["code"],"description":"Asset this customer asked to earn yield on. One approval covers the asset on every chain Conduit supports for it, so `chain` is omitted."}},"required":["id","status","createdAt","updatedAt","type","customerId","asset"]}]}},"meta":{"type":"object","properties":{"mode":{"type":"string","description":"Pagination mode","example":"cursor","enum":["cursor"]},"nextCursor":{"type":"string","description":"Cursor for the page after this one. Use it with `direction=forward`; it is `null` when no more rows follow. A backward page always carries one, so do not loop on it while `direction=backward`.","example":"eyJpZCI6ImN1c18yeFBxTjhSIn0","nullable":true},"previousCursor":{"type":"string","description":"Cursor for the page before this one. Use it with `direction=backward`. It is `null` on the first page of a forward walk and when no earlier rows remain.","example":null,"nullable":true},"total":{"type":"number","description":"Total number of records matching the query","example":42}},"required":["mode","nextCursor","previousCursor","total"]}},"required":["data","meta"]},"PersonaInquiryLinkResponseDto":{"type":"object","properties":{"url":{"type":"string","description":"Hosted identity-verification URL the person opens. Resumable — not single-use, survives a refresh and a second device, and stays valid as long as the inquiry does. A bearer credential: deliver it out-of-band and do not log it."},"shortUrl":{"type":"string","description":"Deprecated — prefer `url`. A short one-time link, and a different credential rather than a shortening of `url`: it opens once, and stops working roughly five minutes after the person opens it. Also a bearer credential: deliver it out-of-band and do not log it. Kept for existing integrations; it will be removed in a future release."}},"required":["url","shortUrl"]},"SimulateApplicationDecisionDtoClass":{"type":"object","properties":{"outcome":{"type":"string","enum":["approved","rejected"],"description":"Decision to force onto the application. `approved` activates the resource it produces; `rejected` records a rejection."},"reason":{"description":"Free-text rejection reason. Valid on the free-text branch (`{ outcome: \"rejected\", reason }`) and on `category: generic`. Persisted verbatim to `rejectionReason`.","type":"string","maxLength":500},"category":{"description":"Structured rejection category, not case-sensitive. Selects a specific user-facing summary. Mutually exclusive with a bare `reason` on non-generic branches.","type":"string","enum":["document_mismatch","data_sourcing_mismatch","compliance","generic"]},"field":{"description":"Optional field hint. Requires `category`; sending `field` without `category` yields 400 `VALIDATION_ERROR`. Accepted by `document_mismatch` (`tax_id` / `date_of_incorporation` / `business_name` / `business_entity_id`, and for an individual application's own fields `account_holder_birth_date` / `account_holder_address` / `account_holder_tax_id`) and `data_sourcing_mismatch` (`business_entity_id` / `ubo_first_name` / `ubo_last_name` / `ubo_phone` / `ubo_email` / `ownership_list`; on an individual application the `ubo_*` fields point at the account holder). Rejected on other categories and on the free-text branch.","type":"string"}},"required":["outcome"],"additionalProperties":false},"InitiateVerificationDto":{"type":"object","properties":{"type":{"type":"string","enum":["wallet_signer_activation","transaction_approval","ceremony_approval","signer_recovery_enrollment"],"description":"Type of verification to initiate"},"clientReferenceId":{"type":"string","minLength":1,"maxLength":60,"description":"Client-provided reference ID to correlate the verification with your system","example":"txn-abc-123"}},"required":["type","clientReferenceId"]},"InitiateVerificationResponseDtoClass":{"type":"object","properties":{"verificationId":{"type":"string","pattern":"^vrf_[0-9A-Za-z]{22}$","description":"Unique identifier for the initiated verification","example":"vrf_2xKjF9mQb7vN4hL1pR3w8t"},"verificationUrl":{"type":"string","description":"URL to redirect the user to for completing the verification","example":"https://app.conduit.financial/verify/mtQzSU2hdy0DuZ6za2IHIoVDgXzshrFtN38kMULRDFw"}},"required":["verificationId","verificationUrl"]},"PayoutSigningRequestResponseDto":{"type":"object","properties":{"kind":{"type":"string","description":"A payout the signers must approve.","enum":["payout"]},"transactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$","description":"Payout this request authorizes. Each id has the form `txn_` followed by 22 alphanumeric characters."},"id":{"type":"string","pattern":"^vrf_[0-9A-Za-z]{22}$","description":"Signing request id (equals the pending verification id)."},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","description":"Customer whose signers must approve. Each id has the form `cus_` followed by 22 alphanumeric characters."},"status":{"type":"string","enum":["awaiting_signature","quorum_met","declined","expired"],"description":"`awaiting_signature`: still collecting stamps, so submit yours. `quorum_met`: enough stamps arrived and the request proceeds on its own. `declined`: a signer rejected it. `expired`: the signing window closed before quorum. Only `awaiting_signature` accepts a new stamp; the other three are final for this request."},"requiredApprovals":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"How many signer stamps this request needs. Fixed when the request was created, so it does not move while you collect."},"approvedCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"How many stamps have been accepted so far. Signing proceeds as soon as it reaches `requiredApprovals`, at which point `status` becomes `quorum_met`."},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z","nullable":true},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"approvalMaterial":{"type":"object","properties":{"version":{"type":"string","description":"Approval-material shape version.","enum":["1"]},"activityId":{"type":"string","description":"Signing activity id being approved."},"fingerprint":{"type":"string","description":"Activity fingerprint the stamped body must carry."},"subOrganizationId":{"type":"string","description":"Signing sub-organization the stamp must target."},"outbound":{"type":"object","properties":{"toAddress":{"type":"string","description":"Destination address of the value the signature moves."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["toAddress","assetAmount"],"additionalProperties":false}},"required":["version","activityId","fingerprint","subOrganizationId","outbound"],"additionalProperties":false}},"required":["kind","transactionId","id","customerId","status","requiredApprovals","approvedCount","expiresAt","createdAt","approvalMaterial"]},"WalletSetupSigningRequestResponseDto":{"type":"object","properties":{"kind":{"type":"string","description":"The one-time on-chain setup of a new wallet. It moves no customer funds; `approvalMaterial.outbound` is the setup's return of Conduit's funding to Conduit.","enum":["wallet_setup"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$","description":"Wallet this setup activates. Each id has the form `wlt_` followed by 22 alphanumeric characters."},"id":{"type":"string","pattern":"^vrf_[0-9A-Za-z]{22}$","description":"Signing request id (equals the pending verification id)."},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","description":"Customer whose signers must approve. Each id has the form `cus_` followed by 22 alphanumeric characters."},"status":{"type":"string","enum":["awaiting_signature","quorum_met","declined","expired"],"description":"`awaiting_signature`: still collecting stamps, so submit yours. `quorum_met`: enough stamps arrived and the request proceeds on its own. `declined`: a signer rejected it. `expired`: the signing window closed before quorum. Only `awaiting_signature` accepts a new stamp; the other three are final for this request."},"requiredApprovals":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"How many signer stamps this request needs. Fixed when the request was created, so it does not move while you collect."},"approvedCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"How many stamps have been accepted so far. Signing proceeds as soon as it reaches `requiredApprovals`, at which point `status` becomes `quorum_met`."},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z","nullable":true},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"approvalMaterial":{"type":"object","properties":{"version":{"type":"string","description":"Approval-material shape version.","enum":["1"]},"activityId":{"type":"string","description":"Signing activity id being approved."},"fingerprint":{"type":"string","description":"Activity fingerprint the stamped body must carry."},"subOrganizationId":{"type":"string","description":"Signing sub-organization the stamp must target."},"outbound":{"type":"object","properties":{"toAddress":{"type":"string","description":"Destination address of the value the signature moves."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["toAddress","assetAmount"],"additionalProperties":false}},"required":["version","activityId","fingerprint","subOrganizationId","outbound"],"additionalProperties":false}},"required":["kind","walletId","id","customerId","status","requiredApprovals","approvedCount","expiresAt","createdAt","approvalMaterial"]},"DeliveryRecoverySigningRequestResponseDto":{"type":"object","properties":{"kind":{"type":"string","description":"The return of a payout that the payee's receive policy held. Approving it sends the held funds back to the wallet that sent the payout; `approvalMaterial.outbound.toAddress` is that wallet.","enum":["delivery_recovery"]},"transactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$","description":"Payout whose held funds this request returns. Each id has the form `txn_` followed by 22 alphanumeric characters."},"id":{"type":"string","pattern":"^vrf_[0-9A-Za-z]{22}$","description":"Signing request id (equals the pending verification id)."},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","description":"Customer whose signers must approve. Each id has the form `cus_` followed by 22 alphanumeric characters."},"status":{"type":"string","enum":["awaiting_signature","quorum_met","declined","expired"],"description":"`awaiting_signature`: still collecting stamps, so submit yours. `quorum_met`: enough stamps arrived and the request proceeds on its own. `declined`: a signer rejected it. `expired`: the signing window closed before quorum. Only `awaiting_signature` accepts a new stamp; the other three are final for this request."},"requiredApprovals":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"How many signer stamps this request needs. Fixed when the request was created, so it does not move while you collect."},"approvedCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"How many stamps have been accepted so far. Signing proceeds as soon as it reaches `requiredApprovals`, at which point `status` becomes `quorum_met`."},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z","nullable":true},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"approvalMaterial":{"type":"object","properties":{"version":{"type":"string","description":"Approval-material shape version.","enum":["1"]},"activityId":{"type":"string","description":"Signing activity id being approved."},"fingerprint":{"type":"string","description":"Activity fingerprint the stamped body must carry."},"subOrganizationId":{"type":"string","description":"Signing sub-organization the stamp must target."},"outbound":{"type":"object","properties":{"toAddress":{"type":"string","description":"Destination address of the value the signature moves."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["toAddress","assetAmount"],"additionalProperties":false}},"required":["version","activityId","fingerprint","subOrganizationId","outbound"],"additionalProperties":false}},"required":["kind","transactionId","id","customerId","status","requiredApprovals","approvedCount","expiresAt","createdAt","approvalMaterial"]},"UnsupportedAssetReturnSigningRequestResponseDto":{"type":"object","properties":{"kind":{"type":"string","description":"The return of a coin Conduit does not support. Approving it sends the coin back to the address it came from; `approvalMaterial.outbound.toAddress` is that address.","enum":["unsupported_asset_return"]},"transactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$","description":"Return transaction this request authorizes. Each id has the form `txn_` followed by 22 alphanumeric characters."},"id":{"type":"string","pattern":"^vrf_[0-9A-Za-z]{22}$","description":"Signing request id (equals the pending verification id)."},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","description":"Customer whose signers must approve. Each id has the form `cus_` followed by 22 alphanumeric characters."},"status":{"type":"string","enum":["awaiting_signature","quorum_met","declined","expired"],"description":"`awaiting_signature`: still collecting stamps, so submit yours. `quorum_met`: enough stamps arrived and the request proceeds on its own. `declined`: a signer rejected it. `expired`: the signing window closed before quorum. Only `awaiting_signature` accepts a new stamp; the other three are final for this request."},"requiredApprovals":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"How many signer stamps this request needs. Fixed when the request was created, so it does not move while you collect."},"approvedCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"How many stamps have been accepted so far. Signing proceeds as soon as it reaches `requiredApprovals`, at which point `status` becomes `quorum_met`."},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z","nullable":true},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"approvalMaterial":{"type":"object","properties":{"version":{"type":"string","description":"Approval-material shape version.","enum":["1"]},"activityId":{"type":"string","description":"Signing activity id being approved."},"fingerprint":{"type":"string","description":"Activity fingerprint the stamped body must carry."},"subOrganizationId":{"type":"string","description":"Signing sub-organization the stamp must target."},"outbound":{"type":"object","properties":{"toAddress":{"type":"string","description":"Destination address of the value the signature moves."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["toAddress","assetAmount"],"additionalProperties":false}},"required":["version","activityId","fingerprint","subOrganizationId","outbound"],"additionalProperties":false}},"required":["kind","transactionId","id","customerId","status","requiredApprovals","approvedCount","expiresAt","createdAt","approvalMaterial"]},"SigningRequestPaginatedResponseDto":{"type":"object","properties":{"data":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","description":"A payout the signers must approve.","enum":["payout"]},"transactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$","description":"Payout this request authorizes. Each id has the form `txn_` followed by 22 alphanumeric characters."},"id":{"type":"string","pattern":"^vrf_[0-9A-Za-z]{22}$","description":"Signing request id (equals the pending verification id)."},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","description":"Customer whose signers must approve. Each id has the form `cus_` followed by 22 alphanumeric characters."},"status":{"type":"string","enum":["awaiting_signature","quorum_met","declined","expired"],"description":"`awaiting_signature`: still collecting stamps, so submit yours. `quorum_met`: enough stamps arrived and the request proceeds on its own. `declined`: a signer rejected it. `expired`: the signing window closed before quorum. Only `awaiting_signature` accepts a new stamp; the other three are final for this request."},"requiredApprovals":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"How many signer stamps this request needs. Fixed when the request was created, so it does not move while you collect."},"approvedCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"How many stamps have been accepted so far. Signing proceeds as soon as it reaches `requiredApprovals`, at which point `status` becomes `quorum_met`."},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z","nullable":true},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"approvalMaterial":{"type":"object","properties":{"version":{"type":"string","description":"Approval-material shape version.","enum":["1"]},"activityId":{"type":"string","description":"Signing activity id being approved."},"fingerprint":{"type":"string","description":"Activity fingerprint the stamped body must carry."},"subOrganizationId":{"type":"string","description":"Signing sub-organization the stamp must target."},"outbound":{"type":"object","properties":{"toAddress":{"type":"string","description":"Destination address of the value the signature moves."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["toAddress","assetAmount"],"additionalProperties":false}},"required":["version","activityId","fingerprint","subOrganizationId","outbound"],"additionalProperties":false}},"required":["kind","transactionId","id","customerId","status","requiredApprovals","approvedCount","expiresAt","createdAt","approvalMaterial"]},{"type":"object","properties":{"kind":{"type":"string","description":"The one-time on-chain setup of a new wallet. It moves no customer funds; `approvalMaterial.outbound` is the setup's return of Conduit's funding to Conduit.","enum":["wallet_setup"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$","description":"Wallet this setup activates. Each id has the form `wlt_` followed by 22 alphanumeric characters."},"id":{"type":"string","pattern":"^vrf_[0-9A-Za-z]{22}$","description":"Signing request id (equals the pending verification id)."},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","description":"Customer whose signers must approve. Each id has the form `cus_` followed by 22 alphanumeric characters."},"status":{"type":"string","enum":["awaiting_signature","quorum_met","declined","expired"],"description":"`awaiting_signature`: still collecting stamps, so submit yours. `quorum_met`: enough stamps arrived and the request proceeds on its own. `declined`: a signer rejected it. `expired`: the signing window closed before quorum. Only `awaiting_signature` accepts a new stamp; the other three are final for this request."},"requiredApprovals":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"How many signer stamps this request needs. Fixed when the request was created, so it does not move while you collect."},"approvedCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"How many stamps have been accepted so far. Signing proceeds as soon as it reaches `requiredApprovals`, at which point `status` becomes `quorum_met`."},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z","nullable":true},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"approvalMaterial":{"type":"object","properties":{"version":{"type":"string","description":"Approval-material shape version.","enum":["1"]},"activityId":{"type":"string","description":"Signing activity id being approved."},"fingerprint":{"type":"string","description":"Activity fingerprint the stamped body must carry."},"subOrganizationId":{"type":"string","description":"Signing sub-organization the stamp must target."},"outbound":{"type":"object","properties":{"toAddress":{"type":"string","description":"Destination address of the value the signature moves."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["toAddress","assetAmount"],"additionalProperties":false}},"required":["version","activityId","fingerprint","subOrganizationId","outbound"],"additionalProperties":false}},"required":["kind","walletId","id","customerId","status","requiredApprovals","approvedCount","expiresAt","createdAt","approvalMaterial"]},{"type":"object","properties":{"kind":{"type":"string","description":"The return of a payout that the payee's receive policy held. Approving it sends the held funds back to the wallet that sent the payout; `approvalMaterial.outbound.toAddress` is that wallet.","enum":["delivery_recovery"]},"transactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$","description":"Payout whose held funds this request returns. Each id has the form `txn_` followed by 22 alphanumeric characters."},"id":{"type":"string","pattern":"^vrf_[0-9A-Za-z]{22}$","description":"Signing request id (equals the pending verification id)."},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","description":"Customer whose signers must approve. Each id has the form `cus_` followed by 22 alphanumeric characters."},"status":{"type":"string","enum":["awaiting_signature","quorum_met","declined","expired"],"description":"`awaiting_signature`: still collecting stamps, so submit yours. `quorum_met`: enough stamps arrived and the request proceeds on its own. `declined`: a signer rejected it. `expired`: the signing window closed before quorum. Only `awaiting_signature` accepts a new stamp; the other three are final for this request."},"requiredApprovals":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"How many signer stamps this request needs. Fixed when the request was created, so it does not move while you collect."},"approvedCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"How many stamps have been accepted so far. Signing proceeds as soon as it reaches `requiredApprovals`, at which point `status` becomes `quorum_met`."},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z","nullable":true},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"approvalMaterial":{"type":"object","properties":{"version":{"type":"string","description":"Approval-material shape version.","enum":["1"]},"activityId":{"type":"string","description":"Signing activity id being approved."},"fingerprint":{"type":"string","description":"Activity fingerprint the stamped body must carry."},"subOrganizationId":{"type":"string","description":"Signing sub-organization the stamp must target."},"outbound":{"type":"object","properties":{"toAddress":{"type":"string","description":"Destination address of the value the signature moves."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["toAddress","assetAmount"],"additionalProperties":false}},"required":["version","activityId","fingerprint","subOrganizationId","outbound"],"additionalProperties":false}},"required":["kind","transactionId","id","customerId","status","requiredApprovals","approvedCount","expiresAt","createdAt","approvalMaterial"]},{"type":"object","properties":{"kind":{"type":"string","description":"The return of a coin Conduit does not support. Approving it sends the coin back to the address it came from; `approvalMaterial.outbound.toAddress` is that address.","enum":["unsupported_asset_return"]},"transactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$","description":"Return transaction this request authorizes. Each id has the form `txn_` followed by 22 alphanumeric characters."},"id":{"type":"string","pattern":"^vrf_[0-9A-Za-z]{22}$","description":"Signing request id (equals the pending verification id)."},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","description":"Customer whose signers must approve. Each id has the form `cus_` followed by 22 alphanumeric characters."},"status":{"type":"string","enum":["awaiting_signature","quorum_met","declined","expired"],"description":"`awaiting_signature`: still collecting stamps, so submit yours. `quorum_met`: enough stamps arrived and the request proceeds on its own. `declined`: a signer rejected it. `expired`: the signing window closed before quorum. Only `awaiting_signature` accepts a new stamp; the other three are final for this request."},"requiredApprovals":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"How many signer stamps this request needs. Fixed when the request was created, so it does not move while you collect."},"approvedCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"How many stamps have been accepted so far. Signing proceeds as soon as it reaches `requiredApprovals`, at which point `status` becomes `quorum_met`."},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z","nullable":true},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"approvalMaterial":{"type":"object","properties":{"version":{"type":"string","description":"Approval-material shape version.","enum":["1"]},"activityId":{"type":"string","description":"Signing activity id being approved."},"fingerprint":{"type":"string","description":"Activity fingerprint the stamped body must carry."},"subOrganizationId":{"type":"string","description":"Signing sub-organization the stamp must target."},"outbound":{"type":"object","properties":{"toAddress":{"type":"string","description":"Destination address of the value the signature moves."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["toAddress","assetAmount"],"additionalProperties":false}},"required":["version","activityId","fingerprint","subOrganizationId","outbound"],"additionalProperties":false}},"required":["kind","transactionId","id","customerId","status","requiredApprovals","approvedCount","expiresAt","createdAt","approvalMaterial"]}]}},"meta":{"type":"object","properties":{"mode":{"type":"string","description":"Pagination mode","example":"cursor","enum":["cursor"]},"nextCursor":{"type":"string","description":"Cursor for the page after this one. Use it with `direction=forward`; it is `null` when no more rows follow. A backward page always carries one, so do not loop on it while `direction=backward`.","example":"eyJpZCI6ImN1c18yeFBxTjhSIn0","nullable":true},"previousCursor":{"type":"string","description":"Cursor for the page before this one. Use it with `direction=backward`. It is `null` on the first page of a forward walk and when no earlier rows remain.","example":null,"nullable":true},"total":{"type":"number","description":"Total number of records matching the query","example":42}},"required":["mode","nextCursor","previousCursor","total"]}},"required":["data","meta"]},"SubmitSigningStampBodyDto":{"type":"object","properties":{"signedBody":{"type":"string","minLength":1,"maxLength":8192,"description":"The exact activity body (JSON string) your machine signer stamped."},"stamp":{"type":"string","minLength":1,"maxLength":8192,"description":"The signing provider's stamp header value: base64url({publicKey, scheme, signature})."}},"required":["signedBody","stamp"],"additionalProperties":false},"SubmitSenderInformationBodyDto":{"type":"object","properties":{"originator":{"oneOf":[{"type":"object","properties":{"entityType":{"type":"string","enum":["business"]},"legalName":{"type":"string","minLength":1,"maxLength":255},"country":{"type":"string"}},"required":["entityType","legalName","country"]},{"type":"object","properties":{"entityType":{"type":"string","enum":["individual"]},"firstName":{"type":"string","minLength":1,"maxLength":255},"lastName":{"type":"string","minLength":1,"maxLength":255},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["entityType","firstName","lastName","dateOfBirth","countryOfCitizenship"]}]},"register":{"default":false,"type":"boolean"},"label":{"type":"string","maxLength":255}},"required":["originator"],"additionalProperties":false},"PublicDepositViewDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$"},"customerName":{"description":"Display name of the customer that owns the transaction: business legal name or individual full name. Same value on the transactions and payouts reads for the same row. Omitted when the customer's identity record hasn't resolved a name yet; per the public omit-don't-null convention, absence is never surfaced as `null`.","type":"string"},"clientReferenceId":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces."},"status":{"type":"string","enum":["pending","processing","completed","failed","cancelled"]},"stage":{"description":"Progress signal for a non-terminal transaction, informational only — it does not replace `requiresUserSignature`, `hasRfi`, or `failureCode` for deciding whether your integration needs to act. `awaiting_signature`: waiting on the required transaction signature (see `requiresUserSignature`). `awaiting_customer_action`: further input is needed before the transaction can go on. Read `hasRfi` to learn where the ask is: `true` means a request for information holds the answer — `rfiId` names it, and `GET /v2/rfis/{id}` carries what to send; `false` means the matching event carries the detail (e.g. `transaction.awaiting_sender_information`); with no such event, the recipient details cannot be sent as given, so contact support to correct them, or cancel the payout. `under_review`: compliance, document, or verification review of something already submitted is in progress — usually no action needed; check `hasRfi` if unsure. `settling`: funds movement or settlement is in progress, no customer action required — covers long-lived fiat rails like SWIFT that legitimately take days as well as any other non-blocked in-flight state. Omitted once `status` reaches a terminal value (`completed` / `failed` / `cancelled`). The set of values may grow over time — treat unrecognized values the same as `processing`.","type":"string","enum":["awaiting_signature","awaiting_customer_action","under_review","settling"]},"source":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"destination":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"fees":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["fixed"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"owner":{"type":"string","enum":["conduit","you"],"description":"Who this charge belongs to. `conduit` is Conduit's own fee. `you` is the margin you declared on this transaction, which Conduit collects from your customer and accrues to you; it is your revenue, not a Conduit charge."}},"required":["type","assetAmount","owner"]}},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"completedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"failureCode":{"type":"string","enum":["user_signature_timeout","user_signature_expired","user_signature_declined","user_signature_rejected_by_provider","crypto_wallet_misconfigured","compliance_hold","compliance_review_rejected","compliance_rejected","returned_by_sender","rail_policy_rejected","insufficient_funds","insufficient_funds_at_settle","rail_unavailable","sender_info_timeout","travel_rule_rejected","provider_rejected","chain_broadcast_failed","roster_changed","insufficient_onchain_balance","source_account_unavailable","capability_suspended"]},"failureMessage":{"description":"Conduit's own wording for `failureCode`: the public error catalog text for the code, or the generic failure text when there is no code. The same text as `failureMessage` on the `transaction.failed` webhook. It never carries text from a bank, a chain or a sandbox simulator `reason`.","type":"string"},"cancelledAt":{"description":"ISO-8601 timestamp when the transaction was cancelled. Present only on `status: cancelled`.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"cancellationReason":{"description":"Machine-readable cancellation reason. `client_cancelled` when the client called `POST /v2/payouts/:id/cancel`; `conduit_cancelled` when Conduit cancelled the payout; `expired` is reserved. The set of values can grow: treat an unknown value as Conduit ending the transaction. Omitted on non-cancelled rows. Orders carry only `client_cancelled` and `expired`.","type":"string","enum":["expired","client_cancelled","conduit_cancelled"]},"linkedOrderId":{"type":"string","pattern":"^ord_[0-9A-Za-z]{22}$"},"purpose":{"description":"The business purpose declared at payout creation. Drives compliance gating: intercompany requires a whitelisted recipient of the customer or its group; personal_transfer_of_funds requires the customer's own whitelisted account; prefunding requires a customer's issued account; other values require supporting documentation.","type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"]},"purposeDescription":{"description":"The customer's own words for the payment. Omitted when none was sent, and on the transaction list: read the single transaction to get it.","type":"string"},"hasRfi":{"type":"boolean","description":"True when at least one published (non-draft, non-cancelled) RFI targets this transaction. Always present; derived at read time, no stored column."},"rfiId":{"description":"The most recently published such RFI — usually the one `stage` refers to, but a later unrelated RFI on the same transaction takes this slot instead. Omitted (never `null`) when `hasRfi` is false.","type":"string","pattern":"^rfi_[0-9A-Za-z]{22}$"},"remittance":{"type":"object","properties":{"reference":{"type":"string"},"description":{"type":"string"}},"description":"The free-text reference of the payment. On a payout, the reference the payer supplied, fiat or crypto. On a transfer between two of the customer's own wallets the same value reads on both halves: the withdrawal that sent it and the deposit that credits it. On a deposit from a bank, `reference` is the text the sender wrote, as the bank passed it on: on ACH, the addenda (the payment-related information); on a wire, the remittance or originator-to-beneficiary information; on RTP, the remittance data; on SEPA, SEPA Instant and Faster Payments, the payment reference. Some banks do not pass the text on. Conduit removes control characters, keeps at most 512 characters, and drops a placeholder such as NOTPROVIDED and an echo of a Conduit ID. Omitted when there is no text. A transfer from another of your own accounts shows the payout's own reference, not the bank's text."},"swiftUetr":{"description":"The UETR of the fiat leg — the ISO 20022 unique end-to-end transaction reference. Present whenever the payment carried one, including on a deposit whose `source` is still `external_unknown` because the sender has not resolved. The side that carries wire references repeats it — `destination.swiftUetr` on a payout, `source.swiftUetr` on a deposit — but not every side does, which is why it reads here as well. A Fedwire message carries a UETR too, so its presence does not mean the payment travelled on SWIFT. Omitted (never `null`) when the rail supplied none.","type":"string"},"returnCode":{"description":"The return code the bank sent when it returned this transfer, for example the Nacha code `R01` on an ACH return. Present only with `failureCode: returned_by_sender`, and only when the bank sent a Nacha return code. `returnReason` says why the bank returned the transfer. The bank's free-text return reason is never returned.","type":"string"},"returnReason":{"description":"Why the bank returned or refused this transfer, as a Conduit code. Present with `failureCode: returned_by_sender` when Conduit recorded the bank's return, with or without `returnCode`. Present with `failureCode: provider_rejected` when the bank refused the payout before it settled, no funds moved, and the refusal carried a bank code that Conduit maps or the payee check refused the recipient before sending. Absent on a return recorded before this field existed. `account_closed`: The account is closed. Get new account details. `incorrect_account_number`: The account details are incorrect. Check them and send again. `beneficiary_name_mismatch`: The recipient's name does not match the account. Check the name and send again. `payment_not_permitted`: The bank or account does not accept this payment. `invalid_recipient_details`: The recipient's name, address or bank fields are missing, too long or invalid. Correct them and submit again. `other`: The bank gave no specific reason. Contact support for details. The set of values can grow. Treat a value you do not recognise as `other`. The bank's free-text reason is never sent.","type":"string","enum":["account_closed","incorrect_account_number","beneficiary_name_mismatch","payment_not_permitted","invalid_recipient_details","other"]},"returnedAt":{"description":"ISO-8601 timestamp when Conduit recorded the bank's return of this transfer. Present with `failureCode: returned_by_sender` when the return is recorded, with or without `returnCode`.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"type":{"type":"string","enum":["deposit"]},"funded":{"description":"Orders that hold a claim on this transfer, oldest first, with how much of it each draws. Present only on a transfer into a funding address that has not failed.","type":"array","items":{"type":"object","properties":{"orderId":{"type":"string","pattern":"^ord_[0-9A-Za-z]{22}$"},"orderStatus":{"description":"The order's status now. Funds leave the funding address when the order draws them, which can be hours before it succeeds — and they do not come back if it then fails.","type":"string","enum":["pending","succeeded","failed","cancelled"]},"amount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["orderId","orderStatus","amount"]}},"returned":{"description":"How much of this transfer has gone back, or is on its way back, to the address it came from. A return is counted from the moment it is dispatched, because the funds leave the funding address then — read the `deposit_return` transaction to see whether it has settled. Present under the same conditions as `funded`.","type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"available":{"description":"How much of this transfer no order has claimed and no return has taken, so it is still available at the funding address to fund the next order. `source.assetAmount` always equals the sum of `funded[].amount` plus `returned` plus `available`. These three fields appear only on a transfer into a funding address, which is never charged a deposit fee, so on such a transfer `source.assetAmount` and `destination.assetAmount` are the same figure and the sum reconciles against either.","type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["id","customerId","status","source","destination","fees","createdAt","hasRfi","type"],"description":"Client-facing view of an inbound deposit (fiat or crypto credit into a customer VA/wallet)."},"PublicDepositReturnViewDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$"},"customerName":{"description":"Display name of the customer that owns the transaction: business legal name or individual full name. Same value on the transactions and payouts reads for the same row. Omitted when the customer's identity record hasn't resolved a name yet; per the public omit-don't-null convention, absence is never surfaced as `null`.","type":"string"},"clientReferenceId":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces."},"status":{"type":"string","enum":["pending","processing","completed","failed","cancelled"]},"stage":{"description":"Progress signal for a non-terminal transaction, informational only — it does not replace `requiresUserSignature`, `hasRfi`, or `failureCode` for deciding whether your integration needs to act. `awaiting_signature`: waiting on the required transaction signature (see `requiresUserSignature`). `awaiting_customer_action`: further input is needed before the transaction can go on. Read `hasRfi` to learn where the ask is: `true` means a request for information holds the answer — `rfiId` names it, and `GET /v2/rfis/{id}` carries what to send; `false` means the matching event carries the detail (e.g. `transaction.awaiting_sender_information`); with no such event, the recipient details cannot be sent as given, so contact support to correct them, or cancel the payout. `under_review`: compliance, document, or verification review of something already submitted is in progress — usually no action needed; check `hasRfi` if unsure. `settling`: funds movement or settlement is in progress, no customer action required — covers long-lived fiat rails like SWIFT that legitimately take days as well as any other non-blocked in-flight state. Omitted once `status` reaches a terminal value (`completed` / `failed` / `cancelled`). The set of values may grow over time — treat unrecognized values the same as `processing`.","type":"string","enum":["awaiting_signature","awaiting_customer_action","under_review","settling"]},"source":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"destination":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"fees":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["fixed"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"owner":{"type":"string","enum":["conduit","you"],"description":"Who this charge belongs to. `conduit` is Conduit's own fee. `you` is the margin you declared on this transaction, which Conduit collects from your customer and accrues to you; it is your revenue, not a Conduit charge."}},"required":["type","assetAmount","owner"]}},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"completedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"failureCode":{"type":"string","enum":["user_signature_timeout","user_signature_expired","user_signature_declined","user_signature_rejected_by_provider","crypto_wallet_misconfigured","compliance_hold","compliance_review_rejected","compliance_rejected","returned_by_sender","rail_policy_rejected","insufficient_funds","insufficient_funds_at_settle","rail_unavailable","sender_info_timeout","travel_rule_rejected","provider_rejected","chain_broadcast_failed","roster_changed","insufficient_onchain_balance","source_account_unavailable","capability_suspended"]},"failureMessage":{"description":"Conduit's own wording for `failureCode`: the public error catalog text for the code, or the generic failure text when there is no code. The same text as `failureMessage` on the `transaction.failed` webhook. It never carries text from a bank, a chain or a sandbox simulator `reason`.","type":"string"},"cancelledAt":{"description":"ISO-8601 timestamp when the transaction was cancelled. Present only on `status: cancelled`.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"cancellationReason":{"description":"Machine-readable cancellation reason. `client_cancelled` when the client called `POST /v2/payouts/:id/cancel`; `conduit_cancelled` when Conduit cancelled the payout; `expired` is reserved. The set of values can grow: treat an unknown value as Conduit ending the transaction. Omitted on non-cancelled rows. Orders carry only `client_cancelled` and `expired`.","type":"string","enum":["expired","client_cancelled","conduit_cancelled"]},"linkedOrderId":{"type":"string","pattern":"^ord_[0-9A-Za-z]{22}$"},"purpose":{"description":"The business purpose declared at payout creation. Drives compliance gating: intercompany requires a whitelisted recipient of the customer or its group; personal_transfer_of_funds requires the customer's own whitelisted account; prefunding requires a customer's issued account; other values require supporting documentation.","type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"]},"purposeDescription":{"description":"The customer's own words for the payment. Omitted when none was sent, and on the transaction list: read the single transaction to get it.","type":"string"},"hasRfi":{"type":"boolean","description":"True when at least one published (non-draft, non-cancelled) RFI targets this transaction. Always present; derived at read time, no stored column."},"rfiId":{"description":"The most recently published such RFI — usually the one `stage` refers to, but a later unrelated RFI on the same transaction takes this slot instead. Omitted (never `null`) when `hasRfi` is false.","type":"string","pattern":"^rfi_[0-9A-Za-z]{22}$"},"remittance":{"type":"object","properties":{"reference":{"type":"string"},"description":{"type":"string"}},"description":"The free-text reference of the payment. On a payout, the reference the payer supplied, fiat or crypto. On a transfer between two of the customer's own wallets the same value reads on both halves: the withdrawal that sent it and the deposit that credits it. On a deposit from a bank, `reference` is the text the sender wrote, as the bank passed it on: on ACH, the addenda (the payment-related information); on a wire, the remittance or originator-to-beneficiary information; on RTP, the remittance data; on SEPA, SEPA Instant and Faster Payments, the payment reference. Some banks do not pass the text on. Conduit removes control characters, keeps at most 512 characters, and drops a placeholder such as NOTPROVIDED and an echo of a Conduit ID. Omitted when there is no text. A transfer from another of your own accounts shows the payout's own reference, not the bank's text."},"swiftUetr":{"description":"The UETR of the fiat leg — the ISO 20022 unique end-to-end transaction reference. Present whenever the payment carried one, including on a deposit whose `source` is still `external_unknown` because the sender has not resolved. The side that carries wire references repeats it — `destination.swiftUetr` on a payout, `source.swiftUetr` on a deposit — but not every side does, which is why it reads here as well. A Fedwire message carries a UETR too, so its presence does not mean the payment travelled on SWIFT. Omitted (never `null`) when the rail supplied none.","type":"string"},"type":{"type":"string","enum":["deposit_return"]},"returnOf":{"description":"The transfer this sends back. Its `returned` total includes this amount once this row is dispatched, whether or not it has settled yet. Omitted when the original transfer is no longer resolvable, and when the funds are a coin that Conduit does not support, which never became a transfer.","type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"}},"required":["id","customerId","status","source","destination","fees","createdAt","hasRfi","type"],"description":"Funds sent back to the address they came from: from a funding address, or a coin that Conduit does not support sent back from a wallet."},"PublicWithdrawalViewDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$"},"customerName":{"description":"Display name of the customer that owns the transaction: business legal name or individual full name. Same value on the transactions and payouts reads for the same row. Omitted when the customer's identity record hasn't resolved a name yet; per the public omit-don't-null convention, absence is never surfaced as `null`.","type":"string"},"clientReferenceId":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces."},"status":{"type":"string","enum":["pending","processing","completed","failed","cancelled"]},"stage":{"description":"Progress signal for a non-terminal transaction, informational only — it does not replace `requiresUserSignature`, `hasRfi`, or `failureCode` for deciding whether your integration needs to act. `awaiting_signature`: waiting on the required transaction signature (see `requiresUserSignature`). `awaiting_customer_action`: further input is needed before the transaction can go on. Read `hasRfi` to learn where the ask is: `true` means a request for information holds the answer — `rfiId` names it, and `GET /v2/rfis/{id}` carries what to send; `false` means the matching event carries the detail (e.g. `transaction.awaiting_sender_information`); with no such event, the recipient details cannot be sent as given, so contact support to correct them, or cancel the payout. `under_review`: compliance, document, or verification review of something already submitted is in progress — usually no action needed; check `hasRfi` if unsure. `settling`: funds movement or settlement is in progress, no customer action required — covers long-lived fiat rails like SWIFT that legitimately take days as well as any other non-blocked in-flight state. Omitted once `status` reaches a terminal value (`completed` / `failed` / `cancelled`). The set of values may grow over time — treat unrecognized values the same as `processing`.","type":"string","enum":["awaiting_signature","awaiting_customer_action","under_review","settling"]},"source":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"destination":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"fees":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["fixed"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"owner":{"type":"string","enum":["conduit","you"],"description":"Who this charge belongs to. `conduit` is Conduit's own fee. `you` is the margin you declared on this transaction, which Conduit collects from your customer and accrues to you; it is your revenue, not a Conduit charge."}},"required":["type","assetAmount","owner"]}},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"completedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"failureCode":{"type":"string","enum":["user_signature_timeout","user_signature_expired","user_signature_declined","user_signature_rejected_by_provider","crypto_wallet_misconfigured","compliance_hold","compliance_review_rejected","compliance_rejected","returned_by_sender","rail_policy_rejected","insufficient_funds","insufficient_funds_at_settle","rail_unavailable","sender_info_timeout","travel_rule_rejected","provider_rejected","chain_broadcast_failed","roster_changed","insufficient_onchain_balance","source_account_unavailable","capability_suspended"]},"failureMessage":{"description":"Conduit's own wording for `failureCode`: the public error catalog text for the code, or the generic failure text when there is no code. The same text as `failureMessage` on the `transaction.failed` webhook. It never carries text from a bank, a chain or a sandbox simulator `reason`.","type":"string"},"cancelledAt":{"description":"ISO-8601 timestamp when the transaction was cancelled. Present only on `status: cancelled`.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"cancellationReason":{"description":"Machine-readable cancellation reason. `client_cancelled` when the client called `POST /v2/payouts/:id/cancel`; `conduit_cancelled` when Conduit cancelled the payout; `expired` is reserved. The set of values can grow: treat an unknown value as Conduit ending the transaction. Omitted on non-cancelled rows. Orders carry only `client_cancelled` and `expired`.","type":"string","enum":["expired","client_cancelled","conduit_cancelled"]},"linkedOrderId":{"type":"string","pattern":"^ord_[0-9A-Za-z]{22}$"},"purpose":{"description":"The business purpose declared at payout creation. Drives compliance gating: intercompany requires a whitelisted recipient of the customer or its group; personal_transfer_of_funds requires the customer's own whitelisted account; prefunding requires a customer's issued account; other values require supporting documentation.","type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"]},"purposeDescription":{"description":"The customer's own words for the payment. Omitted when none was sent, and on the transaction list: read the single transaction to get it.","type":"string"},"hasRfi":{"type":"boolean","description":"True when at least one published (non-draft, non-cancelled) RFI targets this transaction. Always present; derived at read time, no stored column."},"rfiId":{"description":"The most recently published such RFI — usually the one `stage` refers to, but a later unrelated RFI on the same transaction takes this slot instead. Omitted (never `null`) when `hasRfi` is false.","type":"string","pattern":"^rfi_[0-9A-Za-z]{22}$"},"remittance":{"type":"object","properties":{"reference":{"type":"string"},"description":{"type":"string"}},"description":"The free-text reference of the payment. On a payout, the reference the payer supplied, fiat or crypto. On a transfer between two of the customer's own wallets the same value reads on both halves: the withdrawal that sent it and the deposit that credits it. On a deposit from a bank, `reference` is the text the sender wrote, as the bank passed it on: on ACH, the addenda (the payment-related information); on a wire, the remittance or originator-to-beneficiary information; on RTP, the remittance data; on SEPA, SEPA Instant and Faster Payments, the payment reference. Some banks do not pass the text on. Conduit removes control characters, keeps at most 512 characters, and drops a placeholder such as NOTPROVIDED and an echo of a Conduit ID. Omitted when there is no text. A transfer from another of your own accounts shows the payout's own reference, not the bank's text."},"swiftUetr":{"description":"The UETR of the fiat leg — the ISO 20022 unique end-to-end transaction reference. Present whenever the payment carried one, including on a deposit whose `source` is still `external_unknown` because the sender has not resolved. The side that carries wire references repeats it — `destination.swiftUetr` on a payout, `source.swiftUetr` on a deposit — but not every side does, which is why it reads here as well. A Fedwire message carries a UETR too, so its presence does not mean the payment travelled on SWIFT. Omitted (never `null`) when the rail supplied none.","type":"string"},"returnCode":{"description":"The return code the bank sent when it returned this transfer, for example the Nacha code `R01` on an ACH return. Present only with `failureCode: returned_by_sender`, and only when the bank sent a Nacha return code. `returnReason` says why the bank returned the transfer. The bank's free-text return reason is never returned.","type":"string"},"returnReason":{"description":"Why the bank returned or refused this transfer, as a Conduit code. Present with `failureCode: returned_by_sender` when Conduit recorded the bank's return, with or without `returnCode`. Present with `failureCode: provider_rejected` when the bank refused the payout before it settled, no funds moved, and the refusal carried a bank code that Conduit maps or the payee check refused the recipient before sending. Absent on a return recorded before this field existed. `account_closed`: The account is closed. Get new account details. `incorrect_account_number`: The account details are incorrect. Check them and send again. `beneficiary_name_mismatch`: The recipient's name does not match the account. Check the name and send again. `payment_not_permitted`: The bank or account does not accept this payment. `invalid_recipient_details`: The recipient's name, address or bank fields are missing, too long or invalid. Correct them and submit again. `other`: The bank gave no specific reason. Contact support for details. The set of values can grow. Treat a value you do not recognise as `other`. The bank's free-text reason is never sent.","type":"string","enum":["account_closed","incorrect_account_number","beneficiary_name_mismatch","payment_not_permitted","invalid_recipient_details","other"]},"returnedAt":{"description":"ISO-8601 timestamp when Conduit recorded the bank's return of this transfer. Present with `failureCode: returned_by_sender` when the return is recorded, with or without `returnCode`.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"type":{"type":"string","enum":["withdrawal"]},"markup":{"type":"object","properties":{"bps":{"description":"The percentage margin you declared on this payout, in basis points. Absent when you declared only a flat amount.","type":"number"},"flatAmount":{"description":"The flat margin you declared on this payout, in the payout's asset. Absent when you declared only a percentage. Also absent when the flat amount you declared on an order's auto-payout leg was smaller than one minor unit of the payout's asset: that leg is declared before its asset is known, so the term rounds away there while the percentage stays.","type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"assetAmount":{"description":"What that margin charges your customer for you: the percentage part plus the flat part. It is present exactly when `fees[]` carries the entry with `owner: \"you\"`, and it is that same figure. So read `fees[]` to see whether this payout still holds the margin for you, and `GET /v2/markup/statement-lines` to see what it accrued to you. A returned or cancelled payout does not hold it.","type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"description":"The margin you declared on this payout, echoed back. Present when you declared one that came to at least one minor unit of the payout's asset. `bps` and `flatAmount` read back for the life of the payout, whatever becomes of it, so you can always confirm what you sent. What each payout accrued to you is answered by `GET /v2/markup/statement-lines`, where a reversal reads as a negative amount."},"requiresUserSignature":{"type":"boolean"},"cancellable":{"type":"boolean","description":"Whether this payout is eligible for `POST /v2/payouts/{id}/cancel`. Always present, derived at read time. It is `false` at a terminal status, and `false` once the payout is dispatched for settlement: the bank has answered its submit, or its on-chain send started. Eligibility is not a guarantee that the next cancel succeeds: while the payout starts up, a cancel can answer 409 `PAYOUT_CANCEL_IN_PROGRESS` although `cancellable` is `true` — retry shortly — and a payout that moves on between the read and the cancel answers 409 `PAYOUT_NOT_CANCELLABLE`. That includes a fiat payout whose submit is still waiting for the bank's answer: its cancel already answers 409 while `cancellable` still reads `true`."},"queuePosition":{"description":"Position in the per-(wallet, chain) signing queue. Only waiting payouts (position ≥ 1) expose this field; the active/head payout omits it. Absent when the payout is not on the user-signature path or has reached a terminal status.","type":"integer","minimum":1,"maximum":9007199254740991},"retryOf":{"description":"The payout this one replaces. Present when an operator re-sent a payout the receiving bank returned; the original transfer reads `failed` with failure code `returned_by_sender`.","type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"documents":{"description":"The supporting documents attached at creation, as sent on `documents`. Omitted when none were attached.","type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["id","customerId","status","source","destination","fees","createdAt","hasRfi","type","requiresUserSignature","cancellable"],"description":"Client-facing view of an outbound withdrawal (debit out of a customer VA/wallet)."},"PublicOnrampViewDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$"},"customerName":{"description":"Display name of the customer that owns the transaction: business legal name or individual full name. Same value on the transactions and payouts reads for the same row. Omitted when the customer's identity record hasn't resolved a name yet; per the public omit-don't-null convention, absence is never surfaced as `null`.","type":"string"},"clientReferenceId":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces."},"status":{"type":"string","enum":["pending","processing","completed","failed","cancelled"]},"stage":{"description":"Progress signal for a non-terminal transaction, informational only — it does not replace `requiresUserSignature`, `hasRfi`, or `failureCode` for deciding whether your integration needs to act. `awaiting_signature`: waiting on the required transaction signature (see `requiresUserSignature`). `awaiting_customer_action`: further input is needed before the transaction can go on. Read `hasRfi` to learn where the ask is: `true` means a request for information holds the answer — `rfiId` names it, and `GET /v2/rfis/{id}` carries what to send; `false` means the matching event carries the detail (e.g. `transaction.awaiting_sender_information`); with no such event, the recipient details cannot be sent as given, so contact support to correct them, or cancel the payout. `under_review`: compliance, document, or verification review of something already submitted is in progress — usually no action needed; check `hasRfi` if unsure. `settling`: funds movement or settlement is in progress, no customer action required — covers long-lived fiat rails like SWIFT that legitimately take days as well as any other non-blocked in-flight state. Omitted once `status` reaches a terminal value (`completed` / `failed` / `cancelled`). The set of values may grow over time — treat unrecognized values the same as `processing`.","type":"string","enum":["awaiting_signature","awaiting_customer_action","under_review","settling"]},"source":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"destination":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"fees":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["fixed"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"owner":{"type":"string","enum":["conduit","you"],"description":"Who this charge belongs to. `conduit` is Conduit's own fee. `you` is the margin you declared on this transaction, which Conduit collects from your customer and accrues to you; it is your revenue, not a Conduit charge."}},"required":["type","assetAmount","owner"]}},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"completedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"failureCode":{"type":"string","enum":["user_signature_timeout","user_signature_expired","user_signature_declined","user_signature_rejected_by_provider","crypto_wallet_misconfigured","compliance_hold","compliance_review_rejected","compliance_rejected","returned_by_sender","rail_policy_rejected","insufficient_funds","insufficient_funds_at_settle","rail_unavailable","sender_info_timeout","travel_rule_rejected","provider_rejected","chain_broadcast_failed","roster_changed","insufficient_onchain_balance","source_account_unavailable","capability_suspended"]},"failureMessage":{"description":"Conduit's own wording for `failureCode`: the public error catalog text for the code, or the generic failure text when there is no code. The same text as `failureMessage` on the `transaction.failed` webhook. It never carries text from a bank, a chain or a sandbox simulator `reason`.","type":"string"},"cancelledAt":{"description":"ISO-8601 timestamp when the transaction was cancelled. Present only on `status: cancelled`.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"cancellationReason":{"description":"Machine-readable cancellation reason. `client_cancelled` when the client called `POST /v2/payouts/:id/cancel`; `conduit_cancelled` when Conduit cancelled the payout; `expired` is reserved. The set of values can grow: treat an unknown value as Conduit ending the transaction. Omitted on non-cancelled rows. Orders carry only `client_cancelled` and `expired`.","type":"string","enum":["expired","client_cancelled","conduit_cancelled"]},"linkedOrderId":{"type":"string","pattern":"^ord_[0-9A-Za-z]{22}$"},"purpose":{"description":"The business purpose declared at payout creation. Drives compliance gating: intercompany requires a whitelisted recipient of the customer or its group; personal_transfer_of_funds requires the customer's own whitelisted account; prefunding requires a customer's issued account; other values require supporting documentation.","type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"]},"purposeDescription":{"description":"The customer's own words for the payment. Omitted when none was sent, and on the transaction list: read the single transaction to get it.","type":"string"},"hasRfi":{"type":"boolean","description":"True when at least one published (non-draft, non-cancelled) RFI targets this transaction. Always present; derived at read time, no stored column."},"rfiId":{"description":"The most recently published such RFI — usually the one `stage` refers to, but a later unrelated RFI on the same transaction takes this slot instead. Omitted (never `null`) when `hasRfi` is false.","type":"string","pattern":"^rfi_[0-9A-Za-z]{22}$"},"remittance":{"type":"object","properties":{"reference":{"type":"string"},"description":{"type":"string"}},"description":"The free-text reference of the payment. On a payout, the reference the payer supplied, fiat or crypto. On a transfer between two of the customer's own wallets the same value reads on both halves: the withdrawal that sent it and the deposit that credits it. On a deposit from a bank, `reference` is the text the sender wrote, as the bank passed it on: on ACH, the addenda (the payment-related information); on a wire, the remittance or originator-to-beneficiary information; on RTP, the remittance data; on SEPA, SEPA Instant and Faster Payments, the payment reference. Some banks do not pass the text on. Conduit removes control characters, keeps at most 512 characters, and drops a placeholder such as NOTPROVIDED and an echo of a Conduit ID. Omitted when there is no text. A transfer from another of your own accounts shows the payout's own reference, not the bank's text."},"swiftUetr":{"description":"The UETR of the fiat leg — the ISO 20022 unique end-to-end transaction reference. Present whenever the payment carried one, including on a deposit whose `source` is still `external_unknown` because the sender has not resolved. The side that carries wire references repeats it — `destination.swiftUetr` on a payout, `source.swiftUetr` on a deposit — but not every side does, which is why it reads here as well. A Fedwire message carries a UETR too, so its presence does not mean the payment travelled on SWIFT. Omitted (never `null`) when the rail supplied none.","type":"string"},"type":{"type":"string","enum":["onramp"]}},"required":["id","customerId","status","source","destination","fees","createdAt","hasRfi","type"],"description":"Client-facing view of a fiat-to-crypto conversion."},"PublicOfframpViewDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$"},"customerName":{"description":"Display name of the customer that owns the transaction: business legal name or individual full name. Same value on the transactions and payouts reads for the same row. Omitted when the customer's identity record hasn't resolved a name yet; per the public omit-don't-null convention, absence is never surfaced as `null`.","type":"string"},"clientReferenceId":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces."},"status":{"type":"string","enum":["pending","processing","completed","failed","cancelled"]},"stage":{"description":"Progress signal for a non-terminal transaction, informational only — it does not replace `requiresUserSignature`, `hasRfi`, or `failureCode` for deciding whether your integration needs to act. `awaiting_signature`: waiting on the required transaction signature (see `requiresUserSignature`). `awaiting_customer_action`: further input is needed before the transaction can go on. Read `hasRfi` to learn where the ask is: `true` means a request for information holds the answer — `rfiId` names it, and `GET /v2/rfis/{id}` carries what to send; `false` means the matching event carries the detail (e.g. `transaction.awaiting_sender_information`); with no such event, the recipient details cannot be sent as given, so contact support to correct them, or cancel the payout. `under_review`: compliance, document, or verification review of something already submitted is in progress — usually no action needed; check `hasRfi` if unsure. `settling`: funds movement or settlement is in progress, no customer action required — covers long-lived fiat rails like SWIFT that legitimately take days as well as any other non-blocked in-flight state. Omitted once `status` reaches a terminal value (`completed` / `failed` / `cancelled`). The set of values may grow over time — treat unrecognized values the same as `processing`.","type":"string","enum":["awaiting_signature","awaiting_customer_action","under_review","settling"]},"source":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"destination":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"fees":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["fixed"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"owner":{"type":"string","enum":["conduit","you"],"description":"Who this charge belongs to. `conduit` is Conduit's own fee. `you` is the margin you declared on this transaction, which Conduit collects from your customer and accrues to you; it is your revenue, not a Conduit charge."}},"required":["type","assetAmount","owner"]}},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"completedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"failureCode":{"type":"string","enum":["user_signature_timeout","user_signature_expired","user_signature_declined","user_signature_rejected_by_provider","crypto_wallet_misconfigured","compliance_hold","compliance_review_rejected","compliance_rejected","returned_by_sender","rail_policy_rejected","insufficient_funds","insufficient_funds_at_settle","rail_unavailable","sender_info_timeout","travel_rule_rejected","provider_rejected","chain_broadcast_failed","roster_changed","insufficient_onchain_balance","source_account_unavailable","capability_suspended"]},"failureMessage":{"description":"Conduit's own wording for `failureCode`: the public error catalog text for the code, or the generic failure text when there is no code. The same text as `failureMessage` on the `transaction.failed` webhook. It never carries text from a bank, a chain or a sandbox simulator `reason`.","type":"string"},"cancelledAt":{"description":"ISO-8601 timestamp when the transaction was cancelled. Present only on `status: cancelled`.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"cancellationReason":{"description":"Machine-readable cancellation reason. `client_cancelled` when the client called `POST /v2/payouts/:id/cancel`; `conduit_cancelled` when Conduit cancelled the payout; `expired` is reserved. The set of values can grow: treat an unknown value as Conduit ending the transaction. Omitted on non-cancelled rows. Orders carry only `client_cancelled` and `expired`.","type":"string","enum":["expired","client_cancelled","conduit_cancelled"]},"linkedOrderId":{"type":"string","pattern":"^ord_[0-9A-Za-z]{22}$"},"purpose":{"description":"The business purpose declared at payout creation. Drives compliance gating: intercompany requires a whitelisted recipient of the customer or its group; personal_transfer_of_funds requires the customer's own whitelisted account; prefunding requires a customer's issued account; other values require supporting documentation.","type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"]},"purposeDescription":{"description":"The customer's own words for the payment. Omitted when none was sent, and on the transaction list: read the single transaction to get it.","type":"string"},"hasRfi":{"type":"boolean","description":"True when at least one published (non-draft, non-cancelled) RFI targets this transaction. Always present; derived at read time, no stored column."},"rfiId":{"description":"The most recently published such RFI — usually the one `stage` refers to, but a later unrelated RFI on the same transaction takes this slot instead. Omitted (never `null`) when `hasRfi` is false.","type":"string","pattern":"^rfi_[0-9A-Za-z]{22}$"},"remittance":{"type":"object","properties":{"reference":{"type":"string"},"description":{"type":"string"}},"description":"The free-text reference of the payment. On a payout, the reference the payer supplied, fiat or crypto. On a transfer between two of the customer's own wallets the same value reads on both halves: the withdrawal that sent it and the deposit that credits it. On a deposit from a bank, `reference` is the text the sender wrote, as the bank passed it on: on ACH, the addenda (the payment-related information); on a wire, the remittance or originator-to-beneficiary information; on RTP, the remittance data; on SEPA, SEPA Instant and Faster Payments, the payment reference. Some banks do not pass the text on. Conduit removes control characters, keeps at most 512 characters, and drops a placeholder such as NOTPROVIDED and an echo of a Conduit ID. Omitted when there is no text. A transfer from another of your own accounts shows the payout's own reference, not the bank's text."},"swiftUetr":{"description":"The UETR of the fiat leg — the ISO 20022 unique end-to-end transaction reference. Present whenever the payment carried one, including on a deposit whose `source` is still `external_unknown` because the sender has not resolved. The side that carries wire references repeats it — `destination.swiftUetr` on a payout, `source.swiftUetr` on a deposit — but not every side does, which is why it reads here as well. A Fedwire message carries a UETR too, so its presence does not mean the payment travelled on SWIFT. Omitted (never `null`) when the rail supplied none.","type":"string"},"type":{"type":"string","enum":["offramp"]}},"required":["id","customerId","status","source","destination","fees","createdAt","hasRfi","type"],"description":"Client-facing view of a crypto-to-fiat conversion."},"PublicCryptoConversionViewDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$"},"customerName":{"description":"Display name of the customer that owns the transaction: business legal name or individual full name. Same value on the transactions and payouts reads for the same row. Omitted when the customer's identity record hasn't resolved a name yet; per the public omit-don't-null convention, absence is never surfaced as `null`.","type":"string"},"clientReferenceId":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces."},"status":{"type":"string","enum":["pending","processing","completed","failed","cancelled"]},"stage":{"description":"Progress signal for a non-terminal transaction, informational only — it does not replace `requiresUserSignature`, `hasRfi`, or `failureCode` for deciding whether your integration needs to act. `awaiting_signature`: waiting on the required transaction signature (see `requiresUserSignature`). `awaiting_customer_action`: further input is needed before the transaction can go on. Read `hasRfi` to learn where the ask is: `true` means a request for information holds the answer — `rfiId` names it, and `GET /v2/rfis/{id}` carries what to send; `false` means the matching event carries the detail (e.g. `transaction.awaiting_sender_information`); with no such event, the recipient details cannot be sent as given, so contact support to correct them, or cancel the payout. `under_review`: compliance, document, or verification review of something already submitted is in progress — usually no action needed; check `hasRfi` if unsure. `settling`: funds movement or settlement is in progress, no customer action required — covers long-lived fiat rails like SWIFT that legitimately take days as well as any other non-blocked in-flight state. Omitted once `status` reaches a terminal value (`completed` / `failed` / `cancelled`). The set of values may grow over time — treat unrecognized values the same as `processing`.","type":"string","enum":["awaiting_signature","awaiting_customer_action","under_review","settling"]},"source":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"destination":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"fees":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["fixed"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"owner":{"type":"string","enum":["conduit","you"],"description":"Who this charge belongs to. `conduit` is Conduit's own fee. `you` is the margin you declared on this transaction, which Conduit collects from your customer and accrues to you; it is your revenue, not a Conduit charge."}},"required":["type","assetAmount","owner"]}},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"completedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"failureCode":{"type":"string","enum":["user_signature_timeout","user_signature_expired","user_signature_declined","user_signature_rejected_by_provider","crypto_wallet_misconfigured","compliance_hold","compliance_review_rejected","compliance_rejected","returned_by_sender","rail_policy_rejected","insufficient_funds","insufficient_funds_at_settle","rail_unavailable","sender_info_timeout","travel_rule_rejected","provider_rejected","chain_broadcast_failed","roster_changed","insufficient_onchain_balance","source_account_unavailable","capability_suspended"]},"failureMessage":{"description":"Conduit's own wording for `failureCode`: the public error catalog text for the code, or the generic failure text when there is no code. The same text as `failureMessage` on the `transaction.failed` webhook. It never carries text from a bank, a chain or a sandbox simulator `reason`.","type":"string"},"cancelledAt":{"description":"ISO-8601 timestamp when the transaction was cancelled. Present only on `status: cancelled`.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"cancellationReason":{"description":"Machine-readable cancellation reason. `client_cancelled` when the client called `POST /v2/payouts/:id/cancel`; `conduit_cancelled` when Conduit cancelled the payout; `expired` is reserved. The set of values can grow: treat an unknown value as Conduit ending the transaction. Omitted on non-cancelled rows. Orders carry only `client_cancelled` and `expired`.","type":"string","enum":["expired","client_cancelled","conduit_cancelled"]},"linkedOrderId":{"type":"string","pattern":"^ord_[0-9A-Za-z]{22}$"},"purpose":{"description":"The business purpose declared at payout creation. Drives compliance gating: intercompany requires a whitelisted recipient of the customer or its group; personal_transfer_of_funds requires the customer's own whitelisted account; prefunding requires a customer's issued account; other values require supporting documentation.","type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"]},"purposeDescription":{"description":"The customer's own words for the payment. Omitted when none was sent, and on the transaction list: read the single transaction to get it.","type":"string"},"hasRfi":{"type":"boolean","description":"True when at least one published (non-draft, non-cancelled) RFI targets this transaction. Always present; derived at read time, no stored column."},"rfiId":{"description":"The most recently published such RFI — usually the one `stage` refers to, but a later unrelated RFI on the same transaction takes this slot instead. Omitted (never `null`) when `hasRfi` is false.","type":"string","pattern":"^rfi_[0-9A-Za-z]{22}$"},"remittance":{"type":"object","properties":{"reference":{"type":"string"},"description":{"type":"string"}},"description":"The free-text reference of the payment. On a payout, the reference the payer supplied, fiat or crypto. On a transfer between two of the customer's own wallets the same value reads on both halves: the withdrawal that sent it and the deposit that credits it. On a deposit from a bank, `reference` is the text the sender wrote, as the bank passed it on: on ACH, the addenda (the payment-related information); on a wire, the remittance or originator-to-beneficiary information; on RTP, the remittance data; on SEPA, SEPA Instant and Faster Payments, the payment reference. Some banks do not pass the text on. Conduit removes control characters, keeps at most 512 characters, and drops a placeholder such as NOTPROVIDED and an echo of a Conduit ID. Omitted when there is no text. A transfer from another of your own accounts shows the payout's own reference, not the bank's text."},"swiftUetr":{"description":"The UETR of the fiat leg — the ISO 20022 unique end-to-end transaction reference. Present whenever the payment carried one, including on a deposit whose `source` is still `external_unknown` because the sender has not resolved. The side that carries wire references repeats it — `destination.swiftUetr` on a payout, `source.swiftUetr` on a deposit — but not every side does, which is why it reads here as well. A Fedwire message carries a UETR too, so its presence does not mean the payment travelled on SWIFT. Omitted (never `null`) when the rail supplied none.","type":"string"},"type":{"type":"string","enum":["conversion"]}},"required":["id","customerId","status","source","destination","fees","createdAt","hasRfi","type"],"description":"Client-facing view of a crypto-to-crypto conversion (swap or bridge)."},"PublicFiatConversionViewDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$"},"customerName":{"description":"Display name of the customer that owns the transaction: business legal name or individual full name. Same value on the transactions and payouts reads for the same row. Omitted when the customer's identity record hasn't resolved a name yet; per the public omit-don't-null convention, absence is never surfaced as `null`.","type":"string"},"clientReferenceId":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces."},"status":{"type":"string","enum":["pending","processing","completed","failed","cancelled"]},"stage":{"description":"Progress signal for a non-terminal transaction, informational only — it does not replace `requiresUserSignature`, `hasRfi`, or `failureCode` for deciding whether your integration needs to act. `awaiting_signature`: waiting on the required transaction signature (see `requiresUserSignature`). `awaiting_customer_action`: further input is needed before the transaction can go on. Read `hasRfi` to learn where the ask is: `true` means a request for information holds the answer — `rfiId` names it, and `GET /v2/rfis/{id}` carries what to send; `false` means the matching event carries the detail (e.g. `transaction.awaiting_sender_information`); with no such event, the recipient details cannot be sent as given, so contact support to correct them, or cancel the payout. `under_review`: compliance, document, or verification review of something already submitted is in progress — usually no action needed; check `hasRfi` if unsure. `settling`: funds movement or settlement is in progress, no customer action required — covers long-lived fiat rails like SWIFT that legitimately take days as well as any other non-blocked in-flight state. Omitted once `status` reaches a terminal value (`completed` / `failed` / `cancelled`). The set of values may grow over time — treat unrecognized values the same as `processing`.","type":"string","enum":["awaiting_signature","awaiting_customer_action","under_review","settling"]},"source":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"destination":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"fees":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["fixed"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"owner":{"type":"string","enum":["conduit","you"],"description":"Who this charge belongs to. `conduit` is Conduit's own fee. `you` is the margin you declared on this transaction, which Conduit collects from your customer and accrues to you; it is your revenue, not a Conduit charge."}},"required":["type","assetAmount","owner"]}},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"completedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"failureCode":{"type":"string","enum":["user_signature_timeout","user_signature_expired","user_signature_declined","user_signature_rejected_by_provider","crypto_wallet_misconfigured","compliance_hold","compliance_review_rejected","compliance_rejected","returned_by_sender","rail_policy_rejected","insufficient_funds","insufficient_funds_at_settle","rail_unavailable","sender_info_timeout","travel_rule_rejected","provider_rejected","chain_broadcast_failed","roster_changed","insufficient_onchain_balance","source_account_unavailable","capability_suspended"]},"failureMessage":{"description":"Conduit's own wording for `failureCode`: the public error catalog text for the code, or the generic failure text when there is no code. The same text as `failureMessage` on the `transaction.failed` webhook. It never carries text from a bank, a chain or a sandbox simulator `reason`.","type":"string"},"cancelledAt":{"description":"ISO-8601 timestamp when the transaction was cancelled. Present only on `status: cancelled`.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"cancellationReason":{"description":"Machine-readable cancellation reason. `client_cancelled` when the client called `POST /v2/payouts/:id/cancel`; `conduit_cancelled` when Conduit cancelled the payout; `expired` is reserved. The set of values can grow: treat an unknown value as Conduit ending the transaction. Omitted on non-cancelled rows. Orders carry only `client_cancelled` and `expired`.","type":"string","enum":["expired","client_cancelled","conduit_cancelled"]},"linkedOrderId":{"type":"string","pattern":"^ord_[0-9A-Za-z]{22}$"},"purpose":{"description":"The business purpose declared at payout creation. Drives compliance gating: intercompany requires a whitelisted recipient of the customer or its group; personal_transfer_of_funds requires the customer's own whitelisted account; prefunding requires a customer's issued account; other values require supporting documentation.","type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"]},"purposeDescription":{"description":"The customer's own words for the payment. Omitted when none was sent, and on the transaction list: read the single transaction to get it.","type":"string"},"hasRfi":{"type":"boolean","description":"True when at least one published (non-draft, non-cancelled) RFI targets this transaction. Always present; derived at read time, no stored column."},"rfiId":{"description":"The most recently published such RFI — usually the one `stage` refers to, but a later unrelated RFI on the same transaction takes this slot instead. Omitted (never `null`) when `hasRfi` is false.","type":"string","pattern":"^rfi_[0-9A-Za-z]{22}$"},"remittance":{"type":"object","properties":{"reference":{"type":"string"},"description":{"type":"string"}},"description":"The free-text reference of the payment. On a payout, the reference the payer supplied, fiat or crypto. On a transfer between two of the customer's own wallets the same value reads on both halves: the withdrawal that sent it and the deposit that credits it. On a deposit from a bank, `reference` is the text the sender wrote, as the bank passed it on: on ACH, the addenda (the payment-related information); on a wire, the remittance or originator-to-beneficiary information; on RTP, the remittance data; on SEPA, SEPA Instant and Faster Payments, the payment reference. Some banks do not pass the text on. Conduit removes control characters, keeps at most 512 characters, and drops a placeholder such as NOTPROVIDED and an echo of a Conduit ID. Omitted when there is no text. A transfer from another of your own accounts shows the payout's own reference, not the bank's text."},"swiftUetr":{"description":"The UETR of the fiat leg — the ISO 20022 unique end-to-end transaction reference. Present whenever the payment carried one, including on a deposit whose `source` is still `external_unknown` because the sender has not resolved. The side that carries wire references repeats it — `destination.swiftUetr` on a payout, `source.swiftUetr` on a deposit — but not every side does, which is why it reads here as well. A Fedwire message carries a UETR too, so its presence does not mean the payment travelled on SWIFT. Omitted (never `null`) when the rail supplied none.","type":"string"},"type":{"type":"string","enum":["fiat_conversion"]}},"required":["id","customerId","status","source","destination","fees","createdAt","hasRfi","type"],"description":"Client-facing view of a fiat-to-fiat conversion."},"PublicTransactionsPageDto":{"type":"object","properties":{"data":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$"},"customerName":{"description":"Display name of the customer that owns the transaction: business legal name or individual full name. Same value on the transactions and payouts reads for the same row. Omitted when the customer's identity record hasn't resolved a name yet; per the public omit-don't-null convention, absence is never surfaced as `null`.","type":"string"},"clientReferenceId":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces."},"status":{"type":"string","enum":["pending","processing","completed","failed","cancelled"]},"stage":{"description":"Progress signal for a non-terminal transaction, informational only — it does not replace `requiresUserSignature`, `hasRfi`, or `failureCode` for deciding whether your integration needs to act. `awaiting_signature`: waiting on the required transaction signature (see `requiresUserSignature`). `awaiting_customer_action`: further input is needed before the transaction can go on. Read `hasRfi` to learn where the ask is: `true` means a request for information holds the answer — `rfiId` names it, and `GET /v2/rfis/{id}` carries what to send; `false` means the matching event carries the detail (e.g. `transaction.awaiting_sender_information`); with no such event, the recipient details cannot be sent as given, so contact support to correct them, or cancel the payout. `under_review`: compliance, document, or verification review of something already submitted is in progress — usually no action needed; check `hasRfi` if unsure. `settling`: funds movement or settlement is in progress, no customer action required — covers long-lived fiat rails like SWIFT that legitimately take days as well as any other non-blocked in-flight state. Omitted once `status` reaches a terminal value (`completed` / `failed` / `cancelled`). The set of values may grow over time — treat unrecognized values the same as `processing`.","type":"string","enum":["awaiting_signature","awaiting_customer_action","under_review","settling"]},"source":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"destination":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"fees":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["fixed"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"owner":{"type":"string","enum":["conduit","you"],"description":"Who this charge belongs to. `conduit` is Conduit's own fee. `you` is the margin you declared on this transaction, which Conduit collects from your customer and accrues to you; it is your revenue, not a Conduit charge."}},"required":["type","assetAmount","owner"]}},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"completedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"failureCode":{"type":"string","enum":["user_signature_timeout","user_signature_expired","user_signature_declined","user_signature_rejected_by_provider","crypto_wallet_misconfigured","compliance_hold","compliance_review_rejected","compliance_rejected","returned_by_sender","rail_policy_rejected","insufficient_funds","insufficient_funds_at_settle","rail_unavailable","sender_info_timeout","travel_rule_rejected","provider_rejected","chain_broadcast_failed","roster_changed","insufficient_onchain_balance","source_account_unavailable","capability_suspended"]},"failureMessage":{"description":"Conduit's own wording for `failureCode`: the public error catalog text for the code, or the generic failure text when there is no code. The same text as `failureMessage` on the `transaction.failed` webhook. It never carries text from a bank, a chain or a sandbox simulator `reason`.","type":"string"},"cancelledAt":{"description":"ISO-8601 timestamp when the transaction was cancelled. Present only on `status: cancelled`.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"cancellationReason":{"description":"Machine-readable cancellation reason. `client_cancelled` when the client called `POST /v2/payouts/:id/cancel`; `conduit_cancelled` when Conduit cancelled the payout; `expired` is reserved. The set of values can grow: treat an unknown value as Conduit ending the transaction. Omitted on non-cancelled rows. Orders carry only `client_cancelled` and `expired`.","type":"string","enum":["expired","client_cancelled","conduit_cancelled"]},"linkedOrderId":{"type":"string","pattern":"^ord_[0-9A-Za-z]{22}$"},"purpose":{"description":"The business purpose declared at payout creation. Drives compliance gating: intercompany requires a whitelisted recipient of the customer or its group; personal_transfer_of_funds requires the customer's own whitelisted account; prefunding requires a customer's issued account; other values require supporting documentation.","type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"]},"purposeDescription":{"description":"The customer's own words for the payment. Omitted when none was sent, and on the transaction list: read the single transaction to get it.","type":"string"},"hasRfi":{"type":"boolean","description":"True when at least one published (non-draft, non-cancelled) RFI targets this transaction. Always present; derived at read time, no stored column."},"rfiId":{"description":"The most recently published such RFI — usually the one `stage` refers to, but a later unrelated RFI on the same transaction takes this slot instead. Omitted (never `null`) when `hasRfi` is false.","type":"string","pattern":"^rfi_[0-9A-Za-z]{22}$"},"remittance":{"type":"object","properties":{"reference":{"type":"string"},"description":{"type":"string"}},"description":"The free-text reference of the payment. On a payout, the reference the payer supplied, fiat or crypto. On a transfer between two of the customer's own wallets the same value reads on both halves: the withdrawal that sent it and the deposit that credits it. On a deposit from a bank, `reference` is the text the sender wrote, as the bank passed it on: on ACH, the addenda (the payment-related information); on a wire, the remittance or originator-to-beneficiary information; on RTP, the remittance data; on SEPA, SEPA Instant and Faster Payments, the payment reference. Some banks do not pass the text on. Conduit removes control characters, keeps at most 512 characters, and drops a placeholder such as NOTPROVIDED and an echo of a Conduit ID. Omitted when there is no text. A transfer from another of your own accounts shows the payout's own reference, not the bank's text."},"swiftUetr":{"description":"The UETR of the fiat leg — the ISO 20022 unique end-to-end transaction reference. Present whenever the payment carried one, including on a deposit whose `source` is still `external_unknown` because the sender has not resolved. The side that carries wire references repeats it — `destination.swiftUetr` on a payout, `source.swiftUetr` on a deposit — but not every side does, which is why it reads here as well. A Fedwire message carries a UETR too, so its presence does not mean the payment travelled on SWIFT. Omitted (never `null`) when the rail supplied none.","type":"string"},"returnCode":{"description":"The return code the bank sent when it returned this transfer, for example the Nacha code `R01` on an ACH return. Present only with `failureCode: returned_by_sender`, and only when the bank sent a Nacha return code. `returnReason` says why the bank returned the transfer. The bank's free-text return reason is never returned.","type":"string"},"returnReason":{"description":"Why the bank returned or refused this transfer, as a Conduit code. Present with `failureCode: returned_by_sender` when Conduit recorded the bank's return, with or without `returnCode`. Present with `failureCode: provider_rejected` when the bank refused the payout before it settled, no funds moved, and the refusal carried a bank code that Conduit maps or the payee check refused the recipient before sending. Absent on a return recorded before this field existed. `account_closed`: The account is closed. Get new account details. `incorrect_account_number`: The account details are incorrect. Check them and send again. `beneficiary_name_mismatch`: The recipient's name does not match the account. Check the name and send again. `payment_not_permitted`: The bank or account does not accept this payment. `invalid_recipient_details`: The recipient's name, address or bank fields are missing, too long or invalid. Correct them and submit again. `other`: The bank gave no specific reason. Contact support for details. The set of values can grow. Treat a value you do not recognise as `other`. The bank's free-text reason is never sent.","type":"string","enum":["account_closed","incorrect_account_number","beneficiary_name_mismatch","payment_not_permitted","invalid_recipient_details","other"]},"returnedAt":{"description":"ISO-8601 timestamp when Conduit recorded the bank's return of this transfer. Present with `failureCode: returned_by_sender` when the return is recorded, with or without `returnCode`.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"type":{"type":"string","enum":["deposit"]},"funded":{"description":"Orders that hold a claim on this transfer, oldest first, with how much of it each draws. Present only on a transfer into a funding address that has not failed.","type":"array","items":{"type":"object","properties":{"orderId":{"type":"string","pattern":"^ord_[0-9A-Za-z]{22}$"},"orderStatus":{"description":"The order's status now. Funds leave the funding address when the order draws them, which can be hours before it succeeds — and they do not come back if it then fails.","type":"string","enum":["pending","succeeded","failed","cancelled"]},"amount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["orderId","orderStatus","amount"]}},"returned":{"description":"How much of this transfer has gone back, or is on its way back, to the address it came from. A return is counted from the moment it is dispatched, because the funds leave the funding address then — read the `deposit_return` transaction to see whether it has settled. Present under the same conditions as `funded`.","type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"available":{"description":"How much of this transfer no order has claimed and no return has taken, so it is still available at the funding address to fund the next order. `source.assetAmount` always equals the sum of `funded[].amount` plus `returned` plus `available`. These three fields appear only on a transfer into a funding address, which is never charged a deposit fee, so on such a transfer `source.assetAmount` and `destination.assetAmount` are the same figure and the sum reconciles against either.","type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["id","customerId","status","source","destination","fees","createdAt","hasRfi","type"],"description":"Client-facing view of an inbound deposit (fiat or crypto credit into a customer VA/wallet)."},{"type":"object","properties":{"id":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$"},"customerName":{"description":"Display name of the customer that owns the transaction: business legal name or individual full name. Same value on the transactions and payouts reads for the same row. Omitted when the customer's identity record hasn't resolved a name yet; per the public omit-don't-null convention, absence is never surfaced as `null`.","type":"string"},"clientReferenceId":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces."},"status":{"type":"string","enum":["pending","processing","completed","failed","cancelled"]},"stage":{"description":"Progress signal for a non-terminal transaction, informational only — it does not replace `requiresUserSignature`, `hasRfi`, or `failureCode` for deciding whether your integration needs to act. `awaiting_signature`: waiting on the required transaction signature (see `requiresUserSignature`). `awaiting_customer_action`: further input is needed before the transaction can go on. Read `hasRfi` to learn where the ask is: `true` means a request for information holds the answer — `rfiId` names it, and `GET /v2/rfis/{id}` carries what to send; `false` means the matching event carries the detail (e.g. `transaction.awaiting_sender_information`); with no such event, the recipient details cannot be sent as given, so contact support to correct them, or cancel the payout. `under_review`: compliance, document, or verification review of something already submitted is in progress — usually no action needed; check `hasRfi` if unsure. `settling`: funds movement or settlement is in progress, no customer action required — covers long-lived fiat rails like SWIFT that legitimately take days as well as any other non-blocked in-flight state. Omitted once `status` reaches a terminal value (`completed` / `failed` / `cancelled`). The set of values may grow over time — treat unrecognized values the same as `processing`.","type":"string","enum":["awaiting_signature","awaiting_customer_action","under_review","settling"]},"source":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"destination":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"fees":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["fixed"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"owner":{"type":"string","enum":["conduit","you"],"description":"Who this charge belongs to. `conduit` is Conduit's own fee. `you` is the margin you declared on this transaction, which Conduit collects from your customer and accrues to you; it is your revenue, not a Conduit charge."}},"required":["type","assetAmount","owner"]}},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"completedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"failureCode":{"type":"string","enum":["user_signature_timeout","user_signature_expired","user_signature_declined","user_signature_rejected_by_provider","crypto_wallet_misconfigured","compliance_hold","compliance_review_rejected","compliance_rejected","returned_by_sender","rail_policy_rejected","insufficient_funds","insufficient_funds_at_settle","rail_unavailable","sender_info_timeout","travel_rule_rejected","provider_rejected","chain_broadcast_failed","roster_changed","insufficient_onchain_balance","source_account_unavailable","capability_suspended"]},"failureMessage":{"description":"Conduit's own wording for `failureCode`: the public error catalog text for the code, or the generic failure text when there is no code. The same text as `failureMessage` on the `transaction.failed` webhook. It never carries text from a bank, a chain or a sandbox simulator `reason`.","type":"string"},"cancelledAt":{"description":"ISO-8601 timestamp when the transaction was cancelled. Present only on `status: cancelled`.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"cancellationReason":{"description":"Machine-readable cancellation reason. `client_cancelled` when the client called `POST /v2/payouts/:id/cancel`; `conduit_cancelled` when Conduit cancelled the payout; `expired` is reserved. The set of values can grow: treat an unknown value as Conduit ending the transaction. Omitted on non-cancelled rows. Orders carry only `client_cancelled` and `expired`.","type":"string","enum":["expired","client_cancelled","conduit_cancelled"]},"linkedOrderId":{"type":"string","pattern":"^ord_[0-9A-Za-z]{22}$"},"purpose":{"description":"The business purpose declared at payout creation. Drives compliance gating: intercompany requires a whitelisted recipient of the customer or its group; personal_transfer_of_funds requires the customer's own whitelisted account; prefunding requires a customer's issued account; other values require supporting documentation.","type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"]},"purposeDescription":{"description":"The customer's own words for the payment. Omitted when none was sent, and on the transaction list: read the single transaction to get it.","type":"string"},"hasRfi":{"type":"boolean","description":"True when at least one published (non-draft, non-cancelled) RFI targets this transaction. Always present; derived at read time, no stored column."},"rfiId":{"description":"The most recently published such RFI — usually the one `stage` refers to, but a later unrelated RFI on the same transaction takes this slot instead. Omitted (never `null`) when `hasRfi` is false.","type":"string","pattern":"^rfi_[0-9A-Za-z]{22}$"},"remittance":{"type":"object","properties":{"reference":{"type":"string"},"description":{"type":"string"}},"description":"The free-text reference of the payment. On a payout, the reference the payer supplied, fiat or crypto. On a transfer between two of the customer's own wallets the same value reads on both halves: the withdrawal that sent it and the deposit that credits it. On a deposit from a bank, `reference` is the text the sender wrote, as the bank passed it on: on ACH, the addenda (the payment-related information); on a wire, the remittance or originator-to-beneficiary information; on RTP, the remittance data; on SEPA, SEPA Instant and Faster Payments, the payment reference. Some banks do not pass the text on. Conduit removes control characters, keeps at most 512 characters, and drops a placeholder such as NOTPROVIDED and an echo of a Conduit ID. Omitted when there is no text. A transfer from another of your own accounts shows the payout's own reference, not the bank's text."},"swiftUetr":{"description":"The UETR of the fiat leg — the ISO 20022 unique end-to-end transaction reference. Present whenever the payment carried one, including on a deposit whose `source` is still `external_unknown` because the sender has not resolved. The side that carries wire references repeats it — `destination.swiftUetr` on a payout, `source.swiftUetr` on a deposit — but not every side does, which is why it reads here as well. A Fedwire message carries a UETR too, so its presence does not mean the payment travelled on SWIFT. Omitted (never `null`) when the rail supplied none.","type":"string"},"type":{"type":"string","enum":["deposit_return"]},"returnOf":{"description":"The transfer this sends back. Its `returned` total includes this amount once this row is dispatched, whether or not it has settled yet. Omitted when the original transfer is no longer resolvable, and when the funds are a coin that Conduit does not support, which never became a transfer.","type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"}},"required":["id","customerId","status","source","destination","fees","createdAt","hasRfi","type"],"description":"Funds sent back to the address they came from: from a funding address, or a coin that Conduit does not support sent back from a wallet."},{"type":"object","properties":{"id":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$"},"customerName":{"description":"Display name of the customer that owns the transaction: business legal name or individual full name. Same value on the transactions and payouts reads for the same row. Omitted when the customer's identity record hasn't resolved a name yet; per the public omit-don't-null convention, absence is never surfaced as `null`.","type":"string"},"clientReferenceId":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces."},"status":{"type":"string","enum":["pending","processing","completed","failed","cancelled"]},"stage":{"description":"Progress signal for a non-terminal transaction, informational only — it does not replace `requiresUserSignature`, `hasRfi`, or `failureCode` for deciding whether your integration needs to act. `awaiting_signature`: waiting on the required transaction signature (see `requiresUserSignature`). `awaiting_customer_action`: further input is needed before the transaction can go on. Read `hasRfi` to learn where the ask is: `true` means a request for information holds the answer — `rfiId` names it, and `GET /v2/rfis/{id}` carries what to send; `false` means the matching event carries the detail (e.g. `transaction.awaiting_sender_information`); with no such event, the recipient details cannot be sent as given, so contact support to correct them, or cancel the payout. `under_review`: compliance, document, or verification review of something already submitted is in progress — usually no action needed; check `hasRfi` if unsure. `settling`: funds movement or settlement is in progress, no customer action required — covers long-lived fiat rails like SWIFT that legitimately take days as well as any other non-blocked in-flight state. Omitted once `status` reaches a terminal value (`completed` / `failed` / `cancelled`). The set of values may grow over time — treat unrecognized values the same as `processing`.","type":"string","enum":["awaiting_signature","awaiting_customer_action","under_review","settling"]},"source":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"destination":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"fees":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["fixed"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"owner":{"type":"string","enum":["conduit","you"],"description":"Who this charge belongs to. `conduit` is Conduit's own fee. `you` is the margin you declared on this transaction, which Conduit collects from your customer and accrues to you; it is your revenue, not a Conduit charge."}},"required":["type","assetAmount","owner"]}},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"completedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"failureCode":{"type":"string","enum":["user_signature_timeout","user_signature_expired","user_signature_declined","user_signature_rejected_by_provider","crypto_wallet_misconfigured","compliance_hold","compliance_review_rejected","compliance_rejected","returned_by_sender","rail_policy_rejected","insufficient_funds","insufficient_funds_at_settle","rail_unavailable","sender_info_timeout","travel_rule_rejected","provider_rejected","chain_broadcast_failed","roster_changed","insufficient_onchain_balance","source_account_unavailable","capability_suspended"]},"failureMessage":{"description":"Conduit's own wording for `failureCode`: the public error catalog text for the code, or the generic failure text when there is no code. The same text as `failureMessage` on the `transaction.failed` webhook. It never carries text from a bank, a chain or a sandbox simulator `reason`.","type":"string"},"cancelledAt":{"description":"ISO-8601 timestamp when the transaction was cancelled. Present only on `status: cancelled`.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"cancellationReason":{"description":"Machine-readable cancellation reason. `client_cancelled` when the client called `POST /v2/payouts/:id/cancel`; `conduit_cancelled` when Conduit cancelled the payout; `expired` is reserved. The set of values can grow: treat an unknown value as Conduit ending the transaction. Omitted on non-cancelled rows. Orders carry only `client_cancelled` and `expired`.","type":"string","enum":["expired","client_cancelled","conduit_cancelled"]},"linkedOrderId":{"type":"string","pattern":"^ord_[0-9A-Za-z]{22}$"},"purpose":{"description":"The business purpose declared at payout creation. Drives compliance gating: intercompany requires a whitelisted recipient of the customer or its group; personal_transfer_of_funds requires the customer's own whitelisted account; prefunding requires a customer's issued account; other values require supporting documentation.","type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"]},"purposeDescription":{"description":"The customer's own words for the payment. Omitted when none was sent, and on the transaction list: read the single transaction to get it.","type":"string"},"hasRfi":{"type":"boolean","description":"True when at least one published (non-draft, non-cancelled) RFI targets this transaction. Always present; derived at read time, no stored column."},"rfiId":{"description":"The most recently published such RFI — usually the one `stage` refers to, but a later unrelated RFI on the same transaction takes this slot instead. Omitted (never `null`) when `hasRfi` is false.","type":"string","pattern":"^rfi_[0-9A-Za-z]{22}$"},"remittance":{"type":"object","properties":{"reference":{"type":"string"},"description":{"type":"string"}},"description":"The free-text reference of the payment. On a payout, the reference the payer supplied, fiat or crypto. On a transfer between two of the customer's own wallets the same value reads on both halves: the withdrawal that sent it and the deposit that credits it. On a deposit from a bank, `reference` is the text the sender wrote, as the bank passed it on: on ACH, the addenda (the payment-related information); on a wire, the remittance or originator-to-beneficiary information; on RTP, the remittance data; on SEPA, SEPA Instant and Faster Payments, the payment reference. Some banks do not pass the text on. Conduit removes control characters, keeps at most 512 characters, and drops a placeholder such as NOTPROVIDED and an echo of a Conduit ID. Omitted when there is no text. A transfer from another of your own accounts shows the payout's own reference, not the bank's text."},"swiftUetr":{"description":"The UETR of the fiat leg — the ISO 20022 unique end-to-end transaction reference. Present whenever the payment carried one, including on a deposit whose `source` is still `external_unknown` because the sender has not resolved. The side that carries wire references repeats it — `destination.swiftUetr` on a payout, `source.swiftUetr` on a deposit — but not every side does, which is why it reads here as well. A Fedwire message carries a UETR too, so its presence does not mean the payment travelled on SWIFT. Omitted (never `null`) when the rail supplied none.","type":"string"},"returnCode":{"description":"The return code the bank sent when it returned this transfer, for example the Nacha code `R01` on an ACH return. Present only with `failureCode: returned_by_sender`, and only when the bank sent a Nacha return code. `returnReason` says why the bank returned the transfer. The bank's free-text return reason is never returned.","type":"string"},"returnReason":{"description":"Why the bank returned or refused this transfer, as a Conduit code. Present with `failureCode: returned_by_sender` when Conduit recorded the bank's return, with or without `returnCode`. Present with `failureCode: provider_rejected` when the bank refused the payout before it settled, no funds moved, and the refusal carried a bank code that Conduit maps or the payee check refused the recipient before sending. Absent on a return recorded before this field existed. `account_closed`: The account is closed. Get new account details. `incorrect_account_number`: The account details are incorrect. Check them and send again. `beneficiary_name_mismatch`: The recipient's name does not match the account. Check the name and send again. `payment_not_permitted`: The bank or account does not accept this payment. `invalid_recipient_details`: The recipient's name, address or bank fields are missing, too long or invalid. Correct them and submit again. `other`: The bank gave no specific reason. Contact support for details. The set of values can grow. Treat a value you do not recognise as `other`. The bank's free-text reason is never sent.","type":"string","enum":["account_closed","incorrect_account_number","beneficiary_name_mismatch","payment_not_permitted","invalid_recipient_details","other"]},"returnedAt":{"description":"ISO-8601 timestamp when Conduit recorded the bank's return of this transfer. Present with `failureCode: returned_by_sender` when the return is recorded, with or without `returnCode`.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"type":{"type":"string","enum":["withdrawal"]},"markup":{"type":"object","properties":{"bps":{"description":"The percentage margin you declared on this payout, in basis points. Absent when you declared only a flat amount.","type":"number"},"flatAmount":{"description":"The flat margin you declared on this payout, in the payout's asset. Absent when you declared only a percentage. Also absent when the flat amount you declared on an order's auto-payout leg was smaller than one minor unit of the payout's asset: that leg is declared before its asset is known, so the term rounds away there while the percentage stays.","type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"assetAmount":{"description":"What that margin charges your customer for you: the percentage part plus the flat part. It is present exactly when `fees[]` carries the entry with `owner: \"you\"`, and it is that same figure. So read `fees[]` to see whether this payout still holds the margin for you, and `GET /v2/markup/statement-lines` to see what it accrued to you. A returned or cancelled payout does not hold it.","type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"description":"The margin you declared on this payout, echoed back. Present when you declared one that came to at least one minor unit of the payout's asset. `bps` and `flatAmount` read back for the life of the payout, whatever becomes of it, so you can always confirm what you sent. What each payout accrued to you is answered by `GET /v2/markup/statement-lines`, where a reversal reads as a negative amount."},"requiresUserSignature":{"type":"boolean"},"cancellable":{"type":"boolean","description":"Whether this payout is eligible for `POST /v2/payouts/{id}/cancel`. Always present, derived at read time. It is `false` at a terminal status, and `false` once the payout is dispatched for settlement: the bank has answered its submit, or its on-chain send started. Eligibility is not a guarantee that the next cancel succeeds: while the payout starts up, a cancel can answer 409 `PAYOUT_CANCEL_IN_PROGRESS` although `cancellable` is `true` — retry shortly — and a payout that moves on between the read and the cancel answers 409 `PAYOUT_NOT_CANCELLABLE`. That includes a fiat payout whose submit is still waiting for the bank's answer: its cancel already answers 409 while `cancellable` still reads `true`."},"queuePosition":{"description":"Position in the per-(wallet, chain) signing queue. Only waiting payouts (position ≥ 1) expose this field; the active/head payout omits it. Absent when the payout is not on the user-signature path or has reached a terminal status.","type":"integer","minimum":1,"maximum":9007199254740991},"retryOf":{"description":"The payout this one replaces. Present when an operator re-sent a payout the receiving bank returned; the original transfer reads `failed` with failure code `returned_by_sender`.","type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"documents":{"description":"The supporting documents attached at creation, as sent on `documents`. Omitted when none were attached.","type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["id","customerId","status","source","destination","fees","createdAt","hasRfi","type","requiresUserSignature","cancellable"],"description":"Client-facing view of an outbound withdrawal (debit out of a customer VA/wallet)."},{"type":"object","properties":{"id":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$"},"customerName":{"description":"Display name of the customer that owns the transaction: business legal name or individual full name. Same value on the transactions and payouts reads for the same row. Omitted when the customer's identity record hasn't resolved a name yet; per the public omit-don't-null convention, absence is never surfaced as `null`.","type":"string"},"clientReferenceId":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces."},"status":{"type":"string","enum":["pending","processing","completed","failed","cancelled"]},"stage":{"description":"Progress signal for a non-terminal transaction, informational only — it does not replace `requiresUserSignature`, `hasRfi`, or `failureCode` for deciding whether your integration needs to act. `awaiting_signature`: waiting on the required transaction signature (see `requiresUserSignature`). `awaiting_customer_action`: further input is needed before the transaction can go on. Read `hasRfi` to learn where the ask is: `true` means a request for information holds the answer — `rfiId` names it, and `GET /v2/rfis/{id}` carries what to send; `false` means the matching event carries the detail (e.g. `transaction.awaiting_sender_information`); with no such event, the recipient details cannot be sent as given, so contact support to correct them, or cancel the payout. `under_review`: compliance, document, or verification review of something already submitted is in progress — usually no action needed; check `hasRfi` if unsure. `settling`: funds movement or settlement is in progress, no customer action required — covers long-lived fiat rails like SWIFT that legitimately take days as well as any other non-blocked in-flight state. Omitted once `status` reaches a terminal value (`completed` / `failed` / `cancelled`). The set of values may grow over time — treat unrecognized values the same as `processing`.","type":"string","enum":["awaiting_signature","awaiting_customer_action","under_review","settling"]},"source":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"destination":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"fees":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["fixed"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"owner":{"type":"string","enum":["conduit","you"],"description":"Who this charge belongs to. `conduit` is Conduit's own fee. `you` is the margin you declared on this transaction, which Conduit collects from your customer and accrues to you; it is your revenue, not a Conduit charge."}},"required":["type","assetAmount","owner"]}},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"completedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"failureCode":{"type":"string","enum":["user_signature_timeout","user_signature_expired","user_signature_declined","user_signature_rejected_by_provider","crypto_wallet_misconfigured","compliance_hold","compliance_review_rejected","compliance_rejected","returned_by_sender","rail_policy_rejected","insufficient_funds","insufficient_funds_at_settle","rail_unavailable","sender_info_timeout","travel_rule_rejected","provider_rejected","chain_broadcast_failed","roster_changed","insufficient_onchain_balance","source_account_unavailable","capability_suspended"]},"failureMessage":{"description":"Conduit's own wording for `failureCode`: the public error catalog text for the code, or the generic failure text when there is no code. The same text as `failureMessage` on the `transaction.failed` webhook. It never carries text from a bank, a chain or a sandbox simulator `reason`.","type":"string"},"cancelledAt":{"description":"ISO-8601 timestamp when the transaction was cancelled. Present only on `status: cancelled`.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"cancellationReason":{"description":"Machine-readable cancellation reason. `client_cancelled` when the client called `POST /v2/payouts/:id/cancel`; `conduit_cancelled` when Conduit cancelled the payout; `expired` is reserved. The set of values can grow: treat an unknown value as Conduit ending the transaction. Omitted on non-cancelled rows. Orders carry only `client_cancelled` and `expired`.","type":"string","enum":["expired","client_cancelled","conduit_cancelled"]},"linkedOrderId":{"type":"string","pattern":"^ord_[0-9A-Za-z]{22}$"},"purpose":{"description":"The business purpose declared at payout creation. Drives compliance gating: intercompany requires a whitelisted recipient of the customer or its group; personal_transfer_of_funds requires the customer's own whitelisted account; prefunding requires a customer's issued account; other values require supporting documentation.","type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"]},"purposeDescription":{"description":"The customer's own words for the payment. Omitted when none was sent, and on the transaction list: read the single transaction to get it.","type":"string"},"hasRfi":{"type":"boolean","description":"True when at least one published (non-draft, non-cancelled) RFI targets this transaction. Always present; derived at read time, no stored column."},"rfiId":{"description":"The most recently published such RFI — usually the one `stage` refers to, but a later unrelated RFI on the same transaction takes this slot instead. Omitted (never `null`) when `hasRfi` is false.","type":"string","pattern":"^rfi_[0-9A-Za-z]{22}$"},"remittance":{"type":"object","properties":{"reference":{"type":"string"},"description":{"type":"string"}},"description":"The free-text reference of the payment. On a payout, the reference the payer supplied, fiat or crypto. On a transfer between two of the customer's own wallets the same value reads on both halves: the withdrawal that sent it and the deposit that credits it. On a deposit from a bank, `reference` is the text the sender wrote, as the bank passed it on: on ACH, the addenda (the payment-related information); on a wire, the remittance or originator-to-beneficiary information; on RTP, the remittance data; on SEPA, SEPA Instant and Faster Payments, the payment reference. Some banks do not pass the text on. Conduit removes control characters, keeps at most 512 characters, and drops a placeholder such as NOTPROVIDED and an echo of a Conduit ID. Omitted when there is no text. A transfer from another of your own accounts shows the payout's own reference, not the bank's text."},"swiftUetr":{"description":"The UETR of the fiat leg — the ISO 20022 unique end-to-end transaction reference. Present whenever the payment carried one, including on a deposit whose `source` is still `external_unknown` because the sender has not resolved. The side that carries wire references repeats it — `destination.swiftUetr` on a payout, `source.swiftUetr` on a deposit — but not every side does, which is why it reads here as well. A Fedwire message carries a UETR too, so its presence does not mean the payment travelled on SWIFT. Omitted (never `null`) when the rail supplied none.","type":"string"},"type":{"type":"string","enum":["onramp"]}},"required":["id","customerId","status","source","destination","fees","createdAt","hasRfi","type"],"description":"Client-facing view of a fiat-to-crypto conversion."},{"type":"object","properties":{"id":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$"},"customerName":{"description":"Display name of the customer that owns the transaction: business legal name or individual full name. Same value on the transactions and payouts reads for the same row. Omitted when the customer's identity record hasn't resolved a name yet; per the public omit-don't-null convention, absence is never surfaced as `null`.","type":"string"},"clientReferenceId":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces."},"status":{"type":"string","enum":["pending","processing","completed","failed","cancelled"]},"stage":{"description":"Progress signal for a non-terminal transaction, informational only — it does not replace `requiresUserSignature`, `hasRfi`, or `failureCode` for deciding whether your integration needs to act. `awaiting_signature`: waiting on the required transaction signature (see `requiresUserSignature`). `awaiting_customer_action`: further input is needed before the transaction can go on. Read `hasRfi` to learn where the ask is: `true` means a request for information holds the answer — `rfiId` names it, and `GET /v2/rfis/{id}` carries what to send; `false` means the matching event carries the detail (e.g. `transaction.awaiting_sender_information`); with no such event, the recipient details cannot be sent as given, so contact support to correct them, or cancel the payout. `under_review`: compliance, document, or verification review of something already submitted is in progress — usually no action needed; check `hasRfi` if unsure. `settling`: funds movement or settlement is in progress, no customer action required — covers long-lived fiat rails like SWIFT that legitimately take days as well as any other non-blocked in-flight state. Omitted once `status` reaches a terminal value (`completed` / `failed` / `cancelled`). The set of values may grow over time — treat unrecognized values the same as `processing`.","type":"string","enum":["awaiting_signature","awaiting_customer_action","under_review","settling"]},"source":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"destination":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"fees":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["fixed"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"owner":{"type":"string","enum":["conduit","you"],"description":"Who this charge belongs to. `conduit` is Conduit's own fee. `you` is the margin you declared on this transaction, which Conduit collects from your customer and accrues to you; it is your revenue, not a Conduit charge."}},"required":["type","assetAmount","owner"]}},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"completedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"failureCode":{"type":"string","enum":["user_signature_timeout","user_signature_expired","user_signature_declined","user_signature_rejected_by_provider","crypto_wallet_misconfigured","compliance_hold","compliance_review_rejected","compliance_rejected","returned_by_sender","rail_policy_rejected","insufficient_funds","insufficient_funds_at_settle","rail_unavailable","sender_info_timeout","travel_rule_rejected","provider_rejected","chain_broadcast_failed","roster_changed","insufficient_onchain_balance","source_account_unavailable","capability_suspended"]},"failureMessage":{"description":"Conduit's own wording for `failureCode`: the public error catalog text for the code, or the generic failure text when there is no code. The same text as `failureMessage` on the `transaction.failed` webhook. It never carries text from a bank, a chain or a sandbox simulator `reason`.","type":"string"},"cancelledAt":{"description":"ISO-8601 timestamp when the transaction was cancelled. Present only on `status: cancelled`.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"cancellationReason":{"description":"Machine-readable cancellation reason. `client_cancelled` when the client called `POST /v2/payouts/:id/cancel`; `conduit_cancelled` when Conduit cancelled the payout; `expired` is reserved. The set of values can grow: treat an unknown value as Conduit ending the transaction. Omitted on non-cancelled rows. Orders carry only `client_cancelled` and `expired`.","type":"string","enum":["expired","client_cancelled","conduit_cancelled"]},"linkedOrderId":{"type":"string","pattern":"^ord_[0-9A-Za-z]{22}$"},"purpose":{"description":"The business purpose declared at payout creation. Drives compliance gating: intercompany requires a whitelisted recipient of the customer or its group; personal_transfer_of_funds requires the customer's own whitelisted account; prefunding requires a customer's issued account; other values require supporting documentation.","type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"]},"purposeDescription":{"description":"The customer's own words for the payment. Omitted when none was sent, and on the transaction list: read the single transaction to get it.","type":"string"},"hasRfi":{"type":"boolean","description":"True when at least one published (non-draft, non-cancelled) RFI targets this transaction. Always present; derived at read time, no stored column."},"rfiId":{"description":"The most recently published such RFI — usually the one `stage` refers to, but a later unrelated RFI on the same transaction takes this slot instead. Omitted (never `null`) when `hasRfi` is false.","type":"string","pattern":"^rfi_[0-9A-Za-z]{22}$"},"remittance":{"type":"object","properties":{"reference":{"type":"string"},"description":{"type":"string"}},"description":"The free-text reference of the payment. On a payout, the reference the payer supplied, fiat or crypto. On a transfer between two of the customer's own wallets the same value reads on both halves: the withdrawal that sent it and the deposit that credits it. On a deposit from a bank, `reference` is the text the sender wrote, as the bank passed it on: on ACH, the addenda (the payment-related information); on a wire, the remittance or originator-to-beneficiary information; on RTP, the remittance data; on SEPA, SEPA Instant and Faster Payments, the payment reference. Some banks do not pass the text on. Conduit removes control characters, keeps at most 512 characters, and drops a placeholder such as NOTPROVIDED and an echo of a Conduit ID. Omitted when there is no text. A transfer from another of your own accounts shows the payout's own reference, not the bank's text."},"swiftUetr":{"description":"The UETR of the fiat leg — the ISO 20022 unique end-to-end transaction reference. Present whenever the payment carried one, including on a deposit whose `source` is still `external_unknown` because the sender has not resolved. The side that carries wire references repeats it — `destination.swiftUetr` on a payout, `source.swiftUetr` on a deposit — but not every side does, which is why it reads here as well. A Fedwire message carries a UETR too, so its presence does not mean the payment travelled on SWIFT. Omitted (never `null`) when the rail supplied none.","type":"string"},"type":{"type":"string","enum":["offramp"]}},"required":["id","customerId","status","source","destination","fees","createdAt","hasRfi","type"],"description":"Client-facing view of a crypto-to-fiat conversion."},{"type":"object","properties":{"id":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$"},"customerName":{"description":"Display name of the customer that owns the transaction: business legal name or individual full name. Same value on the transactions and payouts reads for the same row. Omitted when the customer's identity record hasn't resolved a name yet; per the public omit-don't-null convention, absence is never surfaced as `null`.","type":"string"},"clientReferenceId":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces."},"status":{"type":"string","enum":["pending","processing","completed","failed","cancelled"]},"stage":{"description":"Progress signal for a non-terminal transaction, informational only — it does not replace `requiresUserSignature`, `hasRfi`, or `failureCode` for deciding whether your integration needs to act. `awaiting_signature`: waiting on the required transaction signature (see `requiresUserSignature`). `awaiting_customer_action`: further input is needed before the transaction can go on. Read `hasRfi` to learn where the ask is: `true` means a request for information holds the answer — `rfiId` names it, and `GET /v2/rfis/{id}` carries what to send; `false` means the matching event carries the detail (e.g. `transaction.awaiting_sender_information`); with no such event, the recipient details cannot be sent as given, so contact support to correct them, or cancel the payout. `under_review`: compliance, document, or verification review of something already submitted is in progress — usually no action needed; check `hasRfi` if unsure. `settling`: funds movement or settlement is in progress, no customer action required — covers long-lived fiat rails like SWIFT that legitimately take days as well as any other non-blocked in-flight state. Omitted once `status` reaches a terminal value (`completed` / `failed` / `cancelled`). The set of values may grow over time — treat unrecognized values the same as `processing`.","type":"string","enum":["awaiting_signature","awaiting_customer_action","under_review","settling"]},"source":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"destination":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"fees":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["fixed"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"owner":{"type":"string","enum":["conduit","you"],"description":"Who this charge belongs to. `conduit` is Conduit's own fee. `you` is the margin you declared on this transaction, which Conduit collects from your customer and accrues to you; it is your revenue, not a Conduit charge."}},"required":["type","assetAmount","owner"]}},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"completedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"failureCode":{"type":"string","enum":["user_signature_timeout","user_signature_expired","user_signature_declined","user_signature_rejected_by_provider","crypto_wallet_misconfigured","compliance_hold","compliance_review_rejected","compliance_rejected","returned_by_sender","rail_policy_rejected","insufficient_funds","insufficient_funds_at_settle","rail_unavailable","sender_info_timeout","travel_rule_rejected","provider_rejected","chain_broadcast_failed","roster_changed","insufficient_onchain_balance","source_account_unavailable","capability_suspended"]},"failureMessage":{"description":"Conduit's own wording for `failureCode`: the public error catalog text for the code, or the generic failure text when there is no code. The same text as `failureMessage` on the `transaction.failed` webhook. It never carries text from a bank, a chain or a sandbox simulator `reason`.","type":"string"},"cancelledAt":{"description":"ISO-8601 timestamp when the transaction was cancelled. Present only on `status: cancelled`.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"cancellationReason":{"description":"Machine-readable cancellation reason. `client_cancelled` when the client called `POST /v2/payouts/:id/cancel`; `conduit_cancelled` when Conduit cancelled the payout; `expired` is reserved. The set of values can grow: treat an unknown value as Conduit ending the transaction. Omitted on non-cancelled rows. Orders carry only `client_cancelled` and `expired`.","type":"string","enum":["expired","client_cancelled","conduit_cancelled"]},"linkedOrderId":{"type":"string","pattern":"^ord_[0-9A-Za-z]{22}$"},"purpose":{"description":"The business purpose declared at payout creation. Drives compliance gating: intercompany requires a whitelisted recipient of the customer or its group; personal_transfer_of_funds requires the customer's own whitelisted account; prefunding requires a customer's issued account; other values require supporting documentation.","type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"]},"purposeDescription":{"description":"The customer's own words for the payment. Omitted when none was sent, and on the transaction list: read the single transaction to get it.","type":"string"},"hasRfi":{"type":"boolean","description":"True when at least one published (non-draft, non-cancelled) RFI targets this transaction. Always present; derived at read time, no stored column."},"rfiId":{"description":"The most recently published such RFI — usually the one `stage` refers to, but a later unrelated RFI on the same transaction takes this slot instead. Omitted (never `null`) when `hasRfi` is false.","type":"string","pattern":"^rfi_[0-9A-Za-z]{22}$"},"remittance":{"type":"object","properties":{"reference":{"type":"string"},"description":{"type":"string"}},"description":"The free-text reference of the payment. On a payout, the reference the payer supplied, fiat or crypto. On a transfer between two of the customer's own wallets the same value reads on both halves: the withdrawal that sent it and the deposit that credits it. On a deposit from a bank, `reference` is the text the sender wrote, as the bank passed it on: on ACH, the addenda (the payment-related information); on a wire, the remittance or originator-to-beneficiary information; on RTP, the remittance data; on SEPA, SEPA Instant and Faster Payments, the payment reference. Some banks do not pass the text on. Conduit removes control characters, keeps at most 512 characters, and drops a placeholder such as NOTPROVIDED and an echo of a Conduit ID. Omitted when there is no text. A transfer from another of your own accounts shows the payout's own reference, not the bank's text."},"swiftUetr":{"description":"The UETR of the fiat leg — the ISO 20022 unique end-to-end transaction reference. Present whenever the payment carried one, including on a deposit whose `source` is still `external_unknown` because the sender has not resolved. The side that carries wire references repeats it — `destination.swiftUetr` on a payout, `source.swiftUetr` on a deposit — but not every side does, which is why it reads here as well. A Fedwire message carries a UETR too, so its presence does not mean the payment travelled on SWIFT. Omitted (never `null`) when the rail supplied none.","type":"string"},"type":{"type":"string","enum":["conversion"]}},"required":["id","customerId","status","source","destination","fees","createdAt","hasRfi","type"],"description":"Client-facing view of a crypto-to-crypto conversion (swap or bridge)."},{"type":"object","properties":{"id":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$"},"customerName":{"description":"Display name of the customer that owns the transaction: business legal name or individual full name. Same value on the transactions and payouts reads for the same row. Omitted when the customer's identity record hasn't resolved a name yet; per the public omit-don't-null convention, absence is never surfaced as `null`.","type":"string"},"clientReferenceId":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces."},"status":{"type":"string","enum":["pending","processing","completed","failed","cancelled"]},"stage":{"description":"Progress signal for a non-terminal transaction, informational only — it does not replace `requiresUserSignature`, `hasRfi`, or `failureCode` for deciding whether your integration needs to act. `awaiting_signature`: waiting on the required transaction signature (see `requiresUserSignature`). `awaiting_customer_action`: further input is needed before the transaction can go on. Read `hasRfi` to learn where the ask is: `true` means a request for information holds the answer — `rfiId` names it, and `GET /v2/rfis/{id}` carries what to send; `false` means the matching event carries the detail (e.g. `transaction.awaiting_sender_information`); with no such event, the recipient details cannot be sent as given, so contact support to correct them, or cancel the payout. `under_review`: compliance, document, or verification review of something already submitted is in progress — usually no action needed; check `hasRfi` if unsure. `settling`: funds movement or settlement is in progress, no customer action required — covers long-lived fiat rails like SWIFT that legitimately take days as well as any other non-blocked in-flight state. Omitted once `status` reaches a terminal value (`completed` / `failed` / `cancelled`). The set of values may grow over time — treat unrecognized values the same as `processing`.","type":"string","enum":["awaiting_signature","awaiting_customer_action","under_review","settling"]},"source":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"destination":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"fees":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["fixed"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"owner":{"type":"string","enum":["conduit","you"],"description":"Who this charge belongs to. `conduit` is Conduit's own fee. `you` is the margin you declared on this transaction, which Conduit collects from your customer and accrues to you; it is your revenue, not a Conduit charge."}},"required":["type","assetAmount","owner"]}},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"completedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"failureCode":{"type":"string","enum":["user_signature_timeout","user_signature_expired","user_signature_declined","user_signature_rejected_by_provider","crypto_wallet_misconfigured","compliance_hold","compliance_review_rejected","compliance_rejected","returned_by_sender","rail_policy_rejected","insufficient_funds","insufficient_funds_at_settle","rail_unavailable","sender_info_timeout","travel_rule_rejected","provider_rejected","chain_broadcast_failed","roster_changed","insufficient_onchain_balance","source_account_unavailable","capability_suspended"]},"failureMessage":{"description":"Conduit's own wording for `failureCode`: the public error catalog text for the code, or the generic failure text when there is no code. The same text as `failureMessage` on the `transaction.failed` webhook. It never carries text from a bank, a chain or a sandbox simulator `reason`.","type":"string"},"cancelledAt":{"description":"ISO-8601 timestamp when the transaction was cancelled. Present only on `status: cancelled`.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"cancellationReason":{"description":"Machine-readable cancellation reason. `client_cancelled` when the client called `POST /v2/payouts/:id/cancel`; `conduit_cancelled` when Conduit cancelled the payout; `expired` is reserved. The set of values can grow: treat an unknown value as Conduit ending the transaction. Omitted on non-cancelled rows. Orders carry only `client_cancelled` and `expired`.","type":"string","enum":["expired","client_cancelled","conduit_cancelled"]},"linkedOrderId":{"type":"string","pattern":"^ord_[0-9A-Za-z]{22}$"},"purpose":{"description":"The business purpose declared at payout creation. Drives compliance gating: intercompany requires a whitelisted recipient of the customer or its group; personal_transfer_of_funds requires the customer's own whitelisted account; prefunding requires a customer's issued account; other values require supporting documentation.","type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"]},"purposeDescription":{"description":"The customer's own words for the payment. Omitted when none was sent, and on the transaction list: read the single transaction to get it.","type":"string"},"hasRfi":{"type":"boolean","description":"True when at least one published (non-draft, non-cancelled) RFI targets this transaction. Always present; derived at read time, no stored column."},"rfiId":{"description":"The most recently published such RFI — usually the one `stage` refers to, but a later unrelated RFI on the same transaction takes this slot instead. Omitted (never `null`) when `hasRfi` is false.","type":"string","pattern":"^rfi_[0-9A-Za-z]{22}$"},"remittance":{"type":"object","properties":{"reference":{"type":"string"},"description":{"type":"string"}},"description":"The free-text reference of the payment. On a payout, the reference the payer supplied, fiat or crypto. On a transfer between two of the customer's own wallets the same value reads on both halves: the withdrawal that sent it and the deposit that credits it. On a deposit from a bank, `reference` is the text the sender wrote, as the bank passed it on: on ACH, the addenda (the payment-related information); on a wire, the remittance or originator-to-beneficiary information; on RTP, the remittance data; on SEPA, SEPA Instant and Faster Payments, the payment reference. Some banks do not pass the text on. Conduit removes control characters, keeps at most 512 characters, and drops a placeholder such as NOTPROVIDED and an echo of a Conduit ID. Omitted when there is no text. A transfer from another of your own accounts shows the payout's own reference, not the bank's text."},"swiftUetr":{"description":"The UETR of the fiat leg — the ISO 20022 unique end-to-end transaction reference. Present whenever the payment carried one, including on a deposit whose `source` is still `external_unknown` because the sender has not resolved. The side that carries wire references repeats it — `destination.swiftUetr` on a payout, `source.swiftUetr` on a deposit — but not every side does, which is why it reads here as well. A Fedwire message carries a UETR too, so its presence does not mean the payment travelled on SWIFT. Omitted (never `null`) when the rail supplied none.","type":"string"},"type":{"type":"string","enum":["fiat_conversion"]}},"required":["id","customerId","status","source","destination","fees","createdAt","hasRfi","type"],"description":"Client-facing view of a fiat-to-fiat conversion."}],"description":"Unified client-facing transaction view across deposit / deposit return / withdrawal / onramp / offramp / conversion / fiat conversion. Discriminated by `type`."}},"meta":{"type":"object","properties":{"mode":{"type":"string","description":"Pagination mode","example":"cursor","enum":["cursor"]},"nextCursor":{"type":"string","description":"Cursor for the page after this one. Use it with `direction=forward`; it is `null` when no more rows follow. A backward page always carries one, so do not loop on it while `direction=backward`.","example":"eyJpZCI6ImN1c18yeFBxTjhSIn0","nullable":true},"previousCursor":{"type":"string","description":"Cursor for the page before this one. Use it with `direction=backward`. It is `null` on the first page of a forward walk and when no earlier rows remain.","example":null,"nullable":true},"total":{"type":"number","description":"Total number of records matching the query","example":42}},"required":["mode","nextCursor","previousCursor","total"]}},"required":["data","meta"]},"CryptoPayoutDto":{"type":"object","properties":{"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$"},"clientReferenceId":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces."},"sourceWalletId":{"description":"Wallet to spend from. Omit to use the customer's oldest active wallet on the asset's chain.","type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat. Accepts uppercase or lowercase on input.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"destination":{"oneOf":[{"type":"object","properties":{"recipient":{"type":"object","properties":{"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"legalName":{"type":"string","maxLength":140},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string","maxLength":40},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["chain","address","attestation"],"additionalProperties":false},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"type":{"type":"string","enum":["crypto"]}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$","description":"Another active wallet of the same customer, on the asset's chain."},"remittance":{"description":"Free-text reference and description carried on both halves of the transfer.","type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}}},"required":["type","walletId"],"additionalProperties":false}]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of this payout. Drives documentation requirements and whitelist policy."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on this payout, in basis points of the amount it moves, to two decimal places. A payout has no exchange rate to widen, so this is charged as a fee on top of the amount you asked us to send: the recipient still receives assetAmount in full, and the source virtual account is debited that amount plus Conduit's fee plus your margin. It reads back on the payout's fees[] as an entry owned by you, and it is accrued to you once the payout succeeds, then paid monthly against a statement. Crypto payouts cannot carry a margin. Requires markup to be enabled for your organization.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on this payout as a flat amount per transaction, in the payout's asset and at that asset's precision. Charged the same way as markupBps, on top of the amount the recipient receives. Send it alongside markupBps, on its own, or omit both. Crypto payouts cannot carry a margin.","type":"string"}},"required":["customerId","assetAmount","destination","purpose"],"additionalProperties":false},"FiatPayoutDto":{"type":"object","properties":{"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$"},"clientReferenceId":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces."},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat. Accepts uppercase or lowercase on input.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"destination":{"anyOf":[{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["fedwire"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["fiat"]}},"required":["rail","type"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["rtp"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["fiat"]}},"required":["rail","type"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["fednow"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["fiat"]}},"required":["rail","type"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["ach"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["fiat"]}},"required":["rail","type"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["ach_same_day"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["fiat"]}},"required":["rail","type"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"description":"Bank account number, for a bank in a country without IBAN. Required unless iban is sent.","type":"string","minLength":4,"maxLength":64},"iban":{"description":"IBAN (mod-97 checksum-validated; spacing and case normalized). Required unless accountNumber is sent.","type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it, and the bank name if absent, from `bic`; the request is refused if the BIC is not in the SWIFT bank directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bic","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"description":"Bank account number, for a bank in a country without IBAN. Required unless iban is sent.","type":"string","minLength":4,"maxLength":64},"iban":{"description":"IBAN (mod-97 checksum-validated; spacing and case normalized). Required unless accountNumber is sent.","type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it, and the bank name if absent, from `bic`; the request is refused if the BIC is not in the SWIFT bank directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bic","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["fiat"]}},"required":["rail","type"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"recipient":{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["iban","bic","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["iban","bic","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["fiat"]}},"required":["rail","type"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["faster_payments"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["fiat"]}},"required":["rail","type"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["chaps"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["fiat"]}},"required":["rail","type"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"recipient":{"oneOf":[{"type":"object","properties":{"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string","minLength":1,"maxLength":77}},"required":["type","value"],"additionalProperties":false},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["pixKey","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string","minLength":1,"maxLength":77}},"required":["type","value"],"additionalProperties":false},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["pixKey","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["fiat"]}},"required":["rail","type"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["ted"]},"recipient":{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["fiat"]}},"required":["rail","type"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["nibss"]},"recipient":{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankName","accountNumber","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankName","accountNumber","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["fiat"]}},"required":["rail","type"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["spei"]},"recipient":{"oneOf":[{"type":"object","properties":{"clabe":{"type":"string"},"taxId":{"description":"The recipient's RFC, or the CURP of an individual. Optional.","type":"string"},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["clabe","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"clabe":{"type":"string"},"taxId":{"description":"The recipient's RFC, or the CURP of an individual. Optional.","type":"string"},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["clabe","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["fiat"]}},"required":["rail","type"],"additionalProperties":false}]},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$","description":"Another active virtual account in the same organization, holding the same currency. Any customer of the organization is allowed."},"remittance":{"description":"Free-text reference and description carried on both halves of the transfer.","type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}}},"required":["type","virtualAccountId"],"additionalProperties":false}]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of this payout. Drives documentation requirements and whitelist policy. A chaps payout cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on this payout, in basis points of the amount it moves, to two decimal places. A payout has no exchange rate to widen, so this is charged as a fee on top of the amount you asked us to send: the recipient still receives assetAmount in full, and the source virtual account is debited that amount plus Conduit's fee plus your margin. It reads back on the payout's fees[] as an entry owned by you, and it is accrued to you once the payout succeeds, then paid monthly against a statement. Crypto payouts cannot carry a margin. Requires markup to be enabled for your organization.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on this payout as a flat amount per transaction, in the payout's asset and at that asset's precision. Charged the same way as markupBps, on top of the amount the recipient receives. Send it alongside markupBps, on its own, or omit both. Crypto payouts cannot carry a margin.","type":"string"}},"required":["customerId","virtualAccountId","assetAmount","purpose"],"additionalProperties":false},"PayoutRequirementsResponseDto":{"type":"object","properties":{"rail":{"description":"The rail this answer describes, echoing the rail the query named.","type":"string","enum":["crypto","fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Where the value belongs in the create body, as a dotted path — not a display label. `destination.recipient.accountNumber` means `{ destination: { recipient: { accountNumber } } }`.","example":"destination.recipient.accountNumber"},"type":{"type":"string","enum":["string","number","boolean","date","email"],"description":"Kind of value to send. `date` and `email` are sent as JSON strings."},"required":{"type":"boolean","description":"Whether the field must always be sent. A field that is required only in some cases carries `requiredWhen` or `requiredOneOf` instead."},"minLength":{"description":"Shortest accepted value, for a string field.","type":"number"},"maxLength":{"description":"Longest accepted value, for a string field.","type":"number"},"pattern":{"description":"Regular expression the value must match. Anchor it yourself unless it already starts with ^ and ends with $.","type":"string"},"enum":{"description":"Closed set of accepted values. Send one of them verbatim.","type":"array","items":{"type":"string"}},"validator":{"description":"An extra checksum rule beyond `pattern`: `ABA` for a US routing number, `IBAN` for an international account number.","type":"string","enum":["aba","iban"]},"requiredWhen":{"description":"Makes the field required only when this condition holds. The condition reads another field in the same body by its `name`.","anyOf":[{"type":"object","properties":{"field":{"type":"string","description":"The `name` of the field this condition reads."},"equals":{"type":"string","description":"The condition holds when that field has this value."}},"required":["field","equals"],"additionalProperties":false},{"type":"object","properties":{"field":{"type":"string","description":"The `name` of the field this condition reads."},"notIn":{"minItems":1,"type":"array","items":{"type":"string"},"description":"The condition holds when that field's value is none of these."}},"required":["field","notIn"],"additionalProperties":false}]},"mustEqual":{"description":"The field must carry exactly this value. Used for attestations that only one answer can satisfy.","anyOf":[{"type":"string"},{"type":"boolean"},{"type":"number"}]},"requiredOneOf":{"description":"Names a group of fields of which at least one must be sent. Every field in the response that has the same value is in the group, and each of them alone is enough. Absent when the field is in no group.","example":"accountIdentifier","type":"string"}},"required":["name","type","required"]}},"fieldDescriptors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the field in the submission payload. Always starts with /. Array indices appear as integers.","example":"/businessInfo/taxId"},"label":{"type":"string","description":"Human-readable label for display","example":"Tax Identification Number"},"helpText":{"description":"One-line guidance for the field, intended to render as a tooltip / info pill next to the label. Plain text, no markup. For `businessInfo.taxId` and `businessInfo.businessEntityId` this is the country-specific identifier description from `countries.json` (with the issuing authority prefixed when known, e.g. 'Issued by HMRC.'). For other fields it is universal copy from the server-side field registry. Silently absent when neither source has guidance on file. See api-conventions §5.1.5.","example":"Issued by HMRC. 10-digit number; auto-assigned on CT registration; appears on HMRC correspondence. VAT Registration Number (GB + 9 digits; XI prefix for NI–EU trade) is supplementary — collect separately if VAT-registered.","type":"string"},"type":{"type":"string","enum":["string","number","integer","boolean","date","datetime","email","url","phone","country","enum","stringArray","enumArray"],"description":"Data type of the field","example":"string"},"required":{"type":"boolean","description":"Whether the field is required at submit"},"group":{"description":"Section grouping code for renderers. Stable camelCase token drawn from a closed set per discovery context (onboarding today: `businessInfo`, `companyClassification`, `registeredAddress`, `operatingAddress`, `businessActivity`, `activity`, `regulatoryHistory`, `certification`, `customAnswers`; `activity` carries an individual subject's own activity envelope, where `businessActivity` carries a business subject's; `customAnswers` carries operator-authored questions). Omitted on top-level scalars without a section and on fields nested inside `individualRequirements[].fields[]` (already a logical group). Presentation metadata; submit ignores it.","type":"string"},"mustEqual":{"description":"Required-with-const marker. Submit enforces strict equality on the field value (not just presence). Most common case: legal-certification booleans (`certification.termsAndConditions: { required: true, mustEqual: true }`) where `false` submits are rejected. Omitted when not constrained to a single value.","anyOf":[{"type":"boolean"},{"type":"string"},{"type":"number"}]},"constraints":{"description":"Per-value limits on this field alone, enforceable client-side. Satisfying them does not by itself clear submit: a value must also satisfy the field's `allowedValues`, its `mustEqual`, and every `conditionalOverride` whose conditions hold. Some `pattern` values state only a canonical spelling, and submit can accept equivalent spellings such a pattern does not list.","type":"object","properties":{"pattern":{"description":"Regex stating the canonical form of the value. A value that matches it is in the form submit expects; for some fields, submit is more lenient than this pattern and can accept spellings it does not state, so a value outside it is not always refused.","example":"^\\d{2}\\.\\d{3}\\.\\d{3}/\\d{4}-\\d{2}$","type":"string"},"example":{"description":"Example value matching the pattern","example":"12.345.678/0001-95","type":"string"},"format":{"description":"Advertised server-enforced semantic format marker. Closed enum: `safeString` (structured short fields — rejects control characters, HTML tags, and punctuation outside the documented allowlist), `prose` (free-text fields — allows ordinary punctuation and multi-line text, rejecting control characters, invisible-format characters, line/paragraph separators, and lone surrogates) or `ip` (an IPv4 or IPv6 address — no zone identifier, no leading zeros in IPv4 octets). The server enforces the rule at submit; the marker advertises it so clients can pre-validate. Arbitrary regex aliases belong in `pattern`.","type":"string","enum":["safeString","prose","ip"]},"minLength":{"description":"Minimum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxLength":{"description":"Maximum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"min":{"description":"Minimum numeric value","type":"number"},"max":{"description":"Maximum numeric value","type":"number"},"minDate":{"description":"Earliest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"1800-01-01","type":"string"},"maxDate":{"description":"Latest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"today","type":"string"},"maxDateTime":{"description":"Latest allowed instant for a datetime field: the literal 'now'. A value up to five minutes ahead of the server clock is accepted to absorb clock skew.","example":"now","type":"string","enum":["now"]},"minAgeYears":{"description":"Minimum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxAgeYears":{"description":"Maximum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"checksum":{"description":"A check digit rule the value must pass beyond `pattern`: `aba` for a US routing number, `iban` for an international bank account number (mod-97).","type":"string","enum":["aba","iban"]}},"additionalProperties":false},"requiredOneOf":{"description":"Names a group of fields of which at least one must be sent. Every field in the response that has the same value is in the group, and each of them alone is enough. Absent when the field is in no group.","example":"accountIdentifier","type":"string"},"conditions":{"description":"Conditional applicability rules. The field applies (is shown / required) only when every condition evaluates true against the current submission. Empty / absent means unconditional.","type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the submitted-data field this condition reads. Resolution is governed by the sibling scope (root by default; person-scoped when scope='person').","example":"/companyClassification/legalStructure"},"operator":{"type":"string","enum":["eq","in","not_in","exists","is_true","is_false"],"description":"Comparison operator. The field is required / applies only when the condition evaluates true against the current submitted data.","example":"eq"},"value":{"description":"Single comparison value, used with eq / exists operators","type":"string"},"values":{"description":"Array of comparison values, used with in / not_in operators. When the field at `pointer` is an array, `in` holds when any element of it is one of these values.","type":"array","items":{"type":"string"}},"scope":{"description":"Evaluation scope for `pointer`. Default `root` evaluates against the top-level submission; `person` evaluates against the current `ownership.persons[i]` row (used inside `individualRequirements[].fields[].conditions`).","type":"string","enum":["root","person"]}},"required":["pointer","operator"],"additionalProperties":false}},"allowedValues":{"description":"Allowed values for enum / enumArray fields. The submitted value MUST be one of these.","example":["LLC","CORPORATION","PARTNERSHIP"],"type":"array","items":{"type":"string"}},"options":{"description":"Structured per-option metadata for enum fields with display / grouping hints (label, abbr, description, category). `value` mirrors an entry in `allowedValues`. Present when the projector has localized data to surface (e.g. country-specific legal structures); enum fields without rich metadata use `allowedValues` alone.","type":"array","items":{"type":"object","properties":{"value":{"type":"string","description":"Submitted value. Must be one of the entries in the sibling `allowedValues` array.","example":"Sociedad Anónima"},"label":{"type":"string","description":"Human-readable label for display","example":"Sociedad Anónima"},"abbr":{"type":"string","description":"Short-form / acronym for the option","example":"S.A.","nullable":true},"description":{"description":"Long-form description of the option","type":"string"},"category":{"type":"string","enum":["Corp","LLC","Sole Proprietorship","Partnership","Other","regulatory_review"],"description":"Out-of-band metadata for an option that affects how it should be rendered or handled. Values: the legal-structure canonical bucket (`Corp` / `LLC` / `Sole Proprietorship` / `Partnership` / `Other`) — used to map the localised `value` to a standardised type; and `regulatory_review` — indicates this option is subject to additional regulatory review and may warrant a pre-submission warning to the user. Silently absent on options that carry no such metadata."}},"required":["value","label"],"additionalProperties":false}},"conditionalOverrides":{"description":"Extra constraints that apply only while their own conditions hold. Each element carries a `conditions` array read exactly like the field's own `conditions` — every condition must hold, and `scope: 'person'` resolves the pointer against the current `ownership.persons[i]` row — plus the `constraints` submit adds for that case. Three cases ship. An address states what submit keys on that address's own country: a person's `/address/state` carries the US subdivision pattern and `/address/postalCode` the US ZIP pattern while that same person's `/address/country` is `USA` (`scope: 'person'`), and the business's `/operatingAddress/state` and `/operatingAddress/postalCode` carry the same two while `/operatingAddress/country` is `USA`, read at the root of the body because the condition names no scope. A person's `/taxIdNumber` carries the US Social Security Number pattern while that same person's `/taxIdType` is `SSN`. When two or more requirement rules declare one field and a rule's check depends on a condition discovery cannot settle (most often a `scope: 'person'` condition), that rule's check is an element too: its `constraints` and, for an enum field, its `allowedValues`. Some overrides' `pattern` states only the canonical value to send, not the full set submit accepts: the US subdivision pattern states the two-letter code with or without the `US-` prefix, while submit also accepts the full state name and other spellings. Apply every element whose conditions hold ON TOP OF the field's own `constraints`, never in place of them: the value must match the field-level `pattern` and every override `pattern` that applies, and a bound named twice tightens to the stricter value. The property is additive and a client may ignore it, in which case the field reads exactly as it did before the property existed and submit can still reject a value the override would have named. Silently absent when the field carries no conditional case.","type":"array","items":{"type":"object","properties":{"conditions":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the submitted-data field this condition reads. Resolution is governed by the sibling scope (root by default; person-scoped when scope='person').","example":"/companyClassification/legalStructure"},"operator":{"type":"string","enum":["eq","in","not_in","exists","is_true","is_false"],"description":"Comparison operator. The field is required / applies only when the condition evaluates true against the current submitted data.","example":"eq"},"value":{"description":"Single comparison value, used with eq / exists operators","type":"string"},"values":{"description":"Array of comparison values, used with in / not_in operators. When the field at `pointer` is an array, `in` holds when any element of it is one of these values.","type":"array","items":{"type":"string"}},"scope":{"description":"Evaluation scope for `pointer`. Default `root` evaluates against the top-level submission; `person` evaluates against the current `ownership.persons[i]` row (used inside `individualRequirements[].fields[].conditions`).","type":"string","enum":["root","person"]}},"required":["pointer","operator"],"additionalProperties":false},"description":"Conditions that must ALL hold for this override to apply. Same shape and evaluation as `conditions` on the field itself, `scope` included."},"constraints":{"type":"object","properties":{"pattern":{"description":"Regex stating the canonical form of the value. A value that matches it is in the form submit expects; for some fields, submit is more lenient than this pattern and can accept spellings it does not state, so a value outside it is not always refused.","example":"^\\d{2}\\.\\d{3}\\.\\d{3}/\\d{4}-\\d{2}$","type":"string"},"example":{"description":"Example value matching the pattern","example":"12.345.678/0001-95","type":"string"},"format":{"description":"Advertised server-enforced semantic format marker. Closed enum: `safeString` (structured short fields — rejects control characters, HTML tags, and punctuation outside the documented allowlist), `prose` (free-text fields — allows ordinary punctuation and multi-line text, rejecting control characters, invisible-format characters, line/paragraph separators, and lone surrogates) or `ip` (an IPv4 or IPv6 address — no zone identifier, no leading zeros in IPv4 octets). The server enforces the rule at submit; the marker advertises it so clients can pre-validate. Arbitrary regex aliases belong in `pattern`.","type":"string","enum":["safeString","prose","ip"]},"minLength":{"description":"Minimum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxLength":{"description":"Maximum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"min":{"description":"Minimum numeric value","type":"number"},"max":{"description":"Maximum numeric value","type":"number"},"minDate":{"description":"Earliest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"1800-01-01","type":"string"},"maxDate":{"description":"Latest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"today","type":"string"},"maxDateTime":{"description":"Latest allowed instant for a datetime field: the literal 'now'. A value up to five minutes ahead of the server clock is accepted to absorb clock skew.","example":"now","type":"string","enum":["now"]},"minAgeYears":{"description":"Minimum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxAgeYears":{"description":"Maximum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"checksum":{"description":"A check digit rule the value must pass beyond `pattern`: `aba` for a US routing number, `iban` for an international bank account number (mod-97).","type":"string","enum":["aba","iban"]}},"additionalProperties":false,"description":"Constraints submit adds while the conditions hold. They narrow the field, never widen it, and they do not replace the field's own `constraints`: `pattern` is a SECOND regex that states the canonical form for this case, applied as well as the field-level `pattern`, and a bound named on both takes whichever value is stricter. As at field level, submit can be more lenient than some of these patterns state. `example` is a value valid under this override. Empty when the override narrows only `allowedValues`."},"allowedValues":{"description":"Allowed values for an enum / enumArray field while the conditions hold: a subset of the field's own `allowedValues`. Submit refuses a value outside it in that case. Omitted when the override does not narrow the values.","example":["SSN"],"type":"array","items":{"type":"string"}}},"required":["conditions","constraints"],"additionalProperties":false}}},"required":["pointer","label","type","required"]},"description":"The fields to send, in the same shape that `fields` has on the onboarding and feature requirements endpoints. `pointer` is an RFC 6901 JSON Pointer to the place of the value in the create request body. A field that has `conditions` is required only while every condition holds. `fields` gives the same fields in its earlier shape."},"documentation":{"type":"object","properties":{"required":{"type":"boolean"},"evaluated":{"type":"boolean","description":"Whether the document question was answered for this candidate. `false` means this candidate cannot be paid out as submitted for a reason that is not documentation — a blocked jurisdiction, an unwhitelisted recipient, or a destination or prefunding rejection — so `required: false` means the question was not answered, not that no document is needed. Send the same body to POST /v2/payouts to see that reason. GET /v2/payouts/requirements always returns `true`."},"degraded":{"type":"boolean","description":"Whether `required` is cautious rather than exact because a data source this answer needed was unavailable. `true` means a document is reported as required where a complete answer might not have asked for one: attach a document, or preview again later. `false` means `required` is exact for this candidate. An unvalued amount is one such source, so `degraded` can read `true` alongside any `amountValuation` value. GET /v2/payouts/requirements always returns `false`, because it answers the purpose baseline and needs no such source."},"amountValuation":{"description":"Whether the payout amount was valued in USD for this preview. `valued`: it was. `rate_unavailable`: no exchange rate was available for it, so the answer was reached without the amount's USD value — read `degraded` for whether that made `required` cautious, and preview again once the amount can be valued. `not_attempted`: this answer did not need the amount's USD value. GET /v2/payouts/requirements always returns `not_attempted`, because it takes no amount.","type":"string","enum":["valued","rate_unavailable","not_attempted"]},"due":{"description":"When a required document is due for the calling organization. `pre_acceptance`: attach it to POST /v2/payouts or the payout is rejected with 422 DOCUMENTATION_REQUIRED. `post_acceptance`: the payout is accepted without one and a request for information asks for it.","type":"string","enum":["pre_acceptance","post_acceptance"]},"reason":{"type":"string"},"acceptedDocumentTypes":{"type":"array","items":{"type":"string","enum":["bank_verification_letter","invoice","contract","payroll_register","investment_agreement","other"]},"description":"Document types that usually satisfy review for this payout's purpose and customer. A business customer gets every type; an individual customer gets the types a person can usually give. The list is a hint: any supported file can be uploaded, and a reviewer judges the document itself. GET /v2/payouts/requirements takes no customer, so for `other` it lists every type; POST /v2/payouts/requirements names the customer and lists that customer's types."}},"required":["required","evaluated","degraded","amountValuation","due","acceptedDocumentTypes"]},"whitelist":{"type":"object","properties":{"required":{"type":"boolean"},"reason":{"type":"string"}},"required":["required"]},"blockedJurisdictions":{"type":"array","items":{"type":"string","enum":["AFG","ALB","DZA","ASM","AND","AGO","AIA","ATA","ATG","ARG","ARM","ABW","AUS","AUT","AZE","BHS","BHR","BGD","BRB","BLR","BEL","BLZ","BEN","BMU","BTN","BOL","BES","BIH","BWA","BVT","BRA","IOT","BRN","BGR","BFA","BDI","CPV","KHM","CMR","CAN","CYM","CAF","TCD","CHL","CHN","CXR","CCK","COL","COM","COG","COD","COK","CRI","CIV","HRV","CUB","CUW","CYP","CZE","DNK","DJI","DMA","DOM","ECU","EGY","SLV","GNQ","ERI","EST","SWZ","ETH","FLK","FRO","FJI","FIN","FRA","GUF","PYF","ATF","GAB","GMB","GEO","DEU","GHA","GIB","GRC","GRL","GRD","GLP","GUM","GTM","GGY","GIN","GNB","GUY","HTI","HMD","VAT","HND","HKG","HUN","ISL","IND","IDN","IRN","IRQ","IRL","IMN","ISR","ITA","JAM","JPN","JEY","JOR","KAZ","KEN","KIR","PRK","KOR","KWT","KGZ","LAO","LVA","LBN","LSO","LBR","LBY","LIE","LTU","LUX","MAC","MDG","MWI","MYS","MDV","MLI","MLT","MHL","MTQ","MRT","MUS","MYT","MEX","FSM","MDA","MCO","MNG","MNE","MSR","MAR","MOZ","MMR","NAM","NRU","NPL","NLD","NCL","NZL","NIC","NER","NGA","NIU","NFK","MKD","MNP","NOR","OMN","PAK","PLW","PSE","PAN","PNG","PRY","PER","PHL","PCN","POL","PRT","PRI","QAT","REU","ROU","RUS","RWA","BLM","SHN","KNA","LCA","MAF","SPM","VCT","WSM","SMR","STP","SAU","SEN","SRB","SYC","SLE","SGP","SXM","SVK","SVN","SLB","SOM","ZAF","SGS","SSD","ESP","LKA","SDN","SUR","SJM","SWE","CHE","SYR","TWN","TJK","TZA","THA","TLS","TGO","TKL","TON","TTO","TUN","TUR","TKM","TCA","TUV","UGA","UKR","ARE","GBR","USA","UMI","URY","UZB","VUT","VEN","VNM","VGB","VIR","WLF","ESH","YEM","ZMB","ZWE"]},"description":"Countries this rail cannot pay to, as ISO 3166-1 alpha-3 codes. A payout whose recipient country appears here is rejected."}},"required":["rail","fields","fieldDescriptors","documentation","whitelist","blockedJurisdictions"]},"PayoutRequirementsPreviewResponseDto":{"type":"object","properties":{"rail":{"description":"The rail this answer describes. Absent where the candidate is a book transfer between the client's own accounts — a `virtual_account` or `wallet` destination — which no payment rail names; `fields` is then empty and `documentation` still carries the real answer.","type":"string","enum":["crypto","fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Where the value belongs in the create body, as a dotted path — not a display label. `destination.recipient.accountNumber` means `{ destination: { recipient: { accountNumber } } }`.","example":"destination.recipient.accountNumber"},"type":{"type":"string","enum":["string","number","boolean","date","email"],"description":"Kind of value to send. `date` and `email` are sent as JSON strings."},"required":{"type":"boolean","description":"Whether the field must always be sent. A field that is required only in some cases carries `requiredWhen` or `requiredOneOf` instead."},"minLength":{"description":"Shortest accepted value, for a string field.","type":"number"},"maxLength":{"description":"Longest accepted value, for a string field.","type":"number"},"pattern":{"description":"Regular expression the value must match. Anchor it yourself unless it already starts with ^ and ends with $.","type":"string"},"enum":{"description":"Closed set of accepted values. Send one of them verbatim.","type":"array","items":{"type":"string"}},"validator":{"description":"An extra checksum rule beyond `pattern`: `ABA` for a US routing number, `IBAN` for an international account number.","type":"string","enum":["aba","iban"]},"requiredWhen":{"description":"Makes the field required only when this condition holds. The condition reads another field in the same body by its `name`.","anyOf":[{"type":"object","properties":{"field":{"type":"string","description":"The `name` of the field this condition reads."},"equals":{"type":"string","description":"The condition holds when that field has this value."}},"required":["field","equals"],"additionalProperties":false},{"type":"object","properties":{"field":{"type":"string","description":"The `name` of the field this condition reads."},"notIn":{"minItems":1,"type":"array","items":{"type":"string"},"description":"The condition holds when that field's value is none of these."}},"required":["field","notIn"],"additionalProperties":false}]},"mustEqual":{"description":"The field must carry exactly this value. Used for attestations that only one answer can satisfy.","anyOf":[{"type":"string"},{"type":"boolean"},{"type":"number"}]},"requiredOneOf":{"description":"Names a group of fields of which at least one must be sent. Every field in the response that has the same value is in the group, and each of them alone is enough. Absent when the field is in no group.","example":"accountIdentifier","type":"string"}},"required":["name","type","required"]}},"fieldDescriptors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the field in the submission payload. Always starts with /. Array indices appear as integers.","example":"/businessInfo/taxId"},"label":{"type":"string","description":"Human-readable label for display","example":"Tax Identification Number"},"helpText":{"description":"One-line guidance for the field, intended to render as a tooltip / info pill next to the label. Plain text, no markup. For `businessInfo.taxId` and `businessInfo.businessEntityId` this is the country-specific identifier description from `countries.json` (with the issuing authority prefixed when known, e.g. 'Issued by HMRC.'). For other fields it is universal copy from the server-side field registry. Silently absent when neither source has guidance on file. See api-conventions §5.1.5.","example":"Issued by HMRC. 10-digit number; auto-assigned on CT registration; appears on HMRC correspondence. VAT Registration Number (GB + 9 digits; XI prefix for NI–EU trade) is supplementary — collect separately if VAT-registered.","type":"string"},"type":{"type":"string","enum":["string","number","integer","boolean","date","datetime","email","url","phone","country","enum","stringArray","enumArray"],"description":"Data type of the field","example":"string"},"required":{"type":"boolean","description":"Whether the field is required at submit"},"group":{"description":"Section grouping code for renderers. Stable camelCase token drawn from a closed set per discovery context (onboarding today: `businessInfo`, `companyClassification`, `registeredAddress`, `operatingAddress`, `businessActivity`, `activity`, `regulatoryHistory`, `certification`, `customAnswers`; `activity` carries an individual subject's own activity envelope, where `businessActivity` carries a business subject's; `customAnswers` carries operator-authored questions). Omitted on top-level scalars without a section and on fields nested inside `individualRequirements[].fields[]` (already a logical group). Presentation metadata; submit ignores it.","type":"string"},"mustEqual":{"description":"Required-with-const marker. Submit enforces strict equality on the field value (not just presence). Most common case: legal-certification booleans (`certification.termsAndConditions: { required: true, mustEqual: true }`) where `false` submits are rejected. Omitted when not constrained to a single value.","anyOf":[{"type":"boolean"},{"type":"string"},{"type":"number"}]},"constraints":{"description":"Per-value limits on this field alone, enforceable client-side. Satisfying them does not by itself clear submit: a value must also satisfy the field's `allowedValues`, its `mustEqual`, and every `conditionalOverride` whose conditions hold. Some `pattern` values state only a canonical spelling, and submit can accept equivalent spellings such a pattern does not list.","type":"object","properties":{"pattern":{"description":"Regex stating the canonical form of the value. A value that matches it is in the form submit expects; for some fields, submit is more lenient than this pattern and can accept spellings it does not state, so a value outside it is not always refused.","example":"^\\d{2}\\.\\d{3}\\.\\d{3}/\\d{4}-\\d{2}$","type":"string"},"example":{"description":"Example value matching the pattern","example":"12.345.678/0001-95","type":"string"},"format":{"description":"Advertised server-enforced semantic format marker. Closed enum: `safeString` (structured short fields — rejects control characters, HTML tags, and punctuation outside the documented allowlist), `prose` (free-text fields — allows ordinary punctuation and multi-line text, rejecting control characters, invisible-format characters, line/paragraph separators, and lone surrogates) or `ip` (an IPv4 or IPv6 address — no zone identifier, no leading zeros in IPv4 octets). The server enforces the rule at submit; the marker advertises it so clients can pre-validate. Arbitrary regex aliases belong in `pattern`.","type":"string","enum":["safeString","prose","ip"]},"minLength":{"description":"Minimum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxLength":{"description":"Maximum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"min":{"description":"Minimum numeric value","type":"number"},"max":{"description":"Maximum numeric value","type":"number"},"minDate":{"description":"Earliest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"1800-01-01","type":"string"},"maxDate":{"description":"Latest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"today","type":"string"},"maxDateTime":{"description":"Latest allowed instant for a datetime field: the literal 'now'. A value up to five minutes ahead of the server clock is accepted to absorb clock skew.","example":"now","type":"string","enum":["now"]},"minAgeYears":{"description":"Minimum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxAgeYears":{"description":"Maximum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"checksum":{"description":"A check digit rule the value must pass beyond `pattern`: `aba` for a US routing number, `iban` for an international bank account number (mod-97).","type":"string","enum":["aba","iban"]}},"additionalProperties":false},"requiredOneOf":{"description":"Names a group of fields of which at least one must be sent. Every field in the response that has the same value is in the group, and each of them alone is enough. Absent when the field is in no group.","example":"accountIdentifier","type":"string"},"conditions":{"description":"Conditional applicability rules. The field applies (is shown / required) only when every condition evaluates true against the current submission. Empty / absent means unconditional.","type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the submitted-data field this condition reads. Resolution is governed by the sibling scope (root by default; person-scoped when scope='person').","example":"/companyClassification/legalStructure"},"operator":{"type":"string","enum":["eq","in","not_in","exists","is_true","is_false"],"description":"Comparison operator. The field is required / applies only when the condition evaluates true against the current submitted data.","example":"eq"},"value":{"description":"Single comparison value, used with eq / exists operators","type":"string"},"values":{"description":"Array of comparison values, used with in / not_in operators. When the field at `pointer` is an array, `in` holds when any element of it is one of these values.","type":"array","items":{"type":"string"}},"scope":{"description":"Evaluation scope for `pointer`. Default `root` evaluates against the top-level submission; `person` evaluates against the current `ownership.persons[i]` row (used inside `individualRequirements[].fields[].conditions`).","type":"string","enum":["root","person"]}},"required":["pointer","operator"],"additionalProperties":false}},"allowedValues":{"description":"Allowed values for enum / enumArray fields. The submitted value MUST be one of these.","example":["LLC","CORPORATION","PARTNERSHIP"],"type":"array","items":{"type":"string"}},"options":{"description":"Structured per-option metadata for enum fields with display / grouping hints (label, abbr, description, category). `value` mirrors an entry in `allowedValues`. Present when the projector has localized data to surface (e.g. country-specific legal structures); enum fields without rich metadata use `allowedValues` alone.","type":"array","items":{"type":"object","properties":{"value":{"type":"string","description":"Submitted value. Must be one of the entries in the sibling `allowedValues` array.","example":"Sociedad Anónima"},"label":{"type":"string","description":"Human-readable label for display","example":"Sociedad Anónima"},"abbr":{"type":"string","description":"Short-form / acronym for the option","example":"S.A.","nullable":true},"description":{"description":"Long-form description of the option","type":"string"},"category":{"type":"string","enum":["Corp","LLC","Sole Proprietorship","Partnership","Other","regulatory_review"],"description":"Out-of-band metadata for an option that affects how it should be rendered or handled. Values: the legal-structure canonical bucket (`Corp` / `LLC` / `Sole Proprietorship` / `Partnership` / `Other`) — used to map the localised `value` to a standardised type; and `regulatory_review` — indicates this option is subject to additional regulatory review and may warrant a pre-submission warning to the user. Silently absent on options that carry no such metadata."}},"required":["value","label"],"additionalProperties":false}},"conditionalOverrides":{"description":"Extra constraints that apply only while their own conditions hold. Each element carries a `conditions` array read exactly like the field's own `conditions` — every condition must hold, and `scope: 'person'` resolves the pointer against the current `ownership.persons[i]` row — plus the `constraints` submit adds for that case. Three cases ship. An address states what submit keys on that address's own country: a person's `/address/state` carries the US subdivision pattern and `/address/postalCode` the US ZIP pattern while that same person's `/address/country` is `USA` (`scope: 'person'`), and the business's `/operatingAddress/state` and `/operatingAddress/postalCode` carry the same two while `/operatingAddress/country` is `USA`, read at the root of the body because the condition names no scope. A person's `/taxIdNumber` carries the US Social Security Number pattern while that same person's `/taxIdType` is `SSN`. When two or more requirement rules declare one field and a rule's check depends on a condition discovery cannot settle (most often a `scope: 'person'` condition), that rule's check is an element too: its `constraints` and, for an enum field, its `allowedValues`. Some overrides' `pattern` states only the canonical value to send, not the full set submit accepts: the US subdivision pattern states the two-letter code with or without the `US-` prefix, while submit also accepts the full state name and other spellings. Apply every element whose conditions hold ON TOP OF the field's own `constraints`, never in place of them: the value must match the field-level `pattern` and every override `pattern` that applies, and a bound named twice tightens to the stricter value. The property is additive and a client may ignore it, in which case the field reads exactly as it did before the property existed and submit can still reject a value the override would have named. Silently absent when the field carries no conditional case.","type":"array","items":{"type":"object","properties":{"conditions":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the submitted-data field this condition reads. Resolution is governed by the sibling scope (root by default; person-scoped when scope='person').","example":"/companyClassification/legalStructure"},"operator":{"type":"string","enum":["eq","in","not_in","exists","is_true","is_false"],"description":"Comparison operator. The field is required / applies only when the condition evaluates true against the current submitted data.","example":"eq"},"value":{"description":"Single comparison value, used with eq / exists operators","type":"string"},"values":{"description":"Array of comparison values, used with in / not_in operators. When the field at `pointer` is an array, `in` holds when any element of it is one of these values.","type":"array","items":{"type":"string"}},"scope":{"description":"Evaluation scope for `pointer`. Default `root` evaluates against the top-level submission; `person` evaluates against the current `ownership.persons[i]` row (used inside `individualRequirements[].fields[].conditions`).","type":"string","enum":["root","person"]}},"required":["pointer","operator"],"additionalProperties":false},"description":"Conditions that must ALL hold for this override to apply. Same shape and evaluation as `conditions` on the field itself, `scope` included."},"constraints":{"type":"object","properties":{"pattern":{"description":"Regex stating the canonical form of the value. A value that matches it is in the form submit expects; for some fields, submit is more lenient than this pattern and can accept spellings it does not state, so a value outside it is not always refused.","example":"^\\d{2}\\.\\d{3}\\.\\d{3}/\\d{4}-\\d{2}$","type":"string"},"example":{"description":"Example value matching the pattern","example":"12.345.678/0001-95","type":"string"},"format":{"description":"Advertised server-enforced semantic format marker. Closed enum: `safeString` (structured short fields — rejects control characters, HTML tags, and punctuation outside the documented allowlist), `prose` (free-text fields — allows ordinary punctuation and multi-line text, rejecting control characters, invisible-format characters, line/paragraph separators, and lone surrogates) or `ip` (an IPv4 or IPv6 address — no zone identifier, no leading zeros in IPv4 octets). The server enforces the rule at submit; the marker advertises it so clients can pre-validate. Arbitrary regex aliases belong in `pattern`.","type":"string","enum":["safeString","prose","ip"]},"minLength":{"description":"Minimum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxLength":{"description":"Maximum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"min":{"description":"Minimum numeric value","type":"number"},"max":{"description":"Maximum numeric value","type":"number"},"minDate":{"description":"Earliest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"1800-01-01","type":"string"},"maxDate":{"description":"Latest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"today","type":"string"},"maxDateTime":{"description":"Latest allowed instant for a datetime field: the literal 'now'. A value up to five minutes ahead of the server clock is accepted to absorb clock skew.","example":"now","type":"string","enum":["now"]},"minAgeYears":{"description":"Minimum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxAgeYears":{"description":"Maximum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"checksum":{"description":"A check digit rule the value must pass beyond `pattern`: `aba` for a US routing number, `iban` for an international bank account number (mod-97).","type":"string","enum":["aba","iban"]}},"additionalProperties":false,"description":"Constraints submit adds while the conditions hold. They narrow the field, never widen it, and they do not replace the field's own `constraints`: `pattern` is a SECOND regex that states the canonical form for this case, applied as well as the field-level `pattern`, and a bound named on both takes whichever value is stricter. As at field level, submit can be more lenient than some of these patterns state. `example` is a value valid under this override. Empty when the override narrows only `allowedValues`."},"allowedValues":{"description":"Allowed values for an enum / enumArray field while the conditions hold: a subset of the field's own `allowedValues`. Submit refuses a value outside it in that case. Omitted when the override does not narrow the values.","example":["SSN"],"type":"array","items":{"type":"string"}}},"required":["conditions","constraints"],"additionalProperties":false}}},"required":["pointer","label","type","required"]},"description":"The fields to send, in the same shape that `fields` has on the onboarding and feature requirements endpoints. `pointer` is an RFC 6901 JSON Pointer to the place of the value in the create request body. A field that has `conditions` is required only while every condition holds. `fields` gives the same fields in its earlier shape."},"documentation":{"type":"object","properties":{"required":{"type":"boolean"},"evaluated":{"type":"boolean","description":"Whether the document question was answered for this candidate. `false` means this candidate cannot be paid out as submitted for a reason that is not documentation — a blocked jurisdiction, an unwhitelisted recipient, or a destination or prefunding rejection — so `required: false` means the question was not answered, not that no document is needed. Send the same body to POST /v2/payouts to see that reason. GET /v2/payouts/requirements always returns `true`."},"degraded":{"type":"boolean","description":"Whether `required` is cautious rather than exact because a data source this answer needed was unavailable. `true` means a document is reported as required where a complete answer might not have asked for one: attach a document, or preview again later. `false` means `required` is exact for this candidate. An unvalued amount is one such source, so `degraded` can read `true` alongside any `amountValuation` value. GET /v2/payouts/requirements always returns `false`, because it answers the purpose baseline and needs no such source."},"amountValuation":{"description":"Whether the payout amount was valued in USD for this preview. `valued`: it was. `rate_unavailable`: no exchange rate was available for it, so the answer was reached without the amount's USD value — read `degraded` for whether that made `required` cautious, and preview again once the amount can be valued. `not_attempted`: this answer did not need the amount's USD value. GET /v2/payouts/requirements always returns `not_attempted`, because it takes no amount.","type":"string","enum":["valued","rate_unavailable","not_attempted"]},"due":{"description":"When a required document is due for the calling organization. `pre_acceptance`: attach it to POST /v2/payouts or the payout is rejected with 422 DOCUMENTATION_REQUIRED. `post_acceptance`: the payout is accepted without one and a request for information asks for it.","type":"string","enum":["pre_acceptance","post_acceptance"]},"reason":{"type":"string"},"acceptedDocumentTypes":{"type":"array","items":{"type":"string","enum":["bank_verification_letter","invoice","contract","payroll_register","investment_agreement","other"]},"description":"Document types that usually satisfy review for this payout's purpose and customer. A business customer gets every type; an individual customer gets the types a person can usually give. The list is a hint: any supported file can be uploaded, and a reviewer judges the document itself. GET /v2/payouts/requirements takes no customer, so for `other` it lists every type; POST /v2/payouts/requirements names the customer and lists that customer's types."}},"required":["required","evaluated","degraded","amountValuation","due","acceptedDocumentTypes"]},"whitelist":{"type":"object","properties":{"required":{"type":"boolean"},"reason":{"type":"string"}},"required":["required"]},"blockedJurisdictions":{"type":"array","items":{"type":"string","enum":["AFG","ALB","DZA","ASM","AND","AGO","AIA","ATA","ATG","ARG","ARM","ABW","AUS","AUT","AZE","BHS","BHR","BGD","BRB","BLR","BEL","BLZ","BEN","BMU","BTN","BOL","BES","BIH","BWA","BVT","BRA","IOT","BRN","BGR","BFA","BDI","CPV","KHM","CMR","CAN","CYM","CAF","TCD","CHL","CHN","CXR","CCK","COL","COM","COG","COD","COK","CRI","CIV","HRV","CUB","CUW","CYP","CZE","DNK","DJI","DMA","DOM","ECU","EGY","SLV","GNQ","ERI","EST","SWZ","ETH","FLK","FRO","FJI","FIN","FRA","GUF","PYF","ATF","GAB","GMB","GEO","DEU","GHA","GIB","GRC","GRL","GRD","GLP","GUM","GTM","GGY","GIN","GNB","GUY","HTI","HMD","VAT","HND","HKG","HUN","ISL","IND","IDN","IRN","IRQ","IRL","IMN","ISR","ITA","JAM","JPN","JEY","JOR","KAZ","KEN","KIR","PRK","KOR","KWT","KGZ","LAO","LVA","LBN","LSO","LBR","LBY","LIE","LTU","LUX","MAC","MDG","MWI","MYS","MDV","MLI","MLT","MHL","MTQ","MRT","MUS","MYT","MEX","FSM","MDA","MCO","MNG","MNE","MSR","MAR","MOZ","MMR","NAM","NRU","NPL","NLD","NCL","NZL","NIC","NER","NGA","NIU","NFK","MKD","MNP","NOR","OMN","PAK","PLW","PSE","PAN","PNG","PRY","PER","PHL","PCN","POL","PRT","PRI","QAT","REU","ROU","RUS","RWA","BLM","SHN","KNA","LCA","MAF","SPM","VCT","WSM","SMR","STP","SAU","SEN","SRB","SYC","SLE","SGP","SXM","SVK","SVN","SLB","SOM","ZAF","SGS","SSD","ESP","LKA","SDN","SUR","SJM","SWE","CHE","SYR","TWN","TJK","TZA","THA","TLS","TGO","TKL","TON","TTO","TUN","TUR","TKM","TCA","TUV","UGA","UKR","ARE","GBR","USA","UMI","URY","UZB","VUT","VEN","VNM","VGB","VIR","WLF","ESH","YEM","ZMB","ZWE"]},"description":"Countries this rail cannot pay to, as ISO 3166-1 alpha-3 codes. A payout whose recipient country appears here is rejected."}},"required":["fields","fieldDescriptors","documentation","whitelist","blockedJurisdictions"]},"PublicWithdrawalMutationViewDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$"},"customerName":{"description":"Display name of the customer that owns the transaction: business legal name or individual full name. Same value on the transactions and payouts reads for the same row. Omitted when the customer's identity record hasn't resolved a name yet; per the public omit-don't-null convention, absence is never surfaced as `null`.","type":"string"},"clientReferenceId":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces."},"status":{"type":"string","enum":["pending","processing","completed","failed","cancelled"]},"stage":{"description":"Progress signal for a non-terminal transaction, informational only — it does not replace `requiresUserSignature`, `hasRfi`, or `failureCode` for deciding whether your integration needs to act. `awaiting_signature`: waiting on the required transaction signature (see `requiresUserSignature`). `awaiting_customer_action`: further input is needed before the transaction can go on. Read `hasRfi` to learn where the ask is: `true` means a request for information holds the answer — `rfiId` names it, and `GET /v2/rfis/{id}` carries what to send; `false` means the matching event carries the detail (e.g. `transaction.awaiting_sender_information`); with no such event, the recipient details cannot be sent as given, so contact support to correct them, or cancel the payout. `under_review`: compliance, document, or verification review of something already submitted is in progress — usually no action needed; check `hasRfi` if unsure. `settling`: funds movement or settlement is in progress, no customer action required — covers long-lived fiat rails like SWIFT that legitimately take days as well as any other non-blocked in-flight state. Omitted once `status` reaches a terminal value (`completed` / `failed` / `cancelled`). The set of values may grow over time — treat unrecognized values the same as `processing`.","type":"string","enum":["awaiting_signature","awaiting_customer_action","under_review","settling"]},"source":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"destination":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"walletId":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"txHash":{"type":"string"}},"required":["type","walletId","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-custodied crypto wallet on one side of a transaction."},{"type":"object","properties":{"type":{"type":"string","enum":["deposit_address"]},"address":{"type":"string"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"A Conduit-provided funding address — the address a deposit-funded order was funded at. Conduit owns and may rotate the wallet behind it without notice, so the side carries no wallet id and the address is the only thing to reconcile against. Chain travels with the asset inside `assetAmount`."},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"virtualAccountId":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"wireReceive":{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["us"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"routingNumber":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","routingNumber"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"bic":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","bic"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["uk"]},"bankName":{"type":"string","nullable":true},"accountLast4":{"type":"string","nullable":true},"sortCode":{"type":"string","nullable":true}},"required":["rail","bankName","accountLast4","sortCode"],"additionalProperties":false}],"description":"Receiving wire-instruction context: which Conduit bank account + rail the inbound deposit landed in. Captured at deposit-detect time."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","virtualAccountId","assetAmount"],"additionalProperties":false,"description":"A Conduit virtual account on one side of a transaction. `wireReceive` is destination-only — it carries the receiving wire instructions on fiat inbound deposits where the VA received the wire. Always absent when the VA is a source (conversions / fiat withdrawals)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_crypto"]},"address":{"type":"string"},"txHash":{"type":"string"},"explorerUrl":{"description":"Link to `txHash` on a public block explorer for the chain and network. Set on transaction reads only, never in a webhook. Absent when there is no `txHash`, when Conduit knows no explorer for the chain, and on a sandbox that simulates the chain.","type":"string"},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","address","assetAmount"],"additionalProperties":false,"description":"An external on-chain counterparty: address plus optional settlement tx hash. Chain travels with the asset inside `assetAmount`. `memo` is the destination memo the payout was created with, when it carried one."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank"]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"bankScheduledFor":{"description":"The settlement date the sending bank last reported for this payout, as a calendar date in the bank's own time zone. Present only when the bank reports one, as on ACH. A date later than the payout date means the bank moved the entry to a later window; the payout, its rail and its obligation do not change, so do not send it again.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["type","rail","recipient","assetAmount"],"additionalProperties":false,"description":"An external bank counterparty: the payment rail and rail context the payout was created with (`rail`, `ach`, `swift`, `instant`), the recipient details, plus any real wire settlement references (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow)."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_inbound"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the deposit arrived on (fedwire, ach, rtp, fednow, swift, sepa, faster_payments, chaps, pix, ted, nibss, spei), or null when not known. Always present. Independent of the wire reference fields, which may be absent.","nullable":true},"sender":{"type":"object","properties":{"name":{"description":"Name of the sending account holder.","type":"string"},"country":{"description":"Country of the sending account holder, ISO 3166-1 alpha-2.","type":"string","enum":["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"]},"accountNumber":{"description":"The sender's account number, as the payer's bank reports it, when transmitted.","type":"string"},"routingNumber":{"description":"US ABA routing number of the sending bank.","type":"string"},"sortCode":{"description":"UK sort code of the sending bank, as the sending bank transmitted it, with spaces and hyphens stripped.","type":"string"},"iban":{"description":"Sender IBAN, when transmitted.","type":"string"},"bic":{"description":"BIC of the sending bank (ISO 9362).","type":"string"}},"additionalProperties":false,"description":"Originator details on an inbound fiat deposit — what the sending bank transmitted with the payment. Each field is present only when provided."},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"},"endToEndId":{"description":"The ISO 20022 end-to-end identification the sender set on an instant payment (RTP or FedNow), at most 35 characters. Best-effort: absent when the bank does not report it.","type":"string"}},"required":["type","rail","sender","assetAmount"],"additionalProperties":false,"description":"Inbound fiat deposit source: the external bank that originated the wire, with the originator details as provided by the sender bank, plus the payment network the deposit arrived on (`rail`, null when unknown) and any real settlement references the network exposed (Fedwire IMAD/OMAD, SWIFT UETR, ACH trace, RTP, FedNow, end-to-end id). The wire reference fields are independent of `rail` and best-effort: each may be absent, also when the bank does not answer Conduit's read of the payment. The variant is emitted once a sender field, the rail, or a wire reference is known; `sender` is `{}` when no sender field is known. Until one of them is known, the source surfaces as `external_unknown`. A deposit delivered on-us from another account in the same organization is `internal_transfer` instead, even when the partner bank supplied sender details — there is no external originator to report."},{"type":"object","properties":{"type":{"type":"string","enum":["external_bank_debit"]},"rail":{"type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"description":"The payment network the bank pulled the money over (ach, fedwire, ...), or null when not known. Always present.","nullable":true},"originator":{"type":"object","properties":{"name":{"type":"string","description":"Name of the party that pulled the money."},"id":{"description":"The originator's identifier on the network, when sent.","type":"string"}},"required":["name"],"additionalProperties":false},"secCode":{"description":"ACH Standard Entry Class code of the entry, e.g. CCD or WEB.","type":"string"},"description":{"description":"Entry description the originator sent with the debit.","type":"string"},"effectiveDate":{"description":"Date the originator asked the bank to settle the debit.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"fedwireImad":{"type":"string"},"fedwireOmad":{"type":"string"},"swiftUetr":{"type":"string"},"achTraceNumber":{"type":"string"},"rtpTransactionId":{"type":"string"},"fedNowMessageId":{"type":"string"},"pixEndToEndId":{"type":"string"},"tedReference":{"type":"string"},"speiTrackingKey":{"type":"string"}},"required":["type","rail","originator","assetAmount"],"additionalProperties":false,"description":"Destination of a withdrawal that Conduit did not start: a third party pulled the money from the customer's bank account, such as an ACH debit. It names the party that pulled it (`originator`) and the payment network (`rail`, null when unknown), plus any settlement reference the network exposed. Without an originator name the destination is `external_unknown`."},{"type":"object","properties":{"type":{"type":"string","enum":["internal_transfer"]},"originatingTransactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","originatingTransactionId","assetAmount"],"additionalProperties":false,"description":"Source of a deposit that was delivered on-us from another Conduit account in the SAME organization — no external bank was involved. `originatingTransactionId` is the withdrawal transaction that sent it; fetch it for the sending side's own details. Emitted only when the organization owns both sides: an on-us delivery from another organization keeps the source it would otherwise have. On a bank deposit, `transaction.created` already carries this variant. On a crypto deposit it resolves as the deposit is detected, which happens after the transaction is created — so on a first-pass run `transaction.created` carries `external_unknown`, while `transaction.completed` and every read carry the resolved source."},{"type":"object","properties":{"type":{"type":"string","enum":["external_unknown"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["type","assetAmount"],"additionalProperties":false,"description":"External counterparty whose details are not yet known (e.g. detected fiat deposit before sender info has been resolved)."}],"description":"One side (source or destination) of a transaction. Discriminated by `type`."},"fees":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["fixed"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"owner":{"type":"string","enum":["conduit","you"],"description":"Who this charge belongs to. `conduit` is Conduit's own fee. `you` is the margin you declared on this transaction, which Conduit collects from your customer and accrues to you; it is your revenue, not a Conduit charge."}},"required":["type","assetAmount","owner"]}},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"completedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"failureCode":{"type":"string","enum":["user_signature_timeout","user_signature_expired","user_signature_declined","user_signature_rejected_by_provider","crypto_wallet_misconfigured","compliance_hold","compliance_review_rejected","compliance_rejected","returned_by_sender","rail_policy_rejected","insufficient_funds","insufficient_funds_at_settle","rail_unavailable","sender_info_timeout","travel_rule_rejected","provider_rejected","chain_broadcast_failed","roster_changed","insufficient_onchain_balance","source_account_unavailable","capability_suspended"]},"failureMessage":{"description":"Conduit's own wording for `failureCode`: the public error catalog text for the code, or the generic failure text when there is no code. The same text as `failureMessage` on the `transaction.failed` webhook. It never carries text from a bank, a chain or a sandbox simulator `reason`.","type":"string"},"cancelledAt":{"description":"ISO-8601 timestamp when the transaction was cancelled. Present only on `status: cancelled`.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"cancellationReason":{"description":"Machine-readable cancellation reason. `client_cancelled` when the client called `POST /v2/payouts/:id/cancel`; `conduit_cancelled` when Conduit cancelled the payout; `expired` is reserved. The set of values can grow: treat an unknown value as Conduit ending the transaction. Omitted on non-cancelled rows. Orders carry only `client_cancelled` and `expired`.","type":"string","enum":["expired","client_cancelled","conduit_cancelled"]},"linkedOrderId":{"type":"string","pattern":"^ord_[0-9A-Za-z]{22}$"},"purpose":{"description":"The business purpose declared at payout creation. Drives compliance gating: intercompany requires a whitelisted recipient of the customer or its group; personal_transfer_of_funds requires the customer's own whitelisted account; prefunding requires a customer's issued account; other values require supporting documentation.","type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"]},"purposeDescription":{"description":"The customer's own words for the payment. Omitted when none was sent, and on the transaction list: read the single transaction to get it.","type":"string"},"hasRfi":{"type":"boolean","description":"True when at least one published (non-draft, non-cancelled) RFI targets this transaction. Always present; derived at read time, no stored column."},"rfiId":{"description":"The most recently published such RFI — usually the one `stage` refers to, but a later unrelated RFI on the same transaction takes this slot instead. Omitted (never `null`) when `hasRfi` is false.","type":"string","pattern":"^rfi_[0-9A-Za-z]{22}$"},"remittance":{"type":"object","properties":{"reference":{"type":"string"},"description":{"type":"string"}},"description":"The free-text reference of the payment. On a payout, the reference the payer supplied, fiat or crypto. On a transfer between two of the customer's own wallets the same value reads on both halves: the withdrawal that sent it and the deposit that credits it. On a deposit from a bank, `reference` is the text the sender wrote, as the bank passed it on: on ACH, the addenda (the payment-related information); on a wire, the remittance or originator-to-beneficiary information; on RTP, the remittance data; on SEPA, SEPA Instant and Faster Payments, the payment reference. Some banks do not pass the text on. Conduit removes control characters, keeps at most 512 characters, and drops a placeholder such as NOTPROVIDED and an echo of a Conduit ID. Omitted when there is no text. A transfer from another of your own accounts shows the payout's own reference, not the bank's text."},"swiftUetr":{"description":"The UETR of the fiat leg — the ISO 20022 unique end-to-end transaction reference. Present whenever the payment carried one, including on a deposit whose `source` is still `external_unknown` because the sender has not resolved. The side that carries wire references repeats it — `destination.swiftUetr` on a payout, `source.swiftUetr` on a deposit — but not every side does, which is why it reads here as well. A Fedwire message carries a UETR too, so its presence does not mean the payment travelled on SWIFT. Omitted (never `null`) when the rail supplied none.","type":"string"},"returnCode":{"description":"The return code the bank sent when it returned this transfer, for example the Nacha code `R01` on an ACH return. Present only with `failureCode: returned_by_sender`, and only when the bank sent a Nacha return code. `returnReason` says why the bank returned the transfer. The bank's free-text return reason is never returned.","type":"string"},"returnReason":{"description":"Why the bank returned or refused this transfer, as a Conduit code. Present with `failureCode: returned_by_sender` when Conduit recorded the bank's return, with or without `returnCode`. Present with `failureCode: provider_rejected` when the bank refused the payout before it settled, no funds moved, and the refusal carried a bank code that Conduit maps or the payee check refused the recipient before sending. Absent on a return recorded before this field existed. `account_closed`: The account is closed. Get new account details. `incorrect_account_number`: The account details are incorrect. Check them and send again. `beneficiary_name_mismatch`: The recipient's name does not match the account. Check the name and send again. `payment_not_permitted`: The bank or account does not accept this payment. `invalid_recipient_details`: The recipient's name, address or bank fields are missing, too long or invalid. Correct them and submit again. `other`: The bank gave no specific reason. Contact support for details. The set of values can grow. Treat a value you do not recognise as `other`. The bank's free-text reason is never sent.","type":"string","enum":["account_closed","incorrect_account_number","beneficiary_name_mismatch","payment_not_permitted","invalid_recipient_details","other"]},"returnedAt":{"description":"ISO-8601 timestamp when Conduit recorded the bank's return of this transfer. Present with `failureCode: returned_by_sender` when the return is recorded, with or without `returnCode`.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"type":{"type":"string","enum":["withdrawal"]},"markup":{"type":"object","properties":{"bps":{"description":"The percentage margin you declared on this payout, in basis points. Absent when you declared only a flat amount.","type":"number"},"flatAmount":{"description":"The flat margin you declared on this payout, in the payout's asset. Absent when you declared only a percentage. Also absent when the flat amount you declared on an order's auto-payout leg was smaller than one minor unit of the payout's asset: that leg is declared before its asset is known, so the term rounds away there while the percentage stays.","type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"assetAmount":{"description":"What that margin charges your customer for you: the percentage part plus the flat part. It is present exactly when `fees[]` carries the entry with `owner: \"you\"`, and it is that same figure. So read `fees[]` to see whether this payout still holds the margin for you, and `GET /v2/markup/statement-lines` to see what it accrued to you. A returned or cancelled payout does not hold it.","type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"description":"The margin you declared on this payout, echoed back. Present when you declared one that came to at least one minor unit of the payout's asset. `bps` and `flatAmount` read back for the life of the payout, whatever becomes of it, so you can always confirm what you sent. What each payout accrued to you is answered by `GET /v2/markup/statement-lines`, where a reversal reads as a negative amount."},"requiresUserSignature":{"type":"boolean"},"cancellable":{"description":"Whether this payout is eligible for `POST /v2/payouts/{id}/cancel`. Present on a freshly created or cancelled response. Omitted when this response replays a stored idempotent record written before this field existed — GET the payout back to read it. It is `false` at a terminal status, and `false` once the payout is dispatched for settlement: the bank has answered its submit, or its on-chain send started. Eligibility is not a guarantee that the next cancel succeeds: while the payout starts up, a cancel can answer 409 `PAYOUT_CANCEL_IN_PROGRESS` although `cancellable` is `true` — retry shortly — and a payout that moves on between the read and the cancel answers 409 `PAYOUT_NOT_CANCELLABLE`. That includes a fiat payout whose submit is still waiting for the bank's answer: its cancel already answers 409 while `cancellable` still reads `true`.","type":"boolean"},"queuePosition":{"description":"Position in the per-(wallet, chain) signing queue. Only waiting payouts (position ≥ 1) expose this field; the active/head payout omits it. Absent when the payout is not on the user-signature path or has reached a terminal status.","type":"integer","minimum":1,"maximum":9007199254740991},"retryOf":{"description":"The payout this one replaces. Present when an operator re-sent a payout the receiving bank returned; the original transfer reads `failed` with failure code `returned_by_sender`.","type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"documents":{"description":"The supporting documents attached at creation, as sent on `documents`. Omitted when none were attached.","type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["id","customerId","status","source","destination","fees","createdAt","hasRfi","type","requiresUserSignature"],"description":"Client-facing view of a payout returned from create or cancel. Same shape as the payout read except `cancellable` is optional: a replayed idempotent response can carry a body stored before that field existed."},"SimulatePayoutSettledDtoClass":{"type":"object","properties":{"outcome":{"type":"string","enum":["completed","failed"]},"utr":{"type":"string","minLength":1,"maxLength":120},"reason":{"type":"string","maxLength":500}},"required":["outcome"],"additionalProperties":false},"SimulateCounterpartyWebhookDtoClass":{"type":"object","properties":{"outcome":{"type":"string","enum":["acknowledged","approved","rejected","declined"]},"reason":{"type":"string","maxLength":500}},"required":["outcome"],"additionalProperties":false},"SimulateComplianceDecisionDtoClass":{"type":"object","properties":{"outcome":{"type":"string","enum":["approve","reject"],"description":"`approve` clears the compliance hold and the transaction resumes (deposit credits / withdrawal proceeds). `reject` terminalizes the transaction using the transaction type's default compliance terminal (deposit → frozen, withdrawal → rejected)."}},"required":["outcome"],"additionalProperties":false},"OrderExternalResponseDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^ord_[0-9A-Za-z]{22}$"},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","nullable":true},"clientReferenceId":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces."},"status":{"type":"string","enum":["pending","succeeded","failed","cancelled"]},"type":{"type":"string","enum":["onramp","offramp","conversion","fiat_conversion"]},"source":{"description":"The funding resource, when the order named one. Omitted entirely on a deposit-funded order (created without a `source`): the funding wallet is Conduit-managed infrastructure with no client-resolvable id, and `depositInstructions` carries the address to fund at instead. The presence of `depositInstructions` is the discriminator.","oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"id":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"}},"required":["type","id"]},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"id":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"}},"required":["type","id"]}]},"destination":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"id":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"}},"required":["type","id"]},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"id":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"}},"required":["type","id"]},{"type":"object","properties":{"type":{"type":"string","enum":["external_wallet"]},"recipient":{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"]},"purposeDescription":{"type":"string"},"documents":{"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["type","recipient","purpose"]},{"type":"object","properties":{"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"]},"purposeDescription":{"type":"string"},"documents":{"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markup":{"description":"The margin you declared on this leg, echoed back. The leg spends this order's converted output, so the margin is taken out of it: the recipient receives destinationAsset.amount less this margin and less Conduit's own payout fee. It is separate from the conversion's own markup block, and it accrues to you when the payout succeeds.","type":"object","properties":{"bps":{"type":"number"},"flatAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}}},"type":{"type":"string","enum":["external_bank"]}},"required":["recipient","type"]}]},"sourceAsset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"destinationAsset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"lockSide":{"description":"Which side the order's `amount` fixed. `source`: the customer pays exactly that amount, so `totalDebit` equals it and fees come out of the amount that converts. `destination`: the recipient receives exactly that amount, and fees are added on top in `totalDebit`.","type":"string","enum":["source","destination"]},"autoPayout":{"type":"object","properties":{"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"]},"purposeDescription":{"type":"string"},"documents":{"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markup":{"description":"The margin you declared on this leg, echoed back. The leg spends this order's converted output, so the margin is taken out of it: the recipient receives destinationAsset.amount less this margin and less Conduit's own payout fee. It is separate from the conversion's own markup block, and it accrues to you when the payout succeeds.","type":"object","properties":{"bps":{"type":"number"},"flatAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}}}},"required":["recipient"],"description":"AutoPayout payload, echoing what the order was created with. Crypto recipients omit `rail`/`ach`/`swift`/`instant`/`remittance` and may carry `memo`; fiat recipients carry `rail` and the matching per-rail context block."},"rate":{"type":"object","properties":{"referenceRate":{"type":"string","description":"Market reference rate at quote time"},"totalSpreadBps":{"type":"string","description":"Combined spread (FX markup + take rate, plus your own markupBps when the order or the quote declared one) in basis points, as a string with up to two decimal places. When Conduit invoices its conversion fee to you monthly, the take rate is not in this spread"},"endUserRate":{"type":"string","description":"Effective rate the customer is transacting at"}},"required":["referenceRate","totalSpreadBps","endUserRate"]},"fees":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["fixed"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"owner":{"type":"string","enum":["conduit","you"],"description":"Who this charge belongs to. `conduit` is Conduit's own fee. `you` is a flat margin you declared with markupAmount, which Conduit collects from your customer and accrues to you; it is your revenue, not a Conduit charge."}},"required":["type","assetAmount","owner"]}},"markup":{"type":"object","properties":{"bps":{"description":"The percentage margin you declared on this order, in basis points. Absent when you declared only a flat amount.","type":"number"},"flatAmount":{"description":"The flat margin you declared on this order, in its source asset. Absent when you declared only a percentage.","type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false,"description":"The total amount accrued to you for the conversion, in the order's source asset: the percentage part plus the flat part. On an offramp that an external conversion provider settles, in the destination asset, because the margin is taken from the provider's payout."}},"required":["assetAmount"],"description":"Present on an order carrying a margin which comes to at least one minor unit of the source asset — one the order declared, or one it inherited from the quote option it redeemed. On an offramp that an external conversion provider settles, present when the margin taken from the payout comes to at least one minor unit of the destination asset. `assetAmount` is the total accrued to you, fixed at quote time. The two shapes reach the customer differently: the markupBps part is folded into the quoted rate, so it never appears in fees[] and does not move totalDebit, while the markupAmount part is a line item in fees[] owned by you and it does move totalDebit. On an offramp that an external conversion provider settles, the deposit of the provider's payout, listed in linkedTransactionIds, carries the whole margin as one fees[] line owned by you, in the destination asset."},"totalDebit":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false,"description":"Total the customer pays in the source asset: `sourceAsset.amount` plus every entry in `fees`. On a `source`-locked order it equals the locked `amount`; on a `destination`-locked order it is the principal plus fees. A `markupAmount` that the order declares when it redeems a `quoteOptionId` adds to it on both lock sides. Fund the source, or the deposit address, with this amount."},"lockExpiresAt":{"type":"string","format":"date-time","description":"Deadline for execution to begin, not merely for the source to be funded. If execution hasn't been claimed by this time, the order transitions to `status: cancelled` with `cancellationReason: 'expired'` and can no longer execute — funding the source after this timestamp does not revive it. Create a new order to get a fresh rate lock. An order with a named `source` holds its rate for 2 hours from creation, including an order that redeems a quote option. A deposit-funded order has no source, and this is its funding deadline.","example":"2026-01-15T09:30:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"autoExecute":{"type":"boolean","description":"Echoes the create-time value. When true, Conduit automatically claims execution once the available source balance covers totalDebit (principal plus fees), with no client action required — orders sharing the same source resource execute oldest-first, so a still-underfunded older order can delay a newer, already-funded one; when false, the client must call POST /v2/orders/{id}/execute (repeatable after funding if a prior attempt returned 422 INSUFFICIENT_FUNDS). Order creation never checks or reserves the source's available balance regardless of this value."},"executedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"executionTrigger":{"description":"Which path claimed execution: 'client' for a POST /v2/orders/{id}/execute call, 'auto' for automatic execution by Conduit. Set as soon as execution is claimed — well before the order reaches a terminal status — so it can appear on an order that is still `status: pending` while its conversion is in flight. Absent on an order that hasn't started executing yet (including one cancelled before execution began).","type":"string","enum":["client","auto"]},"cancelledAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"cancellationReason":{"type":"string","enum":["expired","client_cancelled"]},"failureCode":{"type":"string","enum":["insufficient_funds","provider_unavailable","provider_rejected","internal_error","cancelled","insufficient_onchain_balance","source_account_unavailable"]},"failureMessage":{"type":"string"},"linkedTransactionIds":{"type":"array","items":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"}},"payoutTxHash":{"type":"string","description":"On-chain transaction hash of the send that delivered an ONRAMP to an `external_wallet` destination. Null until the crypto arrives, null when Conduit delivered the crypto by other means, and null on every other order.","nullable":true},"payout":{"type":"object","properties":{"state":{"description":"`not_sent`: no send is recorded. The send has not started yet, or it was refused at its start, for example by a restriction on the customer or on the destination address, and the crypto stays in the customer's wallet. Otherwise the status of the latest attempt.","type":"string","enum":["not_sent","processing","completed","failed"]},"attempts":{"type":"array","items":{"type":"object","properties":{"transactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"attempt":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"status":{"type":"string","enum":["pending","processing","completed","failed","cancelled"]},"failureCode":{"type":"string","enum":["user_signature_timeout","user_signature_expired","user_signature_declined","user_signature_rejected_by_provider","crypto_wallet_misconfigured","compliance_hold","compliance_review_rejected","compliance_rejected","returned_by_sender","rail_policy_rejected","insufficient_funds","insufficient_funds_at_settle","rail_unavailable","sender_info_timeout","travel_rule_rejected","provider_rejected","chain_broadcast_failed","roster_changed","insufficient_onchain_balance","source_account_unavailable","capability_suspended",null],"nullable":true},"txHash":{"type":"string","nullable":true}},"required":["transactionId","attempt","status","failureCode","txHash"]},"description":"Each send of the crypto to the auto-payout address, oldest first."},"resendable":{"type":"boolean","description":"True when the latest attempt failed with a code that moved no funds, so `POST /v2/portal/payouts/{id}/resend` with that attempt's `transactionId` can send it again."}},"required":["state","attempts","resendable"],"description":"The crypto auto-payout of an ONRAMP order into a customer wallet. Present when that order has succeeded."},"quoteOptionId":{"description":"Present when this order redeemed a POST /v2/quotes option — the id of the option it consumed.","type":"string","pattern":"^qop_[0-9A-Za-z]{22}$"},"replacesOrderId":{"description":"Present when Conduit created this order to honor an expired order at its original rate: the id of the expired order.","type":"string","pattern":"^ord_[0-9A-Za-z]{22}$"},"depositInstructions":{"minItems":1,"maxItems":1,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"Discriminator for this deposit block: send crypto to an on-chain address.","enum":["crypto_address"]},"address":{"type":"string","description":"Conduit-managed deposit address for funding this order."},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"],"description":"Blockchain network to send the funding deposit on. Sending on any other chain will not fund the order."},"asset":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code to send."},"expiresAt":{"type":"string","format":"date-time","description":"Funding deadline; the order is cancelled if unfunded by this time.","example":"2026-01-15T09:30:00.000Z"}},"required":["type","address","chain","asset","expiresAt"]},"description":"Where to send funds to fund this order. Exactly one `crypto_address` block."},"fundedBy":{"description":"Transfers that funded this order, with how much of each it draws. Present on the order detail read for an order funded at a Conduit funding address; omitted on the list read and on an order that names its own source.","type":"array","items":{"type":"object","properties":{"transactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"amount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["transactionId","amount"]}}},"required":["id","customerId","status","type","destination","sourceAsset","destinationAsset","lockSide","rate","fees","totalDebit","lockExpiresAt","createdAt","autoExecute","linkedTransactionIds","payoutTxHash"]},"SimulateOrderConversionFailedDtoClass":{"type":"object","properties":{"reason":{"description":"Optional free-text note. It does not appear on the order: `failureMessage` on the `order.failed` webhook and on `GET /v2/orders/:id` carries the standard text for the failure code, as in production.","type":"string","maxLength":500}},"additionalProperties":false},"SimulateTransactionTerminalDtoClass":{"type":"object","properties":{"outcome":{"type":"string","enum":["completed","failed"]},"utr":{"description":"Settlement reference (UTR / on-chain tx hash) attached to the synthetic transaction.completed event. Only meaningful when outcome is `completed`. Defaults to `sandbox-utr-<transactionId>` when omitted.","type":"string","minLength":1,"maxLength":120},"reason":{"description":"Free-text reason persisted as the transaction's failure / completion reason, which operators see. The client's `failureMessage` carries the standard text for the failure code, as in production. Defaults to a generic sandbox-driven sentinel when omitted.","type":"string","minLength":1,"maxLength":500}},"required":["outcome"],"additionalProperties":false},"SimulateTransactionReturnDtoClass":{"type":"object","properties":{"returnCode":{"description":"The return code the simulated bank sends. Pick a code that the payment's rail carries: an ACH return carries a Nacha code such as `R02` or `R03`; a Fedwire or SWIFT return carries an ISO 20022 code such as `AC04` or `AC01`, or no code. `returnReason` classifies either kind. The transaction's `returnCode` shows a Nacha code only, as in production, so an ISO 20022 code sets `returnReason` and leaves `returnCode` absent. Without a code, the return reads `returnReason: other`; send `{}`. When the transaction already has a bank return, send the same code or none; a different code answers 409.","type":"string","minLength":1,"maxLength":35}},"additionalProperties":false},"SimulateFiatDepositDtoClass":{"type":"object","properties":{"outcome":{"type":"string","enum":["completed","frozen","returned"]},"externalReference":{"type":"string","minLength":1,"maxLength":255},"detectedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat. Accepts uppercase or lowercase on input.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"rail":{"type":"string","enum":["ach","fedwire","rtp","fednow","swift","sepa","faster_payments","chaps","spei"]},"omitWireReferences":{"type":"boolean"},"senderInfo":{"type":"object","properties":{"name":{"type":"string"},"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"sortCode":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"country":{"type":"string"}}},"remittance":{"description":"The text the simulated sender writes on the payment. It reads as `remittance.reference` on the deposit transaction and its webhooks.","type":"object","properties":{"reference":{"type":"string","maxLength":140}},"additionalProperties":false}},"required":["assetAmount"],"additionalProperties":false},"SimulatedFiatDepositDto":{"type":"object","properties":{"externalReference":{"type":"string","description":"Payment reference the deposit is detected under — an opaque `sandbox_…` reference derived from your organization and the reference supplied on the request, or from the deposit details when it was omitted. Poll `GET /v2/transactions?externalReference=…` to observe the deposit."}},"required":["externalReference"],"example":{"externalReference":"sandbox_8c41e7b2905f3a6d17e40b9c2a5f8de3"}},"ClientRfiPaginatedResponseDto":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^rfi_[0-9A-Za-z]{22}$","description":"Identifier of the request for information."},"subjects":{"type":"array","items":{"type":"object","properties":{"subjectType":{"description":"What the request is about.","type":"string","enum":["customer","transaction","organization","application"]},"subjectId":{"type":"string","description":"Identifier of the subject. Its prefix follows `subjectType`: `cus_` for a customer, `txn_` for a transaction, `app_` for an application, `org_` for an organization."},"customerId":{"description":"The customer the transaction or application belongs to. Present when `subjectType` is `transaction`, or `application` for a customer's application.","type":"string","pattern":"^cus_[0-9A-Za-z]{22}$"}},"required":["subjectType","subjectId"]},"description":"What the request is about — one entry per subject."},"status":{"description":"Where the request stands. It stays open until every round is answered and a reviewer closes it.","type":"string","enum":["draft","open","responded","resolved","cancelled"]},"title":{"type":"string","description":"Short reviewer-written label summarising what is being asked."},"dueAt":{"description":"When the earliest unanswered round is due, when one carries a due date.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"publishedAt":{"type":"string","format":"date-time","description":"When the request was sent to you.","example":"2026-01-15T09:30:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"When the request record was created.","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"When the request last changed — a new round, a new answer, or a status change.","example":"2026-01-15T09:30:00.000Z"}},"required":["id","subjects","status","title","publishedAt","createdAt","updatedAt"]}},"meta":{"type":"object","properties":{"mode":{"type":"string","description":"Pagination mode","example":"cursor","enum":["cursor"]},"nextCursor":{"type":"string","description":"Cursor for the page after this one. Use it with `direction=forward`; it is `null` when no more rows follow. A backward page always carries one, so do not loop on it while `direction=backward`.","example":"eyJpZCI6ImN1c18yeFBxTjhSIn0","nullable":true},"previousCursor":{"type":"string","description":"Cursor for the page before this one. Use it with `direction=backward`. It is `null` on the first page of a forward walk and when no earlier rows remain.","example":null,"nullable":true},"total":{"type":"number","description":"Total number of records matching the query","example":42}},"required":["mode","nextCursor","previousCursor","total"]}},"required":["data","meta"]},"ClientRfiDetailDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^rfi_[0-9A-Za-z]{22}$","description":"Identifier of the request for information."},"subjects":{"type":"array","items":{"type":"object","properties":{"subjectType":{"description":"What the request is about.","type":"string","enum":["customer","transaction","organization","application"]},"subjectId":{"type":"string","description":"Identifier of the subject. Its prefix follows `subjectType`: `cus_` for a customer, `txn_` for a transaction, `app_` for an application, `org_` for an organization."},"customerId":{"description":"The customer the transaction or application belongs to. Present when `subjectType` is `transaction`, or `application` for a customer's application.","type":"string","pattern":"^cus_[0-9A-Za-z]{22}$"}},"required":["subjectType","subjectId"]},"description":"What the request is about — one entry per subject."},"status":{"description":"Where the request stands. It stays open until every round is answered and a reviewer closes it.","type":"string","enum":["draft","open","responded","resolved","cancelled"]},"title":{"type":"string","description":"Short reviewer-written label summarising what is being asked."},"dueAt":{"description":"When the earliest unanswered round is due, when one carries a due date.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"},"publishedAt":{"type":"string","format":"date-time","description":"When the request was sent to you.","example":"2026-01-15T09:30:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"When the request record was created.","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"When the request last changed — a new round, a new answer, or a status change.","example":"2026-01-15T09:30:00.000Z"},"summary":{"description":"Reviewer-written context for the request, when one was given.","type":"string"},"rounds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^rnd_[0-9A-Za-z]{22}$","description":"Identifier of this round."},"roundNumber":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Position of this round in the request, starting at 1. A reviewer opens a new round when the previous answer did not settle the question."},"status":{"description":"Whether this round is still awaiting an answer or has been closed by a reviewer.","type":"string","enum":["open","responded","closed"]},"ask":{"type":"string","description":"The question to answer, in the reviewer's own words. Show it to whoever prepares the reply, and answer it with `POST /v2/rfis/{rfiId}/responses`."},"dueAt":{"type":"string","format":"date-time","description":"When the answer is due. Passing it does not close the round by itself.","example":"2026-01-15T09:30:00.000Z"},"openedAt":{"type":"string","format":"date-time","description":"When this round started.","example":"2026-01-15T09:30:00.000Z"},"closedAt":{"description":"When a reviewer closed this round. Absent while it is open.","type":"string","format":"date-time","example":"2026-01-15T09:30:00.000Z"}},"required":["id","roundNumber","status","ask","dueAt","openedAt"]},"description":"Every round on this request, oldest first."},"responses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^rfr_[0-9A-Za-z]{22}$","description":"Identifier of this answer."},"roundId":{"type":"string","pattern":"^rnd_[0-9A-Za-z]{22}$","description":"The round this answer belongs to."},"message":{"type":"string","description":"The answer text as it was submitted, with invisible formatting characters removed."},"documentIds":{"type":"array","items":{"type":"string"},"description":"Documents attached to this answer, uploaded with `POST /v2/documents`. Each id has the form `doc_` followed by 22 alphanumeric characters."},"channel":{"description":"How the answer reached Conduit — through the API, or recorded by a reviewer who received it another way.","type":"string","enum":["portal","api"]},"submittedByEmail":{"type":"string","format":"email","description":"Email address of whoever submitted the answer."},"submittedByName":{"description":"Name of whoever submitted the answer, when one was given.","type":"string"},"createdAt":{"type":"string","format":"date-time","description":"When the answer was submitted.","example":"2026-01-15T09:30:00.000Z"}},"required":["id","roundId","message","documentIds","channel","submittedByEmail","createdAt"]},"description":"Every answer submitted so far, across all rounds."}},"required":["id","subjects","status","title","publishedAt","createdAt","updatedAt","rounds","responses"]},"PublicRespondRfiBodyDto":{"type":"object","properties":{"message":{"type":"string","minLength":1,"maxLength":10000},"documentIds":{"default":[],"maxItems":20,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"submittedBy":{"type":"object","properties":{"email":{"type":"string","format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"name":{"type":"string"}},"required":["email"]}},"required":["message","submittedBy"]},"SimulateOpenRfiBodyDto":{"type":"object","properties":{"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","description":"The customer the RFI asks about."},"title":{"description":"Short title of the RFI. Defaults to \"Request for information\".","type":"string","minLength":1,"maxLength":255},"ask":{"type":"string","minLength":1,"maxLength":10000,"description":"The question to ask, in your own words."},"dueAt":{"type":"string","format":"date-time","description":"When the answer is due. Defaults to 48 hours from now.","example":"2026-01-15T09:30:00.000Z"}},"required":["customerId","ask"],"additionalProperties":false},"SimulateResolveRfiBodyDto":{"type":"object","properties":{"resolutionSummary":{"type":"string","minLength":1,"maxLength":10000},"outcome":{"type":"string","enum":["approved","rejected"]}},"required":["outcome"],"additionalProperties":false},"SimulateMoreInfoRfiBodyDto":{"type":"object","properties":{"ask":{"type":"string","minLength":1,"maxLength":10000},"dueAt":{"type":"string","format":"date-time","description":"When the new round is due. Defaults to 7 days from now.","example":"2026-01-15T09:30:00.000Z"}},"required":["ask"],"additionalProperties":false},"DocumentPaginatedResponseDto":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$","description":"Unique document identifier"},"fileName":{"description":"Original file name as uploaded","example":"passport-scan.pdf","type":"string"},"mimeType":{"description":"MIME type of the uploaded file","example":"application/pdf","type":"string"},"name":{"description":"Human-readable label for the document","example":"John Doe Passport","type":"string"},"classifiedTypes":{"description":"Canonical document types assigned by the server-side classifier. Omitted until classification runs (asynchronously, after the document is attached to a submitted application); the type declared at upload is stored separately and does not populate this field.","type":"array","items":{"type":"string","enum":["BUSINESS_REGISTRATION","ARTICLES_OF_INCORPORATION","TAX_CERTIFICATE","OPERATING_LICENSE","REGULATORY_LICENSE","SHAREHOLDERS_REGISTRY","DIRECTORS_REGISTRY","AUTHORIZATION_TO_ACT","PROOF_OF_ADDRESS","CERTIFICATE_OF_GOOD_STANDING","FLOW_OF_FUNDS","AUDITED_FINANCIAL_STATEMENT","BANK_STATEMENT","ORG_STRUCTURE_CHART","AML_AUDIT","COMPLIANCE_POLICY","INSTITUTIONAL_INVESTOR_DOCUMENTATION","IRS_W8BEN_E","IRS_W8BEN","IRS_W9","IDENTITY_VERIFICATION","IDENTITY_VERIFICATION_ATTESTATION","EDD_EVIDENCE","BANK_VERIFICATION_LETTER","INVOICE","CONTRACT","PAYROLL_REGISTER","INVESTMENT_AGREEMENT","OTHER","SELFIE"]}},"eddEvidenceKind":{"description":"Which kind of enhanced due diligence evidence the uploader declared, for a document uploaded with `type=EDD_EVIDENCE`. Omitted for any other document.","type":"string","enum":["payslip_or_employment_letter","tax_return","sale_of_asset_or_inheritance","bank_statement"]},"classificationStatus":{"description":"Server-side classifier lifecycle: `pending` (not yet run), `completed` (a verdict was produced — the type set may be empty), or `failed` (the classifier could not complete: the file may be unreadable, or a transient vendor/network error was exhausted). Transient failures are re-attempted on the next review run; a persistent `failed` warrants re-uploading a clearer file. A document that is never submitted with an application stays `pending`, a payout or order supporting document included.","type":"string","enum":["pending","completed","failed"]},"purpose":{"description":"What the document was uploaded for, as declared by the uploader. Omitted when the upload declared none. Only a `transaction_support` document can be attached to a payout or an order.","type":"string","enum":["organization_onboarding","kyc","feature_request","transaction_support","rfi_response"]},"fileSize":{"description":"Size in bytes. Omitted for documents uploaded before size capture was added.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the document was uploaded","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp when the document was last updated","example":"2026-01-15T09:30:00.000Z"}},"required":["id","classificationStatus","createdAt","updatedAt"]}},"meta":{"type":"object","properties":{"mode":{"type":"string","description":"Pagination mode","example":"cursor","enum":["cursor"]},"nextCursor":{"type":"string","description":"Cursor for the page after this one. Use it with `direction=forward`; it is `null` when no more rows follow. A backward page always carries one, so do not loop on it while `direction=backward`.","example":"eyJpZCI6ImN1c18yeFBxTjhSIn0","nullable":true},"previousCursor":{"type":"string","description":"Cursor for the page before this one. Use it with `direction=backward`. It is `null` on the first page of a forward walk and when no earlier rows remain.","example":null,"nullable":true},"total":{"type":"number","description":"Total number of records matching the query","example":42}},"required":["mode","nextCursor","previousCursor","total"]}},"required":["data","meta"]},"DocumentResponseDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$","description":"Unique document identifier"},"fileName":{"description":"Original file name as uploaded","example":"passport-scan.pdf","type":"string"},"mimeType":{"description":"MIME type of the uploaded file","example":"application/pdf","type":"string"},"name":{"description":"Human-readable label for the document","example":"John Doe Passport","type":"string"},"classifiedTypes":{"description":"Canonical document types assigned by the server-side classifier. Omitted until classification runs (asynchronously, after the document is attached to a submitted application); the type declared at upload is stored separately and does not populate this field.","type":"array","items":{"type":"string","enum":["BUSINESS_REGISTRATION","ARTICLES_OF_INCORPORATION","TAX_CERTIFICATE","OPERATING_LICENSE","REGULATORY_LICENSE","SHAREHOLDERS_REGISTRY","DIRECTORS_REGISTRY","AUTHORIZATION_TO_ACT","PROOF_OF_ADDRESS","CERTIFICATE_OF_GOOD_STANDING","FLOW_OF_FUNDS","AUDITED_FINANCIAL_STATEMENT","BANK_STATEMENT","ORG_STRUCTURE_CHART","AML_AUDIT","COMPLIANCE_POLICY","INSTITUTIONAL_INVESTOR_DOCUMENTATION","IRS_W8BEN_E","IRS_W8BEN","IRS_W9","IDENTITY_VERIFICATION","IDENTITY_VERIFICATION_ATTESTATION","EDD_EVIDENCE","BANK_VERIFICATION_LETTER","INVOICE","CONTRACT","PAYROLL_REGISTER","INVESTMENT_AGREEMENT","OTHER","SELFIE"]}},"eddEvidenceKind":{"description":"Which kind of enhanced due diligence evidence the uploader declared, for a document uploaded with `type=EDD_EVIDENCE`. Omitted for any other document.","type":"string","enum":["payslip_or_employment_letter","tax_return","sale_of_asset_or_inheritance","bank_statement"]},"classificationStatus":{"description":"Server-side classifier lifecycle: `pending` (not yet run), `completed` (a verdict was produced — the type set may be empty), or `failed` (the classifier could not complete: the file may be unreadable, or a transient vendor/network error was exhausted). Transient failures are re-attempted on the next review run; a persistent `failed` warrants re-uploading a clearer file. A document that is never submitted with an application stays `pending`, a payout or order supporting document included.","type":"string","enum":["pending","completed","failed"]},"purpose":{"description":"What the document was uploaded for, as declared by the uploader. Omitted when the upload declared none. Only a `transaction_support` document can be attached to a payout or an order.","type":"string","enum":["organization_onboarding","kyc","feature_request","transaction_support","rfi_response"]},"fileSize":{"description":"Size in bytes. Omitted for documents uploaded before size capture was added.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the document was uploaded","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp when the document was last updated","example":"2026-01-15T09:30:00.000Z"}},"required":["id","classificationStatus","createdAt","updatedAt"]},"DocumentDownloadResponseDto":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Presigned download URL for the document"},"expiresAt":{"type":"string","format":"date-time","description":"Timestamp when the presigned URL expires","example":"2026-01-15T09:30:00.000Z"}},"required":["url","expiresAt"]},"DocumentCreateResponseDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$","description":"Unique document identifier"},"fileName":{"description":"Original file name as uploaded","example":"passport-scan.pdf","type":"string"},"mimeType":{"description":"MIME type of the uploaded file","example":"application/pdf","type":"string"},"name":{"description":"Human-readable label for the document","example":"John Doe Passport","type":"string"},"classifiedTypes":{"description":"Canonical document types assigned by the server-side classifier. Omitted until classification runs (asynchronously, after the document is attached to a submitted application); the type declared at upload is stored separately and does not populate this field.","type":"array","items":{"type":"string","enum":["BUSINESS_REGISTRATION","ARTICLES_OF_INCORPORATION","TAX_CERTIFICATE","OPERATING_LICENSE","REGULATORY_LICENSE","SHAREHOLDERS_REGISTRY","DIRECTORS_REGISTRY","AUTHORIZATION_TO_ACT","PROOF_OF_ADDRESS","CERTIFICATE_OF_GOOD_STANDING","FLOW_OF_FUNDS","AUDITED_FINANCIAL_STATEMENT","BANK_STATEMENT","ORG_STRUCTURE_CHART","AML_AUDIT","COMPLIANCE_POLICY","INSTITUTIONAL_INVESTOR_DOCUMENTATION","IRS_W8BEN_E","IRS_W8BEN","IRS_W9","IDENTITY_VERIFICATION","IDENTITY_VERIFICATION_ATTESTATION","EDD_EVIDENCE","BANK_VERIFICATION_LETTER","INVOICE","CONTRACT","PAYROLL_REGISTER","INVESTMENT_AGREEMENT","OTHER","SELFIE"]}},"eddEvidenceKind":{"description":"Which kind of enhanced due diligence evidence the uploader declared, for a document uploaded with `type=EDD_EVIDENCE`. Omitted for any other document.","type":"string","enum":["payslip_or_employment_letter","tax_return","sale_of_asset_or_inheritance","bank_statement"]},"classificationStatus":{"description":"Server-side classifier lifecycle: `pending` (not yet run), `completed` (a verdict was produced — the type set may be empty), or `failed` (the classifier could not complete: the file may be unreadable, or a transient vendor/network error was exhausted). Transient failures are re-attempted on the next review run; a persistent `failed` warrants re-uploading a clearer file. A document that is never submitted with an application stays `pending`, a payout or order supporting document included.","type":"string","enum":["pending","completed","failed"]},"purpose":{"description":"What the document was uploaded for, as declared by the uploader. Omitted when the upload declared none. Only a `transaction_support` document can be attached to a payout or an order.","type":"string","enum":["organization_onboarding","kyc","feature_request","transaction_support","rfi_response"]},"fileSize":{"description":"Size in bytes. Omitted for documents uploaded before size capture was added.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the document was uploaded","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp when the document was last updated","example":"2026-01-15T09:30:00.000Z"}},"required":["id","classificationStatus","createdAt","updatedAt"]},"PayeeCheckRequestDto":{"type":"object","properties":{"destination":{"description":"The fiat destination exactly as you will send it on `POST /v2/payouts`. Only a `uk_domestic` recipient is checked today; any other recipient answers `unavailable`.","oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["fedwire"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["fiat"]}},"required":["rail","type"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["rtp"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["fiat"]}},"required":["rail","type"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["fednow"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["fiat"]}},"required":["rail","type"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["ach"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["fiat"]}},"required":["rail","type"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["ach_same_day"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["fiat"]}},"required":["rail","type"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"description":"Bank account number, for a bank in a country without IBAN. Required unless iban is sent.","type":"string","minLength":4,"maxLength":64},"iban":{"description":"IBAN (mod-97 checksum-validated; spacing and case normalized). Required unless accountNumber is sent.","type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it, and the bank name if absent, from `bic`; the request is refused if the BIC is not in the SWIFT bank directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bic","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"description":"Bank account number, for a bank in a country without IBAN. Required unless iban is sent.","type":"string","minLength":4,"maxLength":64},"iban":{"description":"IBAN (mod-97 checksum-validated; spacing and case normalized). Required unless accountNumber is sent.","type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it, and the bank name if absent, from `bic`; the request is refused if the BIC is not in the SWIFT bank directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bic","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["fiat"]}},"required":["rail","type"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"recipient":{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["iban","bic","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["iban","bic","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["fiat"]}},"required":["rail","type"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["faster_payments"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["fiat"]}},"required":["rail","type"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["chaps"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["fiat"]}},"required":["rail","type"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"recipient":{"oneOf":[{"type":"object","properties":{"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string","minLength":1,"maxLength":77}},"required":["type","value"],"additionalProperties":false},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["pixKey","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string","minLength":1,"maxLength":77}},"required":["type","value"],"additionalProperties":false},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["pixKey","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["fiat"]}},"required":["rail","type"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["ted"]},"recipient":{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["fiat"]}},"required":["rail","type"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["nibss"]},"recipient":{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankName","accountNumber","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankName","accountNumber","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["fiat"]}},"required":["rail","type"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["spei"]},"recipient":{"oneOf":[{"type":"object","properties":{"clabe":{"type":"string"},"taxId":{"description":"The recipient's RFC, or the CURP of an individual. Optional.","type":"string"},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["clabe","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"clabe":{"type":"string"},"taxId":{"description":"The recipient's RFC, or the CURP of an individual. Optional.","type":"string"},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["clabe","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["fiat"]}},"required":["rail","type"],"additionalProperties":false}]}},"additionalProperties":false},"PayeeCheckResponseDto":{"type":"object","properties":{"result":{"description":"`match`: the name matches the account. `close_match`: the details are close to an account, but not an exact match. `no_match`: the details match no account under this name. `unavailable`: the payee's bank gave no answer, or the destination has no name check, so nothing is known.","type":"string","enum":["match","close_match","no_match","unavailable"]}},"required":["result"]},"UsWhitelistRecipientDto":{"type":"object","properties":{"rail":{"type":"string","description":"US domestic bank recipient, identified by ABA routing + account number.","enum":["us"]},"routingNumber":{"type":"string","description":"ABA routing number (9 digits, checksum-validated)."},"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$","description":"US bank account number."},"relationship":{"type":"string","enum":["self","group_entity"],"description":"Relationship between the customer and the recipient: `self` (the customer's own account) or `group_entity` (another entity in the customer's corporate group)."},"legalName":{"type":"string","maxLength":255,"description":"Legal name of the account holder, or of the entity that controls the registered address."},"evidenceDocumentIds":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"},"description":"Ids of previously uploaded documents (`doc_*`) evidencing the intercompany relationship (e.g. ownership chart, bank statement). At least one is required."},"label":{"description":"Optional human-readable label.","type":"string","maxLength":140}},"required":["rail","routingNumber","accountNumber","relationship","legalName","evidenceDocumentIds"],"additionalProperties":false},"SwiftWhitelistRecipientDto":{"type":"object","properties":{"rail":{"type":"string","description":"International bank recipient, identified by BIC plus IBAN or account number.","enum":["swift"]},"bic":{"type":"string","description":"BIC of the recipient bank (ISO 9362)."},"iban":{"description":"IBAN (mod-97 checksum-validated; spacing and case normalized). Required unless accountNumber is provided.","type":"string"},"accountNumber":{"description":"Bank account number, for banks in countries without IBAN. Required unless iban is provided.","type":"string","minLength":4,"maxLength":64},"relationship":{"type":"string","enum":["self","group_entity"],"description":"Relationship between the customer and the recipient: `self` (the customer's own account) or `group_entity` (another entity in the customer's corporate group)."},"legalName":{"type":"string","maxLength":255,"description":"Legal name of the account holder, or of the entity that controls the registered address."},"evidenceDocumentIds":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"},"description":"Ids of previously uploaded documents (`doc_*`) evidencing the intercompany relationship (e.g. ownership chart, bank statement). At least one is required."},"label":{"description":"Optional human-readable label.","type":"string","maxLength":140}},"required":["rail","bic","relationship","legalName","evidenceDocumentIds"],"anyOf":[{"required":["iban"]},{"required":["accountNumber"]}],"additionalProperties":false},"SepaWhitelistRecipientDto":{"type":"object","properties":{"rail":{"type":"string","description":"Euro-area bank recipient, identified by IBAN alone.","enum":["sepa"]},"iban":{"description":"IBAN (mod-97 checksum-validated; spacing and case normalized).","type":"string"},"relationship":{"type":"string","enum":["self","group_entity"],"description":"Relationship between the customer and the recipient: `self` (the customer's own account) or `group_entity` (another entity in the customer's corporate group)."},"legalName":{"type":"string","maxLength":255,"description":"Legal name of the account holder, or of the entity that controls the registered address."},"evidenceDocumentIds":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"},"description":"Ids of previously uploaded documents (`doc_*`) evidencing the intercompany relationship (e.g. ownership chart, bank statement). At least one is required."},"label":{"description":"Optional human-readable label.","type":"string","maxLength":140}},"required":["rail","iban","relationship","legalName","evidenceDocumentIds"],"additionalProperties":false},"UkDomesticWhitelistRecipientDto":{"type":"object","properties":{"rail":{"type":"string","description":"UK domestic bank recipient, identified by sort code plus account number. Covers Faster Payments and CHAPS.","enum":["uk_domestic"]},"sortCode":{"description":"UK sort code (6 digits; separators are stripped).","type":"string"},"accountNumber":{"description":"UK bank account number (8 digits).","type":"string"},"relationship":{"type":"string","enum":["self","group_entity"],"description":"Relationship between the customer and the recipient: `self` (the customer's own account) or `group_entity` (another entity in the customer's corporate group)."},"legalName":{"type":"string","maxLength":255,"description":"Legal name of the account holder, or of the entity that controls the registered address."},"evidenceDocumentIds":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"},"description":"Ids of previously uploaded documents (`doc_*`) evidencing the intercompany relationship (e.g. ownership chart, bank statement). At least one is required."},"label":{"description":"Optional human-readable label.","type":"string","maxLength":140}},"required":["rail","sortCode","accountNumber","relationship","legalName","evidenceDocumentIds"],"additionalProperties":false},"PixWhitelistRecipientDto":{"type":"object","properties":{"rail":{"type":"string","description":"Brazilian recipient, identified by its PIX key.","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string","minLength":1,"maxLength":77}},"required":["type","value"],"additionalProperties":false,"description":"PIX key of the account: `type` is `cpf`, `cnpj`, `email`, `phone` or `random`, and `value` is the key in that type's format."},"relationship":{"type":"string","enum":["self","group_entity"],"description":"Relationship between the customer and the recipient: `self` (the customer's own account) or `group_entity` (another entity in the customer's corporate group)."},"legalName":{"type":"string","maxLength":255,"description":"Legal name of the account holder, or of the entity that controls the registered address."},"evidenceDocumentIds":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"},"description":"Ids of previously uploaded documents (`doc_*`) evidencing the intercompany relationship (e.g. ownership chart, bank statement). At least one is required."},"label":{"description":"Optional human-readable label.","type":"string","maxLength":140}},"required":["rail","pixKey","relationship","legalName","evidenceDocumentIds"],"additionalProperties":false},"BrazilDomesticWhitelistRecipientDto":{"type":"object","properties":{"rail":{"type":"string","description":"Brazilian bank recipient, identified by bank code, branch and account number.","enum":["br_domestic"]},"bankCode":{"description":"Brazilian bank code (3 digits).","type":"string"},"branch":{"description":"Branch number (4 digits).","type":"string"},"accountNumber":{"description":"Account number with its check digit (spaces and dashes are stripped).","type":"string"},"relationship":{"type":"string","enum":["self","group_entity"],"description":"Relationship between the customer and the recipient: `self` (the customer's own account) or `group_entity` (another entity in the customer's corporate group)."},"legalName":{"type":"string","maxLength":255,"description":"Legal name of the account holder, or of the entity that controls the registered address."},"evidenceDocumentIds":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"},"description":"Ids of previously uploaded documents (`doc_*`) evidencing the intercompany relationship (e.g. ownership chart, bank statement). At least one is required."},"label":{"description":"Optional human-readable label.","type":"string","maxLength":140}},"required":["rail","bankCode","branch","accountNumber","relationship","legalName","evidenceDocumentIds"],"additionalProperties":false},"MxDomesticWhitelistRecipientDto":{"type":"object","properties":{"rail":{"type":"string","description":"Mexican bank recipient, identified by its CLABE alone.","enum":["mx_domestic"]},"clabe":{"description":"CLABE of the account (18 digits, check digit validated; spaces and dashes are stripped).","type":"string"},"relationship":{"type":"string","enum":["self","group_entity"],"description":"Relationship between the customer and the recipient: `self` (the customer's own account) or `group_entity` (another entity in the customer's corporate group)."},"legalName":{"type":"string","maxLength":255,"description":"Legal name of the account holder, or of the entity that controls the registered address."},"evidenceDocumentIds":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"},"description":"Ids of previously uploaded documents (`doc_*`) evidencing the intercompany relationship (e.g. ownership chart, bank statement). At least one is required."},"label":{"description":"Optional human-readable label.","type":"string","maxLength":140}},"required":["rail","clabe","relationship","legalName","evidenceDocumentIds"],"additionalProperties":false},"CryptoWhitelistRecipientDto":{"type":"object","properties":{"rail":{"type":"string","description":"Crypto recipient, identified by chain plus on-chain address. Only a `group_entity` relationship is accepted.","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"],"description":"Blockchain network of the address. Lowercase on the wire (e.g. `ethereum`, `base`)."},"address":{"type":"string","minLength":1,"maxLength":255,"description":"On-chain address of the group entity's wallet, in the encoding its chain uses. EVM chains take a `0x` hex address and reject a mixed-case value whose EIP-55 checksum does not match; `solana` takes a base58 public key; `tron` a base58 address whose base58check checksum must match; `stellar` a `G`-prefixed key whose checksum must match."},"relationship":{"type":"string","enum":["self","group_entity"],"description":"Relationship between the customer and the recipient: `self` (the customer's own account) or `group_entity` (another entity in the customer's corporate group)."},"legalName":{"type":"string","maxLength":255,"description":"Legal name of the account holder, or of the entity that controls the registered address."},"evidenceDocumentIds":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"},"description":"Ids of previously uploaded documents (`doc_*`) evidencing the intercompany relationship (e.g. ownership chart, bank statement). At least one is required."},"label":{"description":"Optional human-readable label.","type":"string","maxLength":140}},"required":["rail","chain","address","relationship","legalName","evidenceDocumentIds"],"additionalProperties":false},"WhitelistRecipientResponseDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^wlr_[0-9A-Za-z]{22}$","description":"Id of the whitelist recipient. Each id has the form `wlr_` followed by 22 alphanumeric characters."},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","description":"Customer the recipient is registered against. Each id has the form `cus_` followed by 22 alphanumeric characters."},"rail":{"type":"string","enum":["us","swift","sepa","uk_domestic","pix","br_domestic","ng_domestic","mx_domestic","crypto"],"description":"How the recipient is identified. `us`: ABA routing number plus account number. `swift`: BIC plus an IBAN, or plus an account number for banks in countries without IBAN. `sepa`: IBAN alone. `uk_domestic`: sort code plus account number. `pix`: PIX key alone. `br_domestic`: bank code, branch and account number. `ng_domestic`: bank name and account number. `mx_domestic`: CLABE alone. `crypto`: chain plus on-chain address, and every bank field is null. Switch on the value rather than assuming the set is closed."},"accountNumber":{"type":"string","description":"Bank account number, normalized (spaces and dashes stripped) — `us`, `uk_domestic`, `br_domestic`, `ng_domestic`, the 18-digit CLABE on `mx_domestic`, or `swift` recipients registered by BIC + account number. Null for IBAN-registered recipients, on `pix` and on `crypto`.","nullable":true},"bankCode":{"type":"string","description":"Brazilian bank code (3 digits), for `br_domestic` recipients. Null otherwise.","nullable":true},"branch":{"type":"string","description":"Branch number (4 digits), for `br_domestic` recipients. Null otherwise.","nullable":true},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"],"description":"PIX key with its type, for `pix` recipients. Null otherwise.","nullable":true},"routingNumber":{"type":"string","description":"ABA routing number, for `us` recipients. Null on every other rail.","nullable":true},"sortCode":{"type":"string","description":"UK sort code (6 digits), for `uk_domestic` recipients. Null otherwise.","nullable":true},"bic":{"type":"string","description":"BIC of the recipient bank (canonicalized to the 11-character form), for `swift` recipients registered by BIC + account number. Null on every other rail — for IBAN-registered recipients the IBAN alone is the matched identity, so supply the bank's BIC yourself when creating a payout.","nullable":true},"iban":{"type":"string","description":"IBAN, normalized (spacing and case), for `sepa` and IBAN-registered `swift` recipients. Null otherwise.","nullable":true},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"description":"Blockchain network of the registered address, for a `crypto` recipient. Null on every bank rail.","nullable":true},"address":{"type":"string","description":"On-chain destination address as submitted, trimmed, for a `crypto` recipient. Matching is case-insensitive where the chain is, so compare through your own normalization rather than by string equality. Null on every bank rail.","nullable":true},"legalName":{"type":"string","description":"Legal name of the account holder, or of the entity that controls the registered address."},"relationship":{"description":"Relationship between the customer and the recipient: `self` (the customer's own account) or `group_entity` (another entity in the customer's corporate group).","type":"string","enum":["self","group_entity"]},"status":{"description":"`pending_review`: submitted and awaiting review. `registered`: approved, so a payout with `purpose: intercompany` may target this account, and so may a payout with `purpose: personal_transfer_of_funds` when `relationship` is `self`. `rejected`: declined, with the detail in `rejectionReason`; register again with corrected details to start a new review. `suspended`: blocked for now, so new payouts to it are refused. `revoked`: cancelled, and terminal. Outcomes arrive on the `whitelist_recipient.*` webhooks — listen for those rather than polling.","type":"string","enum":["pending_review","registered","suspended","revoked","rejected"]},"evidenceDocumentIds":{"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"},"description":"Documents given at registration to evidence the relationship. Each id has the form `doc_` followed by 22 alphanumeric characters."},"label":{"type":"string","description":"Human-readable label given at registration. Null when none was given.","nullable":true},"rejectionReason":{"type":"string","description":"Free text from the reviewer explaining why the registration was declined. Set when `status` is `rejected`, null otherwise. Written for a person to read, so do not branch on it.","nullable":true},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"}},"required":["id","customerId","rail","accountNumber","bankCode","branch","pixKey","routingNumber","sortCode","bic","iban","chain","address","legalName","relationship","status","evidenceDocumentIds","label","rejectionReason","createdAt","updatedAt"]},"WhitelistRecipientListResponseDto":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^wlr_[0-9A-Za-z]{22}$","description":"Id of the whitelist recipient. Each id has the form `wlr_` followed by 22 alphanumeric characters."},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","description":"Customer the recipient is registered against. Each id has the form `cus_` followed by 22 alphanumeric characters."},"rail":{"type":"string","enum":["us","swift","sepa","uk_domestic","pix","br_domestic","ng_domestic","mx_domestic","crypto"],"description":"How the recipient is identified. `us`: ABA routing number plus account number. `swift`: BIC plus an IBAN, or plus an account number for banks in countries without IBAN. `sepa`: IBAN alone. `uk_domestic`: sort code plus account number. `pix`: PIX key alone. `br_domestic`: bank code, branch and account number. `ng_domestic`: bank name and account number. `mx_domestic`: CLABE alone. `crypto`: chain plus on-chain address, and every bank field is null. Switch on the value rather than assuming the set is closed."},"accountNumber":{"type":"string","description":"Bank account number, normalized (spaces and dashes stripped) — `us`, `uk_domestic`, `br_domestic`, `ng_domestic`, the 18-digit CLABE on `mx_domestic`, or `swift` recipients registered by BIC + account number. Null for IBAN-registered recipients, on `pix` and on `crypto`.","nullable":true},"bankCode":{"type":"string","description":"Brazilian bank code (3 digits), for `br_domestic` recipients. Null otherwise.","nullable":true},"branch":{"type":"string","description":"Branch number (4 digits), for `br_domestic` recipients. Null otherwise.","nullable":true},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"],"description":"PIX key with its type, for `pix` recipients. Null otherwise.","nullable":true},"routingNumber":{"type":"string","description":"ABA routing number, for `us` recipients. Null on every other rail.","nullable":true},"sortCode":{"type":"string","description":"UK sort code (6 digits), for `uk_domestic` recipients. Null otherwise.","nullable":true},"bic":{"type":"string","description":"BIC of the recipient bank (canonicalized to the 11-character form), for `swift` recipients registered by BIC + account number. Null on every other rail — for IBAN-registered recipients the IBAN alone is the matched identity, so supply the bank's BIC yourself when creating a payout.","nullable":true},"iban":{"type":"string","description":"IBAN, normalized (spacing and case), for `sepa` and IBAN-registered `swift` recipients. Null otherwise.","nullable":true},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"description":"Blockchain network of the registered address, for a `crypto` recipient. Null on every bank rail.","nullable":true},"address":{"type":"string","description":"On-chain destination address as submitted, trimmed, for a `crypto` recipient. Matching is case-insensitive where the chain is, so compare through your own normalization rather than by string equality. Null on every bank rail.","nullable":true},"legalName":{"type":"string","description":"Legal name of the account holder, or of the entity that controls the registered address."},"relationship":{"description":"Relationship between the customer and the recipient: `self` (the customer's own account) or `group_entity` (another entity in the customer's corporate group).","type":"string","enum":["self","group_entity"]},"status":{"description":"`pending_review`: submitted and awaiting review. `registered`: approved, so a payout with `purpose: intercompany` may target this account, and so may a payout with `purpose: personal_transfer_of_funds` when `relationship` is `self`. `rejected`: declined, with the detail in `rejectionReason`; register again with corrected details to start a new review. `suspended`: blocked for now, so new payouts to it are refused. `revoked`: cancelled, and terminal. Outcomes arrive on the `whitelist_recipient.*` webhooks — listen for those rather than polling.","type":"string","enum":["pending_review","registered","suspended","revoked","rejected"]},"evidenceDocumentIds":{"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"},"description":"Documents given at registration to evidence the relationship. Each id has the form `doc_` followed by 22 alphanumeric characters."},"label":{"type":"string","description":"Human-readable label given at registration. Null when none was given.","nullable":true},"rejectionReason":{"type":"string","description":"Free text from the reviewer explaining why the registration was declined. Set when `status` is `rejected`, null otherwise. Written for a person to read, so do not branch on it.","nullable":true},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"}},"required":["id","customerId","rail","accountNumber","bankCode","branch","pixKey","routingNumber","sortCode","bic","iban","chain","address","legalName","relationship","status","evidenceDocumentIds","label","rejectionReason","createdAt","updatedAt"]}},"meta":{"type":"object","properties":{"mode":{"type":"string","description":"Pagination mode","example":"cursor","enum":["cursor"]},"nextCursor":{"type":"string","description":"Cursor for the page after this one. Use it with `direction=forward`; it is `null` when no more rows follow. A backward page always carries one, so do not loop on it while `direction=backward`.","example":"eyJpZCI6ImN1c18yeFBxTjhSIn0","nullable":true},"previousCursor":{"type":"string","description":"Cursor for the page before this one. Use it with `direction=backward`. It is `null` on the first page of a forward walk and when no earlier rows remain.","example":null,"nullable":true},"total":{"type":"number","description":"Total number of records matching the query","example":42}},"required":["mode","nextCursor","previousCursor","total"]}},"required":["data","meta"]},"OrderExternalListResponseDto":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^ord_[0-9A-Za-z]{22}$"},"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","nullable":true},"clientReferenceId":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces."},"status":{"type":"string","enum":["pending","succeeded","failed","cancelled"]},"type":{"type":"string","enum":["onramp","offramp","conversion","fiat_conversion"]},"source":{"description":"The funding resource, when the order named one. Omitted entirely on a deposit-funded order (created without a `source`): the funding wallet is Conduit-managed infrastructure with no client-resolvable id, and `depositInstructions` carries the address to fund at instead. The presence of `depositInstructions` is the discriminator.","oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"id":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"}},"required":["type","id"]},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"id":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"}},"required":["type","id"]}]},"destination":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"id":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"}},"required":["type","id"]},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"id":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"}},"required":["type","id"]},{"type":"object","properties":{"type":{"type":"string","enum":["external_wallet"]},"recipient":{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"]},"purposeDescription":{"type":"string"},"documents":{"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["type","recipient","purpose"]},{"type":"object","properties":{"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"]},"purposeDescription":{"type":"string"},"documents":{"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markup":{"description":"The margin you declared on this leg, echoed back. The leg spends this order's converted output, so the margin is taken out of it: the recipient receives destinationAsset.amount less this margin and less Conduit's own payout fee. It is separate from the conversion's own markup block, and it accrues to you when the payout succeeds.","type":"object","properties":{"bps":{"type":"number"},"flatAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}}},"type":{"type":"string","enum":["external_bank"]}},"required":["recipient","type"]}]},"sourceAsset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"destinationAsset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"lockSide":{"description":"Which side the order's `amount` fixed. `source`: the customer pays exactly that amount, so `totalDebit` equals it and fees come out of the amount that converts. `destination`: the recipient receives exactly that amount, and fees are added on top in `totalDebit`.","type":"string","enum":["source","destination"]},"autoPayout":{"type":"object","properties":{"recipient":{"oneOf":[{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["us"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","routingNumber","accountType","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["swift"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["bic","bankAddress","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["sepa"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["iban","bic","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","firstName","lastName","postalAddress"]},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["uk_domestic"]},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false}},"required":["accountNumber","sortCode","rail","type","legalName","postalAddress"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string"}},"required":["type","value"]},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","pixKey","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"rail":{"type":"string","enum":["br_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"rail":{"type":"string","enum":["ng_domestic"]},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["bankName","accountNumber","rail","postalAddress","type","legalName"]}]},{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"}},"required":["rail","clabe","postalAddress","type","firstName","lastName"]},{"type":"object","properties":{"rail":{"type":"string","enum":["mx_domestic"]},"clabe":{"type":"string"},"taxId":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"}},"required":["rail","clabe","postalAddress","type","legalName"]}]},{"type":"object","properties":{"rail":{"type":"string","enum":["crypto"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"legalName":{"type":"string"},"dateOfBirth":{"type":"string"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string"}},"required":["rail","chain","address","attestation"]}]},"rail":{"description":"The payment network the payout was created with, as sent on the request's `rail`. `recipient.rail` names the account family the coordinates belong to (`us`, `swift`, `sepa`, `uk_domestic`, `pix`, `br_domestic`, `ng_domestic`, `mx_domestic`), not the network.","type":"string","enum":["fedwire","rtp","fednow","ach","ach_same_day","swift","sepa","faster_payments","chaps","pix","ted","nibss","spei"]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"]},"purposeDescription":{"type":"string"},"documents":{"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markup":{"description":"The margin you declared on this leg, echoed back. The leg spends this order's converted output, so the margin is taken out of it: the recipient receives destinationAsset.amount less this margin and less Conduit's own payout fee. It is separate from the conversion's own markup block, and it accrues to you when the payout succeeds.","type":"object","properties":{"bps":{"type":"number"},"flatAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}}}},"required":["recipient"],"description":"AutoPayout payload, echoing what the order was created with. Crypto recipients omit `rail`/`ach`/`swift`/`instant`/`remittance` and may carry `memo`; fiat recipients carry `rail` and the matching per-rail context block."},"rate":{"type":"object","properties":{"referenceRate":{"type":"string","description":"Market reference rate at quote time"},"totalSpreadBps":{"type":"string","description":"Combined spread (FX markup + take rate, plus your own markupBps when the order or the quote declared one) in basis points, as a string with up to two decimal places. When Conduit invoices its conversion fee to you monthly, the take rate is not in this spread"},"endUserRate":{"type":"string","description":"Effective rate the customer is transacting at"}},"required":["referenceRate","totalSpreadBps","endUserRate"]},"fees":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["fixed"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"owner":{"type":"string","enum":["conduit","you"],"description":"Who this charge belongs to. `conduit` is Conduit's own fee. `you` is a flat margin you declared with markupAmount, which Conduit collects from your customer and accrues to you; it is your revenue, not a Conduit charge."}},"required":["type","assetAmount","owner"]}},"markup":{"type":"object","properties":{"bps":{"description":"The percentage margin you declared on this order, in basis points. Absent when you declared only a flat amount.","type":"number"},"flatAmount":{"description":"The flat margin you declared on this order, in its source asset. Absent when you declared only a percentage.","type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false,"description":"The total amount accrued to you for the conversion, in the order's source asset: the percentage part plus the flat part. On an offramp that an external conversion provider settles, in the destination asset, because the margin is taken from the provider's payout."}},"required":["assetAmount"],"description":"Present on an order carrying a margin which comes to at least one minor unit of the source asset — one the order declared, or one it inherited from the quote option it redeemed. On an offramp that an external conversion provider settles, present when the margin taken from the payout comes to at least one minor unit of the destination asset. `assetAmount` is the total accrued to you, fixed at quote time. The two shapes reach the customer differently: the markupBps part is folded into the quoted rate, so it never appears in fees[] and does not move totalDebit, while the markupAmount part is a line item in fees[] owned by you and it does move totalDebit. On an offramp that an external conversion provider settles, the deposit of the provider's payout, listed in linkedTransactionIds, carries the whole margin as one fees[] line owned by you, in the destination asset."},"totalDebit":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false,"description":"Total the customer pays in the source asset: `sourceAsset.amount` plus every entry in `fees`. On a `source`-locked order it equals the locked `amount`; on a `destination`-locked order it is the principal plus fees. A `markupAmount` that the order declares when it redeems a `quoteOptionId` adds to it on both lock sides. Fund the source, or the deposit address, with this amount."},"lockExpiresAt":{"type":"string","format":"date-time","description":"Deadline for execution to begin, not merely for the source to be funded. If execution hasn't been claimed by this time, the order transitions to `status: cancelled` with `cancellationReason: 'expired'` and can no longer execute — funding the source after this timestamp does not revive it. Create a new order to get a fresh rate lock. An order with a named `source` holds its rate for 2 hours from creation, including an order that redeems a quote option. A deposit-funded order has no source, and this is its funding deadline.","example":"2026-01-15T09:30:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"autoExecute":{"type":"boolean","description":"Echoes the create-time value. When true, Conduit automatically claims execution once the available source balance covers totalDebit (principal plus fees), with no client action required — orders sharing the same source resource execute oldest-first, so a still-underfunded older order can delay a newer, already-funded one; when false, the client must call POST /v2/orders/{id}/execute (repeatable after funding if a prior attempt returned 422 INSUFFICIENT_FUNDS). Order creation never checks or reserves the source's available balance regardless of this value."},"executedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"executionTrigger":{"description":"Which path claimed execution: 'client' for a POST /v2/orders/{id}/execute call, 'auto' for automatic execution by Conduit. Set as soon as execution is claimed — well before the order reaches a terminal status — so it can appear on an order that is still `status: pending` while its conversion is in flight. Absent on an order that hasn't started executing yet (including one cancelled before execution began).","type":"string","enum":["client","auto"]},"cancelledAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"cancellationReason":{"type":"string","enum":["expired","client_cancelled"]},"failureCode":{"type":"string","enum":["insufficient_funds","provider_unavailable","provider_rejected","internal_error","cancelled","insufficient_onchain_balance","source_account_unavailable"]},"failureMessage":{"type":"string"},"linkedTransactionIds":{"type":"array","items":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"}},"payoutTxHash":{"type":"string","description":"On-chain transaction hash of the send that delivered an ONRAMP to an `external_wallet` destination. Null until the crypto arrives, null when Conduit delivered the crypto by other means, and null on every other order.","nullable":true},"payout":{"type":"object","properties":{"state":{"description":"`not_sent`: no send is recorded. The send has not started yet, or it was refused at its start, for example by a restriction on the customer or on the destination address, and the crypto stays in the customer's wallet. Otherwise the status of the latest attempt.","type":"string","enum":["not_sent","processing","completed","failed"]},"attempts":{"type":"array","items":{"type":"object","properties":{"transactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"attempt":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"status":{"type":"string","enum":["pending","processing","completed","failed","cancelled"]},"failureCode":{"type":"string","enum":["user_signature_timeout","user_signature_expired","user_signature_declined","user_signature_rejected_by_provider","crypto_wallet_misconfigured","compliance_hold","compliance_review_rejected","compliance_rejected","returned_by_sender","rail_policy_rejected","insufficient_funds","insufficient_funds_at_settle","rail_unavailable","sender_info_timeout","travel_rule_rejected","provider_rejected","chain_broadcast_failed","roster_changed","insufficient_onchain_balance","source_account_unavailable","capability_suspended",null],"nullable":true},"txHash":{"type":"string","nullable":true}},"required":["transactionId","attempt","status","failureCode","txHash"]},"description":"Each send of the crypto to the auto-payout address, oldest first."},"resendable":{"type":"boolean","description":"True when the latest attempt failed with a code that moved no funds, so `POST /v2/portal/payouts/{id}/resend` with that attempt's `transactionId` can send it again."}},"required":["state","attempts","resendable"],"description":"The crypto auto-payout of an ONRAMP order into a customer wallet. Present when that order has succeeded."},"quoteOptionId":{"description":"Present when this order redeemed a POST /v2/quotes option — the id of the option it consumed.","type":"string","pattern":"^qop_[0-9A-Za-z]{22}$"},"replacesOrderId":{"description":"Present when Conduit created this order to honor an expired order at its original rate: the id of the expired order.","type":"string","pattern":"^ord_[0-9A-Za-z]{22}$"},"depositInstructions":{"minItems":1,"maxItems":1,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"Discriminator for this deposit block: send crypto to an on-chain address.","enum":["crypto_address"]},"address":{"type":"string","description":"Conduit-managed deposit address for funding this order."},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"],"description":"Blockchain network to send the funding deposit on. Sending on any other chain will not fund the order."},"asset":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code to send."},"expiresAt":{"type":"string","format":"date-time","description":"Funding deadline; the order is cancelled if unfunded by this time.","example":"2026-01-15T09:30:00.000Z"}},"required":["type","address","chain","asset","expiresAt"]},"description":"Where to send funds to fund this order. Exactly one `crypto_address` block."},"fundedBy":{"description":"Transfers that funded this order, with how much of each it draws. Present on the order detail read for an order funded at a Conduit funding address; omitted on the list read and on an order that names its own source.","type":"array","items":{"type":"object","properties":{"transactionId":{"type":"string","pattern":"^txn_[0-9A-Za-z]{22}$"},"amount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["transactionId","amount"]}}},"required":["id","customerId","status","type","destination","sourceAsset","destinationAsset","lockSide","rate","fees","totalDebit","lockExpiresAt","createdAt","autoExecute","linkedTransactionIds","payoutTxHash"]}},"meta":{"type":"object","properties":{"mode":{"type":"string","description":"Pagination mode","example":"cursor","enum":["cursor"]},"nextCursor":{"type":"string","description":"Cursor for the page after this one. Use it with `direction=forward`; it is `null` when no more rows follow. A backward page always carries one, so do not loop on it while `direction=backward`.","example":"eyJpZCI6ImN1c18yeFBxTjhSIn0","nullable":true},"previousCursor":{"type":"string","description":"Cursor for the page before this one. Use it with `direction=backward`. It is `null` on the first page of a forward walk and when no earlier rows remain.","example":null,"nullable":true},"total":{"type":"number","description":"Total number of records matching the query","example":42}},"required":["mode","nextCursor","previousCursor","total"]}},"required":["data","meta"]},"ExplicitSourceOrderDto":{"type":"object","properties":{"clientReferenceId":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces."},"destination":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"id":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]}},"required":["type","id","asset"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"id":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"recipient":{"type":"object","properties":{"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"legalName":{"type":"string","maxLength":140},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string","maxLength":40},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["chain","address","attestation"],"additionalProperties":false},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"type":{"type":"string","enum":["external_wallet"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["type","asset","purpose"],"additionalProperties":false,"description":"A wallet outside Conduit. Conduit converts the source and sends the asset to recipient.address in one on-chain transfer, as a payout with the same screening and policy as POST /v2/payouts. The customer needs no Conduit wallet. recipient.chain must equal asset.chain."},{"description":"A bank account outside Conduit. Conduit converts the source and pays the asset to the recipient over rail, as a payout with the same screening and policy as POST /v2/payouts. Some rails need no Conduit account in that currency; on the others, the customer's account in that currency receives the conversion and pays the recipient.","oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["fedwire"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["rtp"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["fednow"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["ach"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["ach_same_day"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"description":"Bank account number, for a bank in a country without IBAN. Required unless iban is sent.","type":"string","minLength":4,"maxLength":64},"iban":{"description":"IBAN (mod-97 checksum-validated; spacing and case normalized). Required unless accountNumber is sent.","type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it, and the bank name if absent, from `bic`; the request is refused if the BIC is not in the SWIFT bank directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bic","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"description":"Bank account number, for a bank in a country without IBAN. Required unless iban is sent.","type":"string","minLength":4,"maxLength":64},"iban":{"description":"IBAN (mod-97 checksum-validated; spacing and case normalized). Required unless accountNumber is sent.","type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it, and the bank name if absent, from `bic`; the request is refused if the BIC is not in the SWIFT bank directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bic","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"recipient":{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["iban","bic","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["iban","bic","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["faster_payments"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["chaps"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"recipient":{"oneOf":[{"type":"object","properties":{"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string","minLength":1,"maxLength":77}},"required":["type","value"],"additionalProperties":false},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["pixKey","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string","minLength":1,"maxLength":77}},"required":["type","value"],"additionalProperties":false},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["pixKey","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["ted"]},"recipient":{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["nibss"]},"recipient":{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankName","accountNumber","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankName","accountNumber","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["spei"]},"recipient":{"oneOf":[{"type":"object","properties":{"clabe":{"type":"string"},"taxId":{"description":"The recipient's RFC, or the CURP of an individual. Optional.","type":"string"},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["clabe","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"clabe":{"type":"string"},"taxId":{"description":"The recipient's RFC, or the CURP of an individual. Optional.","type":"string"},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["clabe","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false}]}]},"autoPayout":{"anyOf":[{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["fedwire"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["rtp"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["fednow"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["ach"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["ach_same_day"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"description":"Bank account number, for a bank in a country without IBAN. Required unless iban is sent.","type":"string","minLength":4,"maxLength":64},"iban":{"description":"IBAN (mod-97 checksum-validated; spacing and case normalized). Required unless accountNumber is sent.","type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it, and the bank name if absent, from `bic`; the request is refused if the BIC is not in the SWIFT bank directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bic","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"description":"Bank account number, for a bank in a country without IBAN. Required unless iban is sent.","type":"string","minLength":4,"maxLength":64},"iban":{"description":"IBAN (mod-97 checksum-validated; spacing and case normalized). Required unless accountNumber is sent.","type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it, and the bank name if absent, from `bic`; the request is refused if the BIC is not in the SWIFT bank directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bic","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"recipient":{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["iban","bic","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["iban","bic","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["faster_payments"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["chaps"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"recipient":{"oneOf":[{"type":"object","properties":{"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string","minLength":1,"maxLength":77}},"required":["type","value"],"additionalProperties":false},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["pixKey","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string","minLength":1,"maxLength":77}},"required":["type","value"],"additionalProperties":false},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["pixKey","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["ted"]},"recipient":{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["nibss"]},"recipient":{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankName","accountNumber","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankName","accountNumber","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["spei"]},"recipient":{"oneOf":[{"type":"object","properties":{"clabe":{"type":"string"},"taxId":{"description":"The recipient's RFC, or the CURP of an individual. Optional.","type":"string"},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["clabe","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"clabe":{"type":"string"},"taxId":{"description":"The recipient's RFC, or the CURP of an individual. Optional.","type":"string"},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["clabe","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false}]},{"type":"object","properties":{"recipient":{"type":"object","properties":{"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"legalName":{"type":"string","maxLength":140},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string","maxLength":40},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["chain","address","attestation"],"additionalProperties":false},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["purpose"],"additionalProperties":false}],"description":"Chains a follow-on external Withdrawal that fires automatically once this order's conversion settles — independent of `autoExecute`, which controls how the conversion itself starts. Its shape must match the order's direction: the fiat variant (rail/recipient/ach/swift/instant/remittance) for OFFRAMP, the crypto variant (recipient only) for ONRAMP. Subject to the same documentation/whitelist policy as a standalone POST /v2/payouts, enforced at order-create time."},"lockSide":{"type":"string","enum":["source","destination"],"description":"Which side `amount` fixes. `source`: `amount` is what the customer pays, fees come out of it, and `totalDebit` equals `amount`. `destination`: `amount` is what the recipient receives, and `totalDebit` is the principal plus fees. A `markupAmount` that the order declares when it redeems a `quoteOptionId` adds to `totalDebit` on both lock sides."},"amount":{"type":"string","description":"Amount of the locked side's asset, as a decimal string. On a `source`-locked order it is the whole amount the customer pays (`totalDebit`), fees included. To convert a deposit's full credit, set it to the deposit's `destination.assetAmount`."},"markupBps":{"description":"Your own margin on this order, in basis points, to two decimal places. Conduit folds it into the quoted rate, so endUserRate is the marked-up rate your customer receives and totalSpreadBps includes it. There is no configured maximum; the request is refused only when this margin plus Conduit's own three spread terms reach 10000 bps, the point at which the quoted rate would collapse to zero. The amount is accrued to you at settlement and reported on GET /v2/markup/balances; it stays inside the rate, so it never enters fees[] and totalDebit stays principal plus fees. Omit the field for no markup. It cannot be sent alongside quoteOptionId: declare it on POST /v2/quotes instead, and the order that redeems the option charges the option's locked marked-up rate and accrues the margin to you. Requires markup to be enabled for your organization.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on this order as a flat amount per transaction, in the order's source asset. A value finer than that asset's precision is refused. A flat amount cannot sit inside the rate, so it behaves exactly as Conduit's own fixed fee: on a SOURCE-locked order it reduces the principal and your customer receives less, and on a DESTINATION-locked order it adds to totalDebit and your customer pays more. On a quoteOptionId redemption this always adds to totalDebit instead, on both lock sides: the option's sourceAmount and destinationAmount are already locked at its quoted rate and never recomputed, so the margin rides on top rather than carving into either side. It appears in fees[] as an entry owned by you, and it is accrued to you at settlement. Send it alongside markupBps, on its own, or omit both. On a quoteOptionId redemption it is refused when the option was already priced with a margin of its own, which the order charges instead. Requires markup to be enabled for your organization.","type":"string"},"source":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"id":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]}},"required":["type","id","asset"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"id":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"}},"required":["type","id"],"additionalProperties":false}]},"autoExecute":{"default":false,"description":"Controls how the order starts executing; does not affect order creation, which never checks or reserves the source's available balance regardless of this flag — an order can always be created before the source is funded. When true, Conduit automatically starts execution as soon as the available source balance covers totalDebit (principal plus fees), with no client action required; orders sharing the same source resource execute oldest-first, so a still-underfunded older order can delay a newer, already-funded one. When false (default), the client must call POST /v2/orders/{id}/execute to start execution; an underfunded attempt returns 422 INSUFFICIENT_FUNDS immediately and leaves the order pending, so the client may retry after funding. Either way, execution must start before lockExpiresAt or the order is cancelled with cancellationReason 'expired' — funding after that deadline does not revive it.","type":"boolean"}},"required":["lockSide","amount","source"],"additionalProperties":false},"DepositFundedOrderDto":{"type":"object","properties":{"clientReferenceId":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces."},"destination":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"id":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]}},"required":["type","id","asset"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"id":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"recipient":{"type":"object","properties":{"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"legalName":{"type":"string","maxLength":140},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string","maxLength":40},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["chain","address","attestation"],"additionalProperties":false},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"type":{"type":"string","enum":["external_wallet"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["type","asset","purpose"],"additionalProperties":false,"description":"A wallet outside Conduit. Conduit converts the source and sends the asset to recipient.address in one on-chain transfer, as a payout with the same screening and policy as POST /v2/payouts. The customer needs no Conduit wallet. recipient.chain must equal asset.chain."},{"description":"A bank account outside Conduit. Conduit converts the source and pays the asset to the recipient over rail, as a payout with the same screening and policy as POST /v2/payouts. Some rails need no Conduit account in that currency; on the others, the customer's account in that currency receives the conversion and pays the recipient.","oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["fedwire"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["rtp"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["fednow"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["ach"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["ach_same_day"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"description":"Bank account number, for a bank in a country without IBAN. Required unless iban is sent.","type":"string","minLength":4,"maxLength":64},"iban":{"description":"IBAN (mod-97 checksum-validated; spacing and case normalized). Required unless accountNumber is sent.","type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it, and the bank name if absent, from `bic`; the request is refused if the BIC is not in the SWIFT bank directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bic","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"description":"Bank account number, for a bank in a country without IBAN. Required unless iban is sent.","type":"string","minLength":4,"maxLength":64},"iban":{"description":"IBAN (mod-97 checksum-validated; spacing and case normalized). Required unless accountNumber is sent.","type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it, and the bank name if absent, from `bic`; the request is refused if the BIC is not in the SWIFT bank directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bic","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"recipient":{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["iban","bic","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["iban","bic","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["faster_payments"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["chaps"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"recipient":{"oneOf":[{"type":"object","properties":{"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string","minLength":1,"maxLength":77}},"required":["type","value"],"additionalProperties":false},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["pixKey","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string","minLength":1,"maxLength":77}},"required":["type","value"],"additionalProperties":false},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["pixKey","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["ted"]},"recipient":{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["nibss"]},"recipient":{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankName","accountNumber","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankName","accountNumber","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["spei"]},"recipient":{"oneOf":[{"type":"object","properties":{"clabe":{"type":"string"},"taxId":{"description":"The recipient's RFC, or the CURP of an individual. Optional.","type":"string"},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["clabe","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"clabe":{"type":"string"},"taxId":{"description":"The recipient's RFC, or the CURP of an individual. Optional.","type":"string"},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["clabe","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false}]}]},"autoPayout":{"anyOf":[{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["fedwire"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["rtp"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["fednow"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["ach"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["ach_same_day"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"description":"Bank account number, for a bank in a country without IBAN. Required unless iban is sent.","type":"string","minLength":4,"maxLength":64},"iban":{"description":"IBAN (mod-97 checksum-validated; spacing and case normalized). Required unless accountNumber is sent.","type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it, and the bank name if absent, from `bic`; the request is refused if the BIC is not in the SWIFT bank directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bic","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"description":"Bank account number, for a bank in a country without IBAN. Required unless iban is sent.","type":"string","minLength":4,"maxLength":64},"iban":{"description":"IBAN (mod-97 checksum-validated; spacing and case normalized). Required unless accountNumber is sent.","type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it, and the bank name if absent, from `bic`; the request is refused if the BIC is not in the SWIFT bank directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bic","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"recipient":{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["iban","bic","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["iban","bic","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["faster_payments"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["chaps"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"recipient":{"oneOf":[{"type":"object","properties":{"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string","minLength":1,"maxLength":77}},"required":["type","value"],"additionalProperties":false},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["pixKey","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string","minLength":1,"maxLength":77}},"required":["type","value"],"additionalProperties":false},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["pixKey","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["ted"]},"recipient":{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["nibss"]},"recipient":{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankName","accountNumber","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankName","accountNumber","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["spei"]},"recipient":{"oneOf":[{"type":"object","properties":{"clabe":{"type":"string"},"taxId":{"description":"The recipient's RFC, or the CURP of an individual. Optional.","type":"string"},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["clabe","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"clabe":{"type":"string"},"taxId":{"description":"The recipient's RFC, or the CURP of an individual. Optional.","type":"string"},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["clabe","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false}]},{"type":"object","properties":{"recipient":{"type":"object","properties":{"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"legalName":{"type":"string","maxLength":140},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string","maxLength":40},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["chain","address","attestation"],"additionalProperties":false},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["purpose"],"additionalProperties":false}],"description":"Chains a follow-on external Withdrawal that fires automatically once this order's conversion settles — independent of `autoExecute`, which controls how the conversion itself starts. Its shape must match the order's direction: the fiat variant (rail/recipient/ach/swift/instant/remittance) for OFFRAMP, the crypto variant (recipient only) for ONRAMP. Subject to the same documentation/whitelist policy as a standalone POST /v2/payouts, enforced at order-create time."},"lockSide":{"type":"string","enum":["source","destination"],"description":"Which side `amount` fixes. `source`: `amount` is what the customer pays, fees come out of it, and `totalDebit` equals `amount`. `destination`: `amount` is what the recipient receives, and `totalDebit` is the principal plus fees. A `markupAmount` that the order declares when it redeems a `quoteOptionId` adds to `totalDebit` on both lock sides."},"amount":{"type":"string","description":"Amount of the locked side's asset, as a decimal string. On a `source`-locked order it is the whole amount the customer pays (`totalDebit`), fees included. To convert a deposit's full credit, set it to the deposit's `destination.assetAmount`."},"markupBps":{"description":"Your own margin on this order, in basis points, to two decimal places. Conduit folds it into the quoted rate, so endUserRate is the marked-up rate your customer receives and totalSpreadBps includes it. There is no configured maximum; the request is refused only when this margin plus Conduit's own three spread terms reach 10000 bps, the point at which the quoted rate would collapse to zero. The amount is accrued to you at settlement and reported on GET /v2/markup/balances; it stays inside the rate, so it never enters fees[] and totalDebit stays principal plus fees. Omit the field for no markup. It cannot be sent alongside quoteOptionId: declare it on POST /v2/quotes instead, and the order that redeems the option charges the option's locked marked-up rate and accrues the margin to you. Requires markup to be enabled for your organization.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on this order as a flat amount per transaction, in the order's source asset. A value finer than that asset's precision is refused. A flat amount cannot sit inside the rate, so it behaves exactly as Conduit's own fixed fee: on a SOURCE-locked order it reduces the principal and your customer receives less, and on a DESTINATION-locked order it adds to totalDebit and your customer pays more. On a quoteOptionId redemption this always adds to totalDebit instead, on both lock sides: the option's sourceAmount and destinationAmount are already locked at its quoted rate and never recomputed, so the margin rides on top rather than carving into either side. It appears in fees[] as an entry owned by you, and it is accrued to you at settlement. Send it alongside markupBps, on its own, or omit both. On a quoteOptionId redemption it is refused when the option was already priced with a margin of its own, which the order charges instead. Requires markup to be enabled for your organization.","type":"string"},"sourceAsset":{"type":"object","properties":{"code":{"type":"string","enum":["DAI","ETH","EURC","OUSD","POL","PYUSD","SOL","TRX","USDC","USDT","XLM"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]}},"required":["code","chain"],"description":"The crypto asset the order is funded in — both code and chain are required. Conduit answers with a funding address to send it to, published as depositInstructions on the order, and the order executes on its own once the funds clear; auto-execution is forced. Fundable pairs: USDC/ethereum, USDC/base, USDC/solana, USDC/polygon, USDC/stellar, USDC/tempo, USDC/arbitrum, USDC/optimism, USDC/arc, USDT/ethereum, USDT/tron, USDT/polygon, USDT/arbitrum, USDT/optimism, OUSD/ethereum, OUSD/base, OUSD/tempo. Anything else is rejected with UNSUPPORTED_ASSET."}},"required":["lockSide","amount","sourceAsset"],"additionalProperties":false},"QuoteRedemptionOrderDto":{"type":"object","properties":{"clientReferenceId":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$","description":"Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces."},"destination":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"id":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]}},"required":["type","id","asset"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"id":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"recipient":{"type":"object","properties":{"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"legalName":{"type":"string","maxLength":140},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string","maxLength":40},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["chain","address","attestation"],"additionalProperties":false},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"type":{"type":"string","enum":["external_wallet"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["type","asset","purpose"],"additionalProperties":false,"description":"A wallet outside Conduit. Conduit converts the source and sends the asset to recipient.address in one on-chain transfer, as a payout with the same screening and policy as POST /v2/payouts. The customer needs no Conduit wallet. recipient.chain must equal asset.chain."},{"description":"A bank account outside Conduit. Conduit converts the source and pays the asset to the recipient over rail, as a payout with the same screening and policy as POST /v2/payouts. Some rails need no Conduit account in that currency; on the others, the customer's account in that currency receives the conversion and pays the recipient.","oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["fedwire"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["rtp"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["fednow"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["ach"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["ach_same_day"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"description":"Bank account number, for a bank in a country without IBAN. Required unless iban is sent.","type":"string","minLength":4,"maxLength":64},"iban":{"description":"IBAN (mod-97 checksum-validated; spacing and case normalized). Required unless accountNumber is sent.","type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it, and the bank name if absent, from `bic`; the request is refused if the BIC is not in the SWIFT bank directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bic","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"description":"Bank account number, for a bank in a country without IBAN. Required unless iban is sent.","type":"string","minLength":4,"maxLength":64},"iban":{"description":"IBAN (mod-97 checksum-validated; spacing and case normalized). Required unless accountNumber is sent.","type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it, and the bank name if absent, from `bic`; the request is refused if the BIC is not in the SWIFT bank directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bic","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"recipient":{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["iban","bic","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["iban","bic","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["faster_payments"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["chaps"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"recipient":{"oneOf":[{"type":"object","properties":{"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string","minLength":1,"maxLength":77}},"required":["type","value"],"additionalProperties":false},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["pixKey","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string","minLength":1,"maxLength":77}},"required":["type","value"],"additionalProperties":false},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["pixKey","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["ted"]},"recipient":{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["nibss"]},"recipient":{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankName","accountNumber","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankName","accountNumber","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["spei"]},"recipient":{"oneOf":[{"type":"object","properties":{"clabe":{"type":"string"},"taxId":{"description":"The recipient's RFC, or the CURP of an individual. Optional.","type":"string"},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["clabe","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"clabe":{"type":"string"},"taxId":{"description":"The recipient's RFC, or the CURP of an individual. Optional.","type":"string"},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["clabe","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"type":{"type":"string","enum":["external_bank"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}}},"required":["rail","type","asset","purpose"],"additionalProperties":false}]}]},"autoPayout":{"anyOf":[{"oneOf":[{"type":"object","properties":{"rail":{"type":"string","enum":["fedwire"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["rtp"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["fednow"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["ach"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["ach_same_day"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string","minLength":4,"maxLength":64,"pattern":"^[0-9]+$"},"routingNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings"]},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it from `routingNumber`; the request is refused if the routing number is not in the US routing-number directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","routingNumber","accountType","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["swift"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"description":"Bank account number, for a bank in a country without IBAN. Required unless iban is sent.","type":"string","minLength":4,"maxLength":64},"iban":{"description":"IBAN (mod-97 checksum-validated; spacing and case normalized). Required unless accountNumber is sent.","type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it, and the bank name if absent, from `bic`; the request is refused if the BIC is not in the SWIFT bank directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bic","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"description":"Bank account number, for a bank in a country without IBAN. Required unless iban is sent.","type":"string","minLength":4,"maxLength":64},"iban":{"description":"IBAN (mod-97 checksum-validated; spacing and case normalized). Required unless accountNumber is sent.","type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"description":"Address of the recipient's bank. Omit it and Conduit derives it, and the bank name if absent, from `bic`; the request is refused if the BIC is not in the SWIFT bank directory.","type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bic","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["sepa"]},"recipient":{"oneOf":[{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["iban","bic","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"iban":{"type":"string"},"bic":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["iban","bic","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["faster_payments"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["chaps"]},"recipient":{"oneOf":[{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"accountNumber":{"type":"string"},"sortCode":{"type":"string"},"bankName":{"type":"string","maxLength":140},"bankAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["accountNumber","sortCode","bankAddress","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["pix"]},"recipient":{"oneOf":[{"type":"object","properties":{"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string","minLength":1,"maxLength":77}},"required":["type","value"],"additionalProperties":false},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["pixKey","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"pixKey":{"type":"object","properties":{"type":{"type":"string","enum":["cpf","cnpj","email","phone","random"]},"value":{"type":"string","minLength":1,"maxLength":77}},"required":["type","value"],"additionalProperties":false},"taxId":{"type":"string"},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["pixKey","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["ted"]},"recipient":{"oneOf":[{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"bankCode":{"type":"string"},"branch":{"type":"string"},"accountNumber":{"type":"string"},"accountType":{"type":"string","enum":["checking","savings","payment"]},"taxId":{"type":"string"},"bankName":{"type":"string","maxLength":140},"phone":{"description":"Recipient contact phone. Optional; forwarded to the banking partner when provided.","type":"string","maxLength":40},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankCode","branch","accountNumber","accountType","taxId","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["nibss"]},"recipient":{"oneOf":[{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankName","accountNumber","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"bankName":{"type":"string","enum":["Suntrust Bank","Accion MFB","Standard Chartered Bank","Nova MB","Citibank Nigeria","Wema Bank","Bowen MFB","Unity Bank","Premium Trust bank","Mint-Finex Microfinance Bank","United Bank for Africa","Access Bank (Diamond)","Kuda Microfinance Bank","Union Bank of Nigeria","Ecobank Nigeria","Providus Bank","PremiumTrust Bank","Access Bank","Stanbic Ibtc Bank","Polaris Bank","Taj Bank","Lotus Bank","Titan Trust Bank","Parallex Bank","PalmPay","Keystone Bank","Nomba Bank","Moniepoint Microfinance Bank","OPay","GoMoney","Optimus Bank","Zenith Bank","Fairmoney Microfinance Bank Ltd","Heritage Bank","Enterprise Bank","Guaranty Trust Bank","GT Bank","MoMo PSB","9JAPAY MICROFINANCE","First City Monument Bank","Bellbank Microfinance","First Bank of Nigeria","Titan-Paystack","Mainstreet Bank","Sterling Bank","VFD Microfinance Bank","Nownow（Contec Global)","NET MFB","Jaiz Bank","Paga","Fidelity Bank","Globus Bank","Alternative Bank"]},"accountNumber":{"type":"string","pattern":"^\\d{10}$"},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["bankName","accountNumber","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false},{"type":"object","properties":{"rail":{"type":"string","enum":["spei"]},"recipient":{"oneOf":[{"type":"object","properties":{"clabe":{"type":"string"},"taxId":{"description":"The recipient's RFC, or the CURP of an individual. Optional.","type":"string"},"type":{"type":"string","enum":["individual"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["clabe","type","firstName","lastName","postalAddress"],"additionalProperties":false},{"type":"object","properties":{"clabe":{"type":"string"},"taxId":{"description":"The recipient's RFC, or the CURP of an individual. Optional.","type":"string"},"type":{"type":"string","enum":["business"]},"legalName":{"type":"string","maxLength":140},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["clabe","type","legalName","postalAddress"],"additionalProperties":false}]},"ach":{"type":"object","properties":{"authorizationType":{"type":"string","enum":["corporate_agreement","written","web"]}},"required":["authorizationType"]},"swift":{"type":"object","properties":{"purposeOfPayment":{"type":"string","maxLength":140}}},"instant":{"type":"object","properties":{"receiverNetworkPreference":{"type":"string","enum":["tch","fednow"]}}},"remittance":{"type":"object","properties":{"reference":{"type":"string","maxLength":140},"description":{"type":"string","maxLength":280}}},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["rail","purpose"],"additionalProperties":false}]},{"type":"object","properties":{"recipient":{"type":"object","properties":{"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"address":{"type":"string","minLength":1,"maxLength":255},"attestation":{"type":"object","properties":{"custody":{"type":"string","enum":["self","third_party"]}},"required":["custody"],"additionalProperties":false},"type":{"type":"string","enum":["individual","business"]},"firstName":{"type":"string","maxLength":70},"lastName":{"type":"string","maxLength":70},"legalName":{"type":"string","maxLength":140},"dateOfBirth":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"countryOfCitizenship":{"type":"string"},"countryOfRegistration":{"type":"string"},"postalAddress":{"type":"object","properties":{"addressLine1":{"type":"string","maxLength":120},"addressLine2":{"type":"string","maxLength":120},"city":{"type":"string","maxLength":80},"state":{"type":"string","maxLength":80},"postalCode":{"type":"string","maxLength":32},"country":{"type":"string"}},"required":["addressLine1","city","country"],"additionalProperties":false},"phone":{"type":"string","maxLength":40},"rail":{"description":"Deprecated. Omit it: Conduit infers the recipient rail from the destination rail. A value sent must be that recipient rail: us for fedwire, rtp, fednow and ach; swift; sepa; uk_domestic for faster_payments and chaps; pix; br_domestic for ted; ng_domestic for nibss; mx_domestic for spei; crypto. Any other value returns 400, including the payment rail name, such as fedwire or chaps.","deprecated":true,"type":"string"}},"required":["chain","address","attestation"],"additionalProperties":false},"memo":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"value":{"type":"string","minLength":1}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["id"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false}],"description":"Destination memo (destination tag) for the receiving account. Required by shared custodial addresses such as exchanges. Only accepted on chains whose payments carry a memo."},"purpose":{"type":"string","enum":["intercompany","treasury_management","payment_for_goods_or_services","payroll","investments","other","prefunding","purchase_of_goods","rent","loan_payment","personal_transfer_of_funds","gift","bill_payment","charity","tax_payment","person_to_person_transfer"],"description":"Declared business purpose of the payout. Drives documentation requirements and whitelist policy. A chaps leg cannot declare other, gift, bill_payment, person_to_person_transfer: the CHAPS scheme carries an ISO 20022 purpose code and these name none. Use faster_payments for them."},"purposeDescription":{"description":"Your customer's own words for what this payment is. Optional with every purpose, including other. Maximum 280 characters, and it cannot be blank.","type":"string","minLength":1,"maxLength":280,"pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},"documents":{"description":"IDs of previously uploaded supporting documents (doc_*), must be uploaded with purpose transaction_support. Maximum 10.","maxItems":10,"type":"array","items":{"type":"string","pattern":"^doc_[0-9A-Za-z]{22}$"}},"markupBps":{"description":"Your own margin on the chained payout, in basis points of the amount it moves, to two decimal places. The leg spends this order's converted output and has no second source to draw on, so the margin is taken out of that output, exactly as Conduit's own payout fee is: the recipient receives less by this margin. A margin that reaches the amount this order converts to is refused at order create. Omit it to take one margin per customer action, on the conversion alone. Fiat legs only.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the chained payout as a flat amount, in the leg's asset. Taken out of the converted output the same way, so the recipient receives less by this amount. A value finer than that asset's precision is refused, as is a margin that reaches the amount this order converts to. Fiat legs only.","type":"string"}},"required":["purpose"],"additionalProperties":false}],"description":"Chains a follow-on external Withdrawal that fires automatically once this order's conversion settles — independent of `autoExecute`, which controls how the conversion itself starts. Its shape must match the order's direction: the fiat variant (rail/recipient/ach/swift/instant/remittance) for OFFRAMP, the crypto variant (recipient only) for ONRAMP. Subject to the same documentation/whitelist policy as a standalone POST /v2/payouts, enforced at order-create time."},"markupAmount":{"description":"Your own margin on this order as a flat amount per transaction, in the order's source asset. A value finer than that asset's precision is refused. A flat amount cannot sit inside the rate, so it behaves exactly as Conduit's own fixed fee: on a SOURCE-locked order it reduces the principal and your customer receives less, and on a DESTINATION-locked order it adds to totalDebit and your customer pays more. On a quoteOptionId redemption this always adds to totalDebit instead, on both lock sides: the option's sourceAmount and destinationAmount are already locked at its quoted rate and never recomputed, so the margin rides on top rather than carving into either side. It appears in fees[] as an entry owned by you, and it is accrued to you at settlement. Send it alongside markupBps, on its own, or omit both. On a quoteOptionId redemption it is refused when the option was already priced with a margin of its own, which the order charges instead. Requires markup to be enabled for your organization.","type":"string"},"quoteOptionId":{"type":"string","pattern":"^qop_[0-9A-Za-z]{22}$","description":"Redeems a POST /v2/quotes option at its locked rate. `amount` and `lockSide` are inherited from the option and must be absent."},"source":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["wallet"]},"id":{"type":"string","pattern":"^wlt_[0-9A-Za-z]{22}$"},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]}},"required":["type","id","asset"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account"]},"id":{"type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"}},"required":["type","id"],"additionalProperties":false}]},"autoExecute":{"description":"Controls how the order starts executing; does not affect order creation, which never checks or reserves the source's available balance regardless of this flag — an order can always be created before the source is funded. When true, Conduit automatically starts execution as soon as the available source balance covers totalDebit (principal plus fees), with no client action required; orders sharing the same source resource execute oldest-first, so a still-underfunded older order can delay a newer, already-funded one. When false (default), the client must call POST /v2/orders/{id}/execute to start execution; an underfunded attempt returns 422 INSUFFICIENT_FUNDS immediately and leaves the order pending, so the client may retry after funding. Either way, execution must start before lockExpiresAt or the order is cancelled with cancellationReason 'expired' — funding after that deadline does not revive it.","type":"boolean"}},"required":["quoteOptionId","source"],"additionalProperties":false},"RecipientRequirementsResponseDto":{"type":"object","properties":{"destinationRecipient":{"type":"string","enum":["required","none"]},"reason":{"type":"string"},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Where the value belongs in the create body, as a dotted path — not a display label. `destination.recipient.accountNumber` means `{ destination: { recipient: { accountNumber } } }`.","example":"destination.recipient.accountNumber"},"type":{"type":"string","enum":["string","number","boolean","date","email"],"description":"Kind of value to send. `date` and `email` are sent as JSON strings."},"required":{"type":"boolean","description":"Whether the field must always be sent. A field that is required only in some cases carries `requiredWhen` or `requiredOneOf` instead."},"minLength":{"description":"Shortest accepted value, for a string field.","type":"number"},"maxLength":{"description":"Longest accepted value, for a string field.","type":"number"},"pattern":{"description":"Regular expression the value must match. Anchor it yourself unless it already starts with ^ and ends with $.","type":"string"},"enum":{"description":"Closed set of accepted values. Send one of them verbatim.","type":"array","items":{"type":"string"}},"validator":{"description":"An extra checksum rule beyond `pattern`: `ABA` for a US routing number, `IBAN` for an international account number.","type":"string","enum":["aba","iban"]},"requiredWhen":{"description":"Makes the field required only when this condition holds. The condition reads another field in the same body by its `name`.","anyOf":[{"type":"object","properties":{"field":{"type":"string","description":"The `name` of the field this condition reads."},"equals":{"type":"string","description":"The condition holds when that field has this value."}},"required":["field","equals"],"additionalProperties":false},{"type":"object","properties":{"field":{"type":"string","description":"The `name` of the field this condition reads."},"notIn":{"minItems":1,"type":"array","items":{"type":"string"},"description":"The condition holds when that field's value is none of these."}},"required":["field","notIn"],"additionalProperties":false}]},"mustEqual":{"description":"The field must carry exactly this value. Used for attestations that only one answer can satisfy.","anyOf":[{"type":"string"},{"type":"boolean"},{"type":"number"}]},"requiredOneOf":{"description":"Names a group of fields of which at least one must be sent. Every field in the response that has the same value is in the group, and each of them alone is enough. Absent when the field is in no group.","example":"accountIdentifier","type":"string"}},"required":["name","type","required"]}},"fieldDescriptors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the field in the submission payload. Always starts with /. Array indices appear as integers.","example":"/businessInfo/taxId"},"label":{"type":"string","description":"Human-readable label for display","example":"Tax Identification Number"},"helpText":{"description":"One-line guidance for the field, intended to render as a tooltip / info pill next to the label. Plain text, no markup. For `businessInfo.taxId` and `businessInfo.businessEntityId` this is the country-specific identifier description from `countries.json` (with the issuing authority prefixed when known, e.g. 'Issued by HMRC.'). For other fields it is universal copy from the server-side field registry. Silently absent when neither source has guidance on file. See api-conventions §5.1.5.","example":"Issued by HMRC. 10-digit number; auto-assigned on CT registration; appears on HMRC correspondence. VAT Registration Number (GB + 9 digits; XI prefix for NI–EU trade) is supplementary — collect separately if VAT-registered.","type":"string"},"type":{"type":"string","enum":["string","number","integer","boolean","date","datetime","email","url","phone","country","enum","stringArray","enumArray"],"description":"Data type of the field","example":"string"},"required":{"type":"boolean","description":"Whether the field is required at submit"},"group":{"description":"Section grouping code for renderers. Stable camelCase token drawn from a closed set per discovery context (onboarding today: `businessInfo`, `companyClassification`, `registeredAddress`, `operatingAddress`, `businessActivity`, `activity`, `regulatoryHistory`, `certification`, `customAnswers`; `activity` carries an individual subject's own activity envelope, where `businessActivity` carries a business subject's; `customAnswers` carries operator-authored questions). Omitted on top-level scalars without a section and on fields nested inside `individualRequirements[].fields[]` (already a logical group). Presentation metadata; submit ignores it.","type":"string"},"mustEqual":{"description":"Required-with-const marker. Submit enforces strict equality on the field value (not just presence). Most common case: legal-certification booleans (`certification.termsAndConditions: { required: true, mustEqual: true }`) where `false` submits are rejected. Omitted when not constrained to a single value.","anyOf":[{"type":"boolean"},{"type":"string"},{"type":"number"}]},"constraints":{"description":"Per-value limits on this field alone, enforceable client-side. Satisfying them does not by itself clear submit: a value must also satisfy the field's `allowedValues`, its `mustEqual`, and every `conditionalOverride` whose conditions hold. Some `pattern` values state only a canonical spelling, and submit can accept equivalent spellings such a pattern does not list.","type":"object","properties":{"pattern":{"description":"Regex stating the canonical form of the value. A value that matches it is in the form submit expects; for some fields, submit is more lenient than this pattern and can accept spellings it does not state, so a value outside it is not always refused.","example":"^\\d{2}\\.\\d{3}\\.\\d{3}/\\d{4}-\\d{2}$","type":"string"},"example":{"description":"Example value matching the pattern","example":"12.345.678/0001-95","type":"string"},"format":{"description":"Advertised server-enforced semantic format marker. Closed enum: `safeString` (structured short fields — rejects control characters, HTML tags, and punctuation outside the documented allowlist), `prose` (free-text fields — allows ordinary punctuation and multi-line text, rejecting control characters, invisible-format characters, line/paragraph separators, and lone surrogates) or `ip` (an IPv4 or IPv6 address — no zone identifier, no leading zeros in IPv4 octets). The server enforces the rule at submit; the marker advertises it so clients can pre-validate. Arbitrary regex aliases belong in `pattern`.","type":"string","enum":["safeString","prose","ip"]},"minLength":{"description":"Minimum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxLength":{"description":"Maximum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"min":{"description":"Minimum numeric value","type":"number"},"max":{"description":"Maximum numeric value","type":"number"},"minDate":{"description":"Earliest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"1800-01-01","type":"string"},"maxDate":{"description":"Latest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"today","type":"string"},"maxDateTime":{"description":"Latest allowed instant for a datetime field: the literal 'now'. A value up to five minutes ahead of the server clock is accepted to absorb clock skew.","example":"now","type":"string","enum":["now"]},"minAgeYears":{"description":"Minimum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxAgeYears":{"description":"Maximum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"checksum":{"description":"A check digit rule the value must pass beyond `pattern`: `aba` for a US routing number, `iban` for an international bank account number (mod-97).","type":"string","enum":["aba","iban"]}},"additionalProperties":false},"requiredOneOf":{"description":"Names a group of fields of which at least one must be sent. Every field in the response that has the same value is in the group, and each of them alone is enough. Absent when the field is in no group.","example":"accountIdentifier","type":"string"},"conditions":{"description":"Conditional applicability rules. The field applies (is shown / required) only when every condition evaluates true against the current submission. Empty / absent means unconditional.","type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the submitted-data field this condition reads. Resolution is governed by the sibling scope (root by default; person-scoped when scope='person').","example":"/companyClassification/legalStructure"},"operator":{"type":"string","enum":["eq","in","not_in","exists","is_true","is_false"],"description":"Comparison operator. The field is required / applies only when the condition evaluates true against the current submitted data.","example":"eq"},"value":{"description":"Single comparison value, used with eq / exists operators","type":"string"},"values":{"description":"Array of comparison values, used with in / not_in operators. When the field at `pointer` is an array, `in` holds when any element of it is one of these values.","type":"array","items":{"type":"string"}},"scope":{"description":"Evaluation scope for `pointer`. Default `root` evaluates against the top-level submission; `person` evaluates against the current `ownership.persons[i]` row (used inside `individualRequirements[].fields[].conditions`).","type":"string","enum":["root","person"]}},"required":["pointer","operator"],"additionalProperties":false}},"allowedValues":{"description":"Allowed values for enum / enumArray fields. The submitted value MUST be one of these.","example":["LLC","CORPORATION","PARTNERSHIP"],"type":"array","items":{"type":"string"}},"options":{"description":"Structured per-option metadata for enum fields with display / grouping hints (label, abbr, description, category). `value` mirrors an entry in `allowedValues`. Present when the projector has localized data to surface (e.g. country-specific legal structures); enum fields without rich metadata use `allowedValues` alone.","type":"array","items":{"type":"object","properties":{"value":{"type":"string","description":"Submitted value. Must be one of the entries in the sibling `allowedValues` array.","example":"Sociedad Anónima"},"label":{"type":"string","description":"Human-readable label for display","example":"Sociedad Anónima"},"abbr":{"type":"string","description":"Short-form / acronym for the option","example":"S.A.","nullable":true},"description":{"description":"Long-form description of the option","type":"string"},"category":{"type":"string","enum":["Corp","LLC","Sole Proprietorship","Partnership","Other","regulatory_review"],"description":"Out-of-band metadata for an option that affects how it should be rendered or handled. Values: the legal-structure canonical bucket (`Corp` / `LLC` / `Sole Proprietorship` / `Partnership` / `Other`) — used to map the localised `value` to a standardised type; and `regulatory_review` — indicates this option is subject to additional regulatory review and may warrant a pre-submission warning to the user. Silently absent on options that carry no such metadata."}},"required":["value","label"],"additionalProperties":false}},"conditionalOverrides":{"description":"Extra constraints that apply only while their own conditions hold. Each element carries a `conditions` array read exactly like the field's own `conditions` — every condition must hold, and `scope: 'person'` resolves the pointer against the current `ownership.persons[i]` row — plus the `constraints` submit adds for that case. Three cases ship. An address states what submit keys on that address's own country: a person's `/address/state` carries the US subdivision pattern and `/address/postalCode` the US ZIP pattern while that same person's `/address/country` is `USA` (`scope: 'person'`), and the business's `/operatingAddress/state` and `/operatingAddress/postalCode` carry the same two while `/operatingAddress/country` is `USA`, read at the root of the body because the condition names no scope. A person's `/taxIdNumber` carries the US Social Security Number pattern while that same person's `/taxIdType` is `SSN`. When two or more requirement rules declare one field and a rule's check depends on a condition discovery cannot settle (most often a `scope: 'person'` condition), that rule's check is an element too: its `constraints` and, for an enum field, its `allowedValues`. Some overrides' `pattern` states only the canonical value to send, not the full set submit accepts: the US subdivision pattern states the two-letter code with or without the `US-` prefix, while submit also accepts the full state name and other spellings. Apply every element whose conditions hold ON TOP OF the field's own `constraints`, never in place of them: the value must match the field-level `pattern` and every override `pattern` that applies, and a bound named twice tightens to the stricter value. The property is additive and a client may ignore it, in which case the field reads exactly as it did before the property existed and submit can still reject a value the override would have named. Silently absent when the field carries no conditional case.","type":"array","items":{"type":"object","properties":{"conditions":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the submitted-data field this condition reads. Resolution is governed by the sibling scope (root by default; person-scoped when scope='person').","example":"/companyClassification/legalStructure"},"operator":{"type":"string","enum":["eq","in","not_in","exists","is_true","is_false"],"description":"Comparison operator. The field is required / applies only when the condition evaluates true against the current submitted data.","example":"eq"},"value":{"description":"Single comparison value, used with eq / exists operators","type":"string"},"values":{"description":"Array of comparison values, used with in / not_in operators. When the field at `pointer` is an array, `in` holds when any element of it is one of these values.","type":"array","items":{"type":"string"}},"scope":{"description":"Evaluation scope for `pointer`. Default `root` evaluates against the top-level submission; `person` evaluates against the current `ownership.persons[i]` row (used inside `individualRequirements[].fields[].conditions`).","type":"string","enum":["root","person"]}},"required":["pointer","operator"],"additionalProperties":false},"description":"Conditions that must ALL hold for this override to apply. Same shape and evaluation as `conditions` on the field itself, `scope` included."},"constraints":{"type":"object","properties":{"pattern":{"description":"Regex stating the canonical form of the value. A value that matches it is in the form submit expects; for some fields, submit is more lenient than this pattern and can accept spellings it does not state, so a value outside it is not always refused.","example":"^\\d{2}\\.\\d{3}\\.\\d{3}/\\d{4}-\\d{2}$","type":"string"},"example":{"description":"Example value matching the pattern","example":"12.345.678/0001-95","type":"string"},"format":{"description":"Advertised server-enforced semantic format marker. Closed enum: `safeString` (structured short fields — rejects control characters, HTML tags, and punctuation outside the documented allowlist), `prose` (free-text fields — allows ordinary punctuation and multi-line text, rejecting control characters, invisible-format characters, line/paragraph separators, and lone surrogates) or `ip` (an IPv4 or IPv6 address — no zone identifier, no leading zeros in IPv4 octets). The server enforces the rule at submit; the marker advertises it so clients can pre-validate. Arbitrary regex aliases belong in `pattern`.","type":"string","enum":["safeString","prose","ip"]},"minLength":{"description":"Minimum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxLength":{"description":"Maximum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"min":{"description":"Minimum numeric value","type":"number"},"max":{"description":"Maximum numeric value","type":"number"},"minDate":{"description":"Earliest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"1800-01-01","type":"string"},"maxDate":{"description":"Latest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"today","type":"string"},"maxDateTime":{"description":"Latest allowed instant for a datetime field: the literal 'now'. A value up to five minutes ahead of the server clock is accepted to absorb clock skew.","example":"now","type":"string","enum":["now"]},"minAgeYears":{"description":"Minimum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxAgeYears":{"description":"Maximum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"checksum":{"description":"A check digit rule the value must pass beyond `pattern`: `aba` for a US routing number, `iban` for an international bank account number (mod-97).","type":"string","enum":["aba","iban"]}},"additionalProperties":false,"description":"Constraints submit adds while the conditions hold. They narrow the field, never widen it, and they do not replace the field's own `constraints`: `pattern` is a SECOND regex that states the canonical form for this case, applied as well as the field-level `pattern`, and a bound named on both takes whichever value is stricter. As at field level, submit can be more lenient than some of these patterns state. `example` is a value valid under this override. Empty when the override narrows only `allowedValues`."},"allowedValues":{"description":"Allowed values for an enum / enumArray field while the conditions hold: a subset of the field's own `allowedValues`. Submit refuses a value outside it in that case. Omitted when the override does not narrow the values.","example":["SSN"],"type":"array","items":{"type":"string"}}},"required":["conditions","constraints"],"additionalProperties":false}}},"required":["pointer","label","type","required"]},"description":"The fields to send, in the same shape that `fields` has on the onboarding and feature requirements endpoints. `pointer` is an RFC 6901 JSON Pointer to the place of the value in the create request body. A field that has `conditions` is required only while every condition holds. `fields` gives the same fields in its earlier shape."}},"required":["destinationRecipient","fields","fieldDescriptors"]},"SimulateOrderRateLockExpiredDtoClass":{"type":"object","properties":{},"additionalProperties":false},"OfferableAssetChainPairListResponseDto":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code identifier","example":"USD"},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]}},"required":["code","chain"]},"description":"Asset/chain pairs a customer can both fund a deposit-funded order with and receive an off-ramp payout on."}},"required":["data"]},"CreateQuoteRequestDto":{"type":"object","properties":{"source":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true}},"required":["code"]},"destination":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"nullable":true},"type":{"description":"Where the order that redeems an option delivers, as `destination.type` on `POST /v2/orders`. Omit it for a Conduit wallet or virtual account.","type":"string","enum":["wallet","virtual_account","external_wallet","external_bank"]},"custody":{"description":"Who holds an `external_wallet` destination, as `recipient.attestation.custody` on the order. Only Conduit prices an `external_wallet` that is not `self`.","type":"string","enum":["self","third_party"]}},"required":["code"]},"lockSide":{"type":"string","enum":["source","destination"]},"amount":{"type":"string"},"markupBps":{"description":"Your own margin on the order this quote prices, in basis points, to two decimal places. Conduit folds it into every option's rate, so `endUserRate` is the marked-up rate your customer receives and `totalSpreadBps` includes it. The order that redeems the option charges the same margin and accrues it to you, and it must not declare a margin of its own. Not available on a withdrawal quote, which nothing redeems; declare the margin on `POST /v2/payouts` instead. Requires markup to be enabled for your organization.","type":"number","minimum":0.01,"maximum":99999.99,"multipleOf":0.01},"markupAmount":{"description":"Your own margin on the order this quote prices, as a flat amount per transaction, in the quote's source asset. A value finer than that asset's precision is refused. A flat amount cannot sit inside a rate, so it behaves exactly as Conduit's own fixed fee, and which side it moves depends on `lockSide`. On a SOURCE-locked quote it is carved out of the principal, so your customer receives less and `totalDebit` is unchanged. On a DESTINATION-locked quote it is added, so `totalDebit` rises and your customer pays more. Either way it appears in every option's `fees` as an entry owned by you. The order that redeems the option charges the same margin and accrues it to you, and it must not declare a margin of its own. Not available on a withdrawal quote, which nothing redeems; declare the margin on `POST /v2/payouts` instead. Requires markup to be enabled for your organization.","type":"string"},"customerId":{"description":"The customer the quoted conversion is for. When present, Conduit checks that this customer may convert, and refuses the quote with `CAPABILITY_SUSPENDED` when the order would be refused. Not available on a withdrawal quote.","type":"string","pattern":"^cus_[0-9A-Za-z]{22}$"},"virtualAccountId":{"description":"The virtual account the payout debits, as `virtualAccountId` on `POST /v2/payouts`. Only on a withdrawal quote. When present, each option is a rail Conduit can send this payout on from this account now. A rail that only a bank account still waiting for approval could send gets no option. Omit it to price every rail your organization is routed on. A virtual account outside your organization, or in a different asset, is refused with 404 VIRTUAL_ACCOUNT_NOT_FOUND.","type":"string","pattern":"^vac_[0-9A-Za-z]{22}$"},"recipientType":{"description":"Who the payout pays, as `destination.recipient.type` on `POST /v2/payouts`. Only with `virtualAccountId`, else refused with 400 VALIDATION_ERROR. A rail is then offered only when the payout can route to this recipient type. Without it, a rail is offered when at least one recipient type can take it. It changes which rails are offered, not the fee of an option.","type":"string","enum":["individual","business"]},"destinationCountry":{"description":"Presence discriminates the quote mode alongside whether source/destination share the same asset: different assets + no country prices a conversion; different assets + a country prices a conversion and a payout, unless both sides are fiat, which is refused; the same asset + a country prices a withdrawal; the same asset with no country is refused.","type":"string"}},"required":["source","destination","lockSide","amount"],"additionalProperties":false},"QuoteResponseDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^qte_[0-9A-Za-z]{22}$"},"sourceAssetRef":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code identifier","example":"USD"},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"description":"Blockchain network. `null`/omitted for fiat assets.","nullable":true}},"required":["code"]},"destinationAssetRef":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code identifier","example":"USD"},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"description":"Blockchain network. `null`/omitted for fiat assets.","nullable":true}},"required":["code"]},"lockSide":{"type":"string","enum":["source","destination"]},"amount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false,"description":"The amount this quote locked, in the asset of the side named by lockSide."},"options":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^qop_[0-9A-Za-z]{22}$"},"rail":{"type":"string","enum":["rtp","fedwire","ach","ach_same_day","swift","fednow","sepa","faster_payments","chaps","pix","ted","nibss","spei",null],"nullable":true},"rate":{"type":"object","properties":{"referenceRate":{"type":"string","description":"Market reference rate at quote time"},"totalSpreadBps":{"type":"string","description":"Combined spread (FX markup + take rate, plus your own markupBps when the order or the quote declared one) in basis points, as a string with up to two decimal places. When Conduit invoices its conversion fee to you monthly, the take rate is not in this spread"},"endUserRate":{"type":"string","description":"Effective rate the customer is transacting at"}},"required":["referenceRate","totalSpreadBps","endUserRate"],"nullable":true},"fees":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["fixed"]},"assetAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"owner":{"type":"string","enum":["conduit","you"],"description":"`conduit` for Conduit's own fee, or `you` for a flat margin you declared with `markupAmount`. A percentage margin sits inside the rate and never appears here."},"charge":{"type":"string","enum":["conversion","payout"],"description":"Which leg this fee prices: `conversion` (the FX leg, in the source asset) or `payout` (the rail withdrawal, in the destination asset). A payout-mode option prices both legs at once; a conversion-only or withdrawal-only option carries one kind."}},"required":["type","assetAmount","owner","charge"]}},"sourceAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"destinationAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"recipientAmount":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"totalDebit":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false}},"required":["id","rail","rate","fees","sourceAmount","destinationAmount","recipientAmount","totalDebit"]}},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"}},"required":["id","sourceAssetRef","destinationAssetRef","lockSide","amount","options","expiresAt","createdAt"]},"SimulateCustomerRestrictionBodyDto":{"type":"object","properties":{"restrictionType":{"type":"string","enum":["full_freeze","withdrawals_suspended","conversions_disabled","yield_disabled"],"description":"The restriction. A full freeze blocks every money movement. A withdrawal suspension blocks payouts and offramps. A conversion restriction blocks conversions, onramps and offramps."}},"required":["restrictionType"],"additionalProperties":false},"SandboxCustomerRestrictionsResponseDto":{"type":"object","properties":{"customerId":{"type":"string","pattern":"^cus_[0-9A-Za-z]{22}$","description":"The customer."},"activeRestrictions":{"type":"array","items":{"type":"string","enum":["full_freeze","withdrawals_suspended","conversions_disabled","yield_disabled"]},"description":"The restrictions now active on the customer itself. A restriction on your organization is not listed and still applies."}},"required":["customerId","activeRestrictions"]},"WebhookEndpointListResponseDto":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^wep_[0-9A-Za-z]{22}$","description":"Unique webhook endpoint identifier"},"url":{"type":"string","description":"URL where webhook payloads are delivered","example":"https://api.example.com/webhooks/conduit"},"description":{"type":"string","description":"Human-readable description of this endpoint's purpose","example":"Production webhook receiver","nullable":true},"status":{"description":"Whether this endpoint is currently receiving new deliveries. When `disabled`, the endpoint is excluded from event fan-out — no new deliveries are enqueued. In-flight (already-enqueued) deliveries are not cancelled and continue retrying per the normal schedule. Set back to `active` via PATCH to resume receiving new deliveries.","type":"string","enum":["active","disabled"]},"subscription":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["all"]}},"required":["mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["selected"]},"eventTypes":{"type":"array","items":{"type":"string"},"description":"Event types this endpoint is subscribed to","example":["customer.created","application.approved"]}},"required":["mode","eventTypes"]}],"description":"Event subscription configuration for this endpoint"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"}},"required":["id","url","description","status","subscription","createdAt","updatedAt"]}},"meta":{"type":"object","properties":{"mode":{"type":"string","description":"Pagination mode","example":"cursor","enum":["cursor"]},"nextCursor":{"type":"string","description":"Cursor for the page after this one. Use it with `direction=forward`; it is `null` when no more rows follow. A backward page always carries one, so do not loop on it while `direction=backward`.","example":"eyJpZCI6ImN1c18yeFBxTjhSIn0","nullable":true},"previousCursor":{"type":"string","description":"Cursor for the page before this one. Use it with `direction=backward`. It is `null` on the first page of a forward walk and when no earlier rows remain.","example":null,"nullable":true},"total":{"type":"number","description":"Total number of records matching the query","example":42}},"required":["mode","nextCursor","previousCursor","total"]}},"required":["data","meta"]},"WebhookEndpointResponseDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^wep_[0-9A-Za-z]{22}$","description":"Unique webhook endpoint identifier"},"url":{"type":"string","description":"URL where webhook payloads are delivered","example":"https://api.example.com/webhooks/conduit"},"description":{"type":"string","description":"Human-readable description of this endpoint's purpose","example":"Production webhook receiver","nullable":true},"status":{"description":"Whether this endpoint is currently receiving new deliveries. When `disabled`, the endpoint is excluded from event fan-out — no new deliveries are enqueued. In-flight (already-enqueued) deliveries are not cancelled and continue retrying per the normal schedule. Set back to `active` via PATCH to resume receiving new deliveries.","type":"string","enum":["active","disabled"]},"subscription":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["all"]}},"required":["mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["selected"]},"eventTypes":{"type":"array","items":{"type":"string"},"description":"Event types this endpoint is subscribed to","example":["customer.created","application.approved"]}},"required":["mode","eventTypes"]}],"description":"Event subscription configuration for this endpoint"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"}},"required":["id","url","description","status","subscription","createdAt","updatedAt"]},"CreateEndpointDto":{"type":"object","properties":{"url":{"type":"string","maxLength":2048,"format":"uri","description":"URL where webhook payloads will be delivered. Must be HTTPS; a URL that resolves to a private or reserved address is rejected.","example":"https://api.example.com/webhooks/conduit"},"description":{"description":"Human-readable description of this endpoint's purpose","example":"Production webhook receiver","type":"string","maxLength":255},"subscription":{"description":"Event subscription configuration. Omit or set mode:'all' to receive all events.","example":{"mode":"all"},"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["all"]}},"required":["mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["selected"]},"eventTypes":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","enum":["application.approved","application.rejected","claim.completed","claim.failed","crypto_wallet.completed","customer.created","customer.restricted","idv_link.created","order.cancelled","order.created","order.failed","order.succeeded","organization.activated","organization.restricted","rfi.cancelled","rfi.deadline_extended","rfi.more_info_requested","rfi.published","rfi.resolved","rfi.response_submitted","transaction.awaiting_recovery_signature","transaction.awaiting_return_signature","transaction.awaiting_sender_information","transaction.awaiting_signature","transaction.awaiting_user_signature","transaction.cancelled","transaction.completed","transaction.created","transaction.failed","transaction.processing","transaction.queue_position_changed","transaction.quorum_met","transaction.rejected","transaction.signature_collected","transaction.under_review","virtual_account.activated","virtual_account.updated","wallet_ceremony.awaiting_admin_approval","wallet_ceremony.completed","wallet_ceremony.failed","wallet_signer.added","wallet_signer.awaiting_admin_approval","wallet_signer.demoted","wallet_signer.enrolled","wallet_signer.enrollment_approved","wallet_signer.invited","wallet_signer.promoted","wallet_signer.recovery_opened","wallet_signer.removed","wallet.awaiting_setup_signature","wallet.created","wallet.deleted","wallet.rotated","wallet.threshold_changed","whitelist_recipient.registered","whitelist_recipient.rejected","whitelist_recipient.revoked","whitelist_recipient.suspended"]},"description":"Event types to subscribe to","example":["customer.created","application.approved"]}},"required":["mode","eventTypes"]}]}},"required":["url"],"additionalProperties":false},"WebhookEndpointCreatedResponseDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^wep_[0-9A-Za-z]{22}$","description":"Unique webhook endpoint identifier"},"url":{"type":"string","description":"URL where webhook payloads are delivered","example":"https://api.example.com/webhooks/conduit"},"description":{"type":"string","description":"Human-readable description of this endpoint's purpose","example":"Production webhook receiver","nullable":true},"status":{"description":"Whether this endpoint is currently receiving new deliveries. When `disabled`, the endpoint is excluded from event fan-out — no new deliveries are enqueued. In-flight (already-enqueued) deliveries are not cancelled and continue retrying per the normal schedule. Set back to `active` via PATCH to resume receiving new deliveries.","type":"string","enum":["active","disabled"]},"subscription":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["all"]}},"required":["mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["selected"]},"eventTypes":{"type":"array","items":{"type":"string"},"description":"Event types this endpoint is subscribed to","example":["customer.created","application.approved"]}},"required":["mode","eventTypes"]}],"description":"Event subscription configuration for this endpoint"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"secret":{"type":"string","description":"Per-endpoint signing secret. Returned only once — when the endpoint is created and again each time its secret is rotated — so store it securely. Format: literal `whsec_` prefix + 64 hex chars (see `signature.secretFormat`). Pass the FULL string verbatim, including the `whsec_` prefix, as the HMAC-SHA256 key when verifying incoming `X-Conduit-Signature` headers — stripping the prefix produces a different digest and every valid delivery fails verification.","example":"whsec_8f3a2b1c4d5e6f7081928374a5b6c7d8e9f0a1b2c3d4e5f60718293a4b5c6d7e"},"signature":{"type":"object","properties":{"algorithm":{"type":"string","description":"Algorithm used to sign webhook deliveries. Verify with `crypto.createHmac('sha256', secret)`.","enum":["hmac-sha256"]},"headerName":{"type":"string","description":"Name of the HTTP header carrying the signature on every delivery.","enum":["X-Conduit-Signature"]},"headerFormat":{"type":"string","description":"Header value format. `t` is the unix epoch in seconds when the delivery was signed; each `v1` is a hex-encoded HMAC digest. Deliveries normally carry one `v1`. During a signing-secret rotation grace window the header carries multiple comma-separated `v1=` segments — one per currently-valid secret (new and previous). Verify by recomputing the digest for your secret and accepting if it matches ANY `v1` segment.","enum":["t=<unix-seconds>,v1=<hex-digest>[,v1=<hex-digest>]"]},"signedPayloadFormat":{"type":"string","description":"Canonical form fed to the HMAC: the unix timestamp, a literal `.`, then the raw request body. Verify by recomputing this against the header `t` and comparing the digest.","enum":["<unix-seconds>.<raw-request-body>"]},"secretFormat":{"type":"string","description":"Per-endpoint signing secret format: the literal prefix `whsec_` followed by 64 lowercase hex characters. The FULL string, including the `whsec_` prefix, is the HMAC-SHA256 key — do NOT strip the prefix before passing the secret to `crypto.createHmac`. Stripping the prefix produces a different digest and every valid delivery looks indistinguishable from signature tampering (silent rejection, no diagnostic).","enum":["whsec_<64-hex>"]}},"required":["algorithm","headerName","headerFormat","signedPayloadFormat","secretFormat"],"additionalProperties":false,"description":"Signature verification metadata. Same constants apply to every webhook delivery; signing secrets are per-endpoint."}},"required":["id","url","description","status","subscription","createdAt","updatedAt","secret","signature"]},"UpdateEndpointDto":{"type":"object","properties":{"url":{"description":"URL where webhook payloads will be delivered. Must be HTTPS; a URL that resolves to a private or reserved address is rejected.","example":"https://api.example.com/webhooks/conduit","type":"string","maxLength":2048,"format":"uri"},"description":{"description":"Human-readable description of this endpoint's purpose","example":"Production webhook receiver","type":"string","maxLength":255},"status":{"description":"Set to `disabled` to pause deliveries without deleting the endpoint; set to `active` to resume.","type":"string","enum":["active","disabled"]},"subscription":{"description":"Event subscription configuration","example":{"mode":"selected","eventTypes":["customer.created"]},"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["all"]}},"required":["mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["selected"]},"eventTypes":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","enum":["application.approved","application.rejected","claim.completed","claim.failed","crypto_wallet.completed","customer.created","customer.restricted","idv_link.created","order.cancelled","order.created","order.failed","order.succeeded","organization.activated","organization.restricted","rfi.cancelled","rfi.deadline_extended","rfi.more_info_requested","rfi.published","rfi.resolved","rfi.response_submitted","transaction.awaiting_recovery_signature","transaction.awaiting_return_signature","transaction.awaiting_sender_information","transaction.awaiting_signature","transaction.awaiting_user_signature","transaction.cancelled","transaction.completed","transaction.created","transaction.failed","transaction.processing","transaction.queue_position_changed","transaction.quorum_met","transaction.rejected","transaction.signature_collected","transaction.under_review","virtual_account.activated","virtual_account.updated","wallet_ceremony.awaiting_admin_approval","wallet_ceremony.completed","wallet_ceremony.failed","wallet_signer.added","wallet_signer.awaiting_admin_approval","wallet_signer.demoted","wallet_signer.enrolled","wallet_signer.enrollment_approved","wallet_signer.invited","wallet_signer.promoted","wallet_signer.recovery_opened","wallet_signer.removed","wallet.awaiting_setup_signature","wallet.created","wallet.deleted","wallet.rotated","wallet.threshold_changed","whitelist_recipient.registered","whitelist_recipient.rejected","whitelist_recipient.revoked","whitelist_recipient.suspended"]},"description":"Event types to subscribe to","example":["customer.created","application.approved"]}},"required":["mode","eventTypes"]}]}},"additionalProperties":false},"PaginatedWebhookDeliveriesResponseDto":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^wdl_[0-9A-Za-z]{22}$","description":"Unique webhook delivery identifier"},"endpointId":{"type":"string","pattern":"^wep_[0-9A-Za-z]{22}$","description":"The endpoint this delivery is targeted at"},"eventType":{"type":"string","description":"Event type that triggered this delivery. A delivery kept from before an event type was retired still carries the retired name, so treat this as an open set and read the current list from `GET /v2/webhooks/event-types`.","example":"customer.created"},"payload":{"type":"object","properties":{"id":{"type":"string","description":"Unique event identifier","example":"evt_2xKjF9mQb7vN4hL1pR3w8t"},"type":{"type":"string","description":"Event type, for example `customer.created`","example":"customer.created"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"ISO 8601 timestamp when the event occurred","example":"2026-01-15T09:30:00.000Z"},"apiVersion":{"type":"string","description":"Public API major version.","enum":["2"]},"mode":{"type":"string","enum":["live","sandbox"],"description":"Mode of the environment where the event occurred. Lets a single endpoint or reader tell production events from sandbox events."},"data":{"type":"object","additionalProperties":{},"description":"Event payload data. Its shape follows `type` — the field tables for every event type are on the Webhooks reference page."}},"required":["id","type","createdAt","apiVersion","mode","data"],"description":"The webhook event payload"},"status":{"description":"Current delivery status","type":"string","enum":["pending","processing","succeeded","failed"]},"attempts":{"type":"number","description":"Number of delivery attempts made so far","example":1},"maxAttempts":{"type":"number","description":"Maximum number of delivery attempts before giving up","example":5},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"completedAt":{"type":"string","format":"date-time","description":"Timestamp when the delivery completed, null if still in progress","example":"2026-01-15T09:30:00.000Z","nullable":true}},"required":["id","endpointId","eventType","payload","status","attempts","maxAttempts","createdAt","updatedAt","completedAt"]}},"meta":{"type":"object","properties":{"mode":{"type":"string","description":"Pagination mode","example":"cursor","enum":["cursor"]},"nextCursor":{"type":"string","description":"Cursor for the page after this one. Use it with `direction=forward`; it is `null` when no more rows follow. A backward page always carries one, so do not loop on it while `direction=backward`.","example":"eyJpZCI6ImN1c18yeFBxTjhSIn0","nullable":true},"previousCursor":{"type":"string","description":"Cursor for the page before this one. Use it with `direction=backward`. It is `null` on the first page of a forward walk and when no earlier rows remain.","example":null,"nullable":true},"total":{"type":"number","description":"Total number of records matching the query","example":42}},"required":["mode","nextCursor","previousCursor","total"]}},"required":["data","meta"]},"WebhookDeliveryDetailResponseDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^wdl_[0-9A-Za-z]{22}$","description":"Unique webhook delivery identifier"},"endpointId":{"type":"string","pattern":"^wep_[0-9A-Za-z]{22}$","description":"The endpoint this delivery is targeted at"},"eventType":{"type":"string","description":"Event type that triggered this delivery. A delivery kept from before an event type was retired still carries the retired name, so treat this as an open set and read the current list from `GET /v2/webhooks/event-types`.","example":"customer.created"},"payload":{"type":"object","properties":{"id":{"type":"string","description":"Unique event identifier","example":"evt_2xKjF9mQb7vN4hL1pR3w8t"},"type":{"type":"string","description":"Event type, for example `customer.created`","example":"customer.created"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"ISO 8601 timestamp when the event occurred","example":"2026-01-15T09:30:00.000Z"},"apiVersion":{"type":"string","description":"Public API major version.","enum":["2"]},"mode":{"type":"string","enum":["live","sandbox"],"description":"Mode of the environment where the event occurred. Lets a single endpoint or reader tell production events from sandbox events."},"data":{"type":"object","additionalProperties":{},"description":"Event payload data. Its shape follows `type` — the field tables for every event type are on the Webhooks reference page."}},"required":["id","type","createdAt","apiVersion","mode","data"],"description":"The webhook event payload"},"status":{"description":"Current delivery status","type":"string","enum":["pending","processing","succeeded","failed"]},"attempts":{"type":"number","description":"Number of delivery attempts made so far","example":1},"maxAttempts":{"type":"number","description":"Maximum number of delivery attempts before giving up","example":5},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"completedAt":{"type":"string","format":"date-time","description":"Timestamp when the delivery completed, null if still in progress","example":"2026-01-15T09:30:00.000Z","nullable":true},"deliveryAttempts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^wda_[0-9A-Za-z]{22}$","description":"Unique delivery attempt identifier"},"attemptNumber":{"type":"number","description":"Sequential attempt number starting from 1","example":1},"statusCode":{"type":"number","description":"HTTP status code returned by the endpoint, null if the request failed before a response","example":200,"nullable":true},"responseBody":{"type":"string","description":"Response body from the endpoint, truncated if large","example":"OK","nullable":true},"error":{"type":"string","description":"Error message if the delivery attempt failed","example":null,"nullable":true},"durationMs":{"type":"number","description":"Round-trip time of the delivery attempt in milliseconds","example":245,"nullable":true},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"}},"required":["id","attemptNumber","statusCode","responseBody","error","durationMs","createdAt"]},"description":"Chronological list of all delivery attempts"}},"required":["id","endpointId","eventType","payload","status","attempts","maxAttempts","createdAt","updatedAt","completedAt","deliveryAttempts"]},"WebhookDeliveryResponseDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^wdl_[0-9A-Za-z]{22}$","description":"Unique webhook delivery identifier"},"endpointId":{"type":"string","pattern":"^wep_[0-9A-Za-z]{22}$","description":"The endpoint this delivery is targeted at"},"eventType":{"type":"string","description":"Event type that triggered this delivery. A delivery kept from before an event type was retired still carries the retired name, so treat this as an open set and read the current list from `GET /v2/webhooks/event-types`.","example":"customer.created"},"payload":{"type":"object","properties":{"id":{"type":"string","description":"Unique event identifier","example":"evt_2xKjF9mQb7vN4hL1pR3w8t"},"type":{"type":"string","description":"Event type, for example `customer.created`","example":"customer.created"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"ISO 8601 timestamp when the event occurred","example":"2026-01-15T09:30:00.000Z"},"apiVersion":{"type":"string","description":"Public API major version.","enum":["2"]},"mode":{"type":"string","enum":["live","sandbox"],"description":"Mode of the environment where the event occurred. Lets a single endpoint or reader tell production events from sandbox events."},"data":{"type":"object","additionalProperties":{},"description":"Event payload data. Its shape follows `type` — the field tables for every event type are on the Webhooks reference page."}},"required":["id","type","createdAt","apiVersion","mode","data"],"description":"The webhook event payload"},"status":{"description":"Current delivery status","type":"string","enum":["pending","processing","succeeded","failed"]},"attempts":{"type":"number","description":"Number of delivery attempts made so far","example":1},"maxAttempts":{"type":"number","description":"Maximum number of delivery attempts before giving up","example":5},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp","example":"2026-01-15T09:30:00.000Z"},"completedAt":{"type":"string","format":"date-time","description":"Timestamp when the delivery completed, null if still in progress","example":"2026-01-15T09:30:00.000Z","nullable":true}},"required":["id","endpointId","eventType","payload","status","attempts","maxAttempts","createdAt","updatedAt","completedAt"]},"WebhookEventTypeListResponseDto":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"eventType":{"type":"string","description":"Event type identifier used when subscribing to events","example":"application.approved","enum":["application.approved","application.rejected","claim.completed","claim.failed","crypto_wallet.completed","customer.created","customer.restricted","idv_link.created","order.cancelled","order.created","order.failed","order.succeeded","organization.activated","organization.restricted","rfi.cancelled","rfi.deadline_extended","rfi.more_info_requested","rfi.published","rfi.resolved","rfi.response_submitted","transaction.awaiting_recovery_signature","transaction.awaiting_return_signature","transaction.awaiting_sender_information","transaction.awaiting_signature","transaction.awaiting_user_signature","transaction.cancelled","transaction.completed","transaction.created","transaction.failed","transaction.processing","transaction.queue_position_changed","transaction.quorum_met","transaction.rejected","transaction.signature_collected","transaction.under_review","virtual_account.activated","virtual_account.updated","wallet_ceremony.awaiting_admin_approval","wallet_ceremony.completed","wallet_ceremony.failed","wallet_signer.added","wallet_signer.awaiting_admin_approval","wallet_signer.demoted","wallet_signer.enrolled","wallet_signer.enrollment_approved","wallet_signer.invited","wallet_signer.promoted","wallet_signer.recovery_opened","wallet_signer.removed","wallet.awaiting_setup_signature","wallet.created","wallet.deleted","wallet.rotated","wallet.threshold_changed","whitelist_recipient.registered","whitelist_recipient.rejected","whitelist_recipient.revoked","whitelist_recipient.suspended"]},"description":{"type":"string","description":"Human-readable description of when this event fires","example":"Fired when a customer onboarding application is approved"},"category":{"type":"string","enum":["onboarding","transaction","wallet","admin","whitelist","compliance"],"description":"Domain bucket for this event. Lets integrators wire one handler per concern without parsing the dotted event name."},"lifecycle":{"type":"string","enum":["stable","beta","deprecated"],"description":"Stability of this event type. `stable` events have a contract you can build against; `beta` may change shape; `deprecated` will be removed in a future major version."},"exampleData":{"type":"object","additionalProperties":{},"description":"Example data block for this event type. The field tables for every event type are on the Webhooks reference page."}},"required":["eventType","description","category","lifecycle","exampleData"]},"description":"All subscribable event types. Use the `eventType` value verbatim in `subscription.eventTypes` when creating a `selected`-mode endpoint."},"signature":{"type":"object","properties":{"algorithm":{"type":"string","description":"Algorithm used to sign webhook deliveries. Verify with `crypto.createHmac('sha256', secret)`.","enum":["hmac-sha256"]},"headerName":{"type":"string","description":"Name of the HTTP header carrying the signature on every delivery.","enum":["X-Conduit-Signature"]},"headerFormat":{"type":"string","description":"Header value format. `t` is the unix epoch in seconds when the delivery was signed; each `v1` is a hex-encoded HMAC digest. Deliveries normally carry one `v1`. During a signing-secret rotation grace window the header carries multiple comma-separated `v1=` segments — one per currently-valid secret (new and previous). Verify by recomputing the digest for your secret and accepting if it matches ANY `v1` segment.","enum":["t=<unix-seconds>,v1=<hex-digest>[,v1=<hex-digest>]"]},"signedPayloadFormat":{"type":"string","description":"Canonical form fed to the HMAC: the unix timestamp, a literal `.`, then the raw request body. Verify by recomputing this against the header `t` and comparing the digest.","enum":["<unix-seconds>.<raw-request-body>"]},"secretFormat":{"type":"string","description":"Per-endpoint signing secret format: the literal prefix `whsec_` followed by 64 lowercase hex characters. The FULL string, including the `whsec_` prefix, is the HMAC-SHA256 key — do NOT strip the prefix before passing the secret to `crypto.createHmac`. Stripping the prefix produces a different digest and every valid delivery looks indistinguishable from signature tampering (silent rejection, no diagnostic).","enum":["whsec_<64-hex>"]}},"required":["algorithm","headerName","headerFormat","signedPayloadFormat","secretFormat"],"additionalProperties":false,"description":"Signature verification metadata. Same constants apply to every webhook delivery; signing secrets are per-endpoint."}},"required":["data","signature"]},"PaginatedEventsResponseDto":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique event identifier","example":"evt_2xKjF9mQb7vN4hL1pR3w8t"},"type":{"type":"string","description":"Event type, for example `customer.created`","example":"customer.created"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"ISO 8601 timestamp when the event occurred","example":"2026-01-15T09:30:00.000Z"},"apiVersion":{"type":"string","description":"Public API major version.","enum":["2"]},"mode":{"type":"string","enum":["live","sandbox"],"description":"Mode of the environment where the event occurred. Lets a single endpoint or reader tell production events from sandbox events."},"data":{"type":"object","additionalProperties":{},"description":"Event payload data. Its shape follows `type` — the field tables for every event type are on the Webhooks reference page."}},"required":["id","type","createdAt","apiVersion","mode","data"]}},"meta":{"type":"object","properties":{"mode":{"type":"string","description":"Pagination mode","example":"cursor","enum":["cursor"]},"nextCursor":{"type":"string","description":"Cursor for the page after this one. Use it with `direction=forward`; it is `null` when no more rows follow. A backward page always carries one, so do not loop on it while `direction=backward`.","example":"eyJpZCI6ImN1c18yeFBxTjhSIn0","nullable":true},"previousCursor":{"type":"string","description":"Cursor for the page before this one. Use it with `direction=backward`. It is `null` on the first page of a forward walk and when no earlier rows remain.","example":null,"nullable":true},"total":{"type":"number","description":"Total number of records matching the query","example":42}},"required":["mode","nextCursor","previousCursor","total"]}},"required":["data","meta"]},"EventResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique event identifier","example":"evt_2xKjF9mQb7vN4hL1pR3w8t"},"type":{"type":"string","description":"Event type, for example `customer.created`","example":"customer.created"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"ISO 8601 timestamp when the event occurred","example":"2026-01-15T09:30:00.000Z"},"apiVersion":{"type":"string","description":"Public API major version.","enum":["2"]},"mode":{"type":"string","enum":["live","sandbox"],"description":"Mode of the environment where the event occurred. Lets a single endpoint or reader tell production events from sandbox events."},"data":{"type":"object","additionalProperties":{},"description":"Event payload data. Its shape follows `type` — the field tables for every event type are on the Webhooks reference page."}},"required":["id","type","createdAt","apiVersion","mode","data"]},"FeatureRequestDto__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"maxItems":100,"type":"array","items":{"$ref":"#/components/schemas/FeatureRequestDto__schema0"}},{"type":"object","additionalProperties":{"$ref":"#/components/schemas/FeatureRequestDto__schema0"}},{"type":"object","nullable":true,"enum":[null]}]},"FeatureRequestDto":{"type":"object","properties":{"type":{"type":"string","enum":["virtual_account","crypto_wallet","yield"],"description":"The feature being requested"},"clientReferenceId":{"description":"Client-supplied reference for the application this feature request creates. Stored on that application and echoed on it, so GET /v2/applications?clientReferenceId= finds it again. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces.","example":"ext-feature-001","type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$"},"fields":{"description":"Key-value data required by the feature's requirements","type":"object","additionalProperties":false,"properties":{"businessInfo":{"type":"object","description":"Business-level data about the entity.","properties":{"legalName":{"type":"string","description":"The full legal name of the entity as registered with government authorities (matches its Articles of Incorporation or equivalent formation document). Do not abbreviate.","maxLength":255},"alternateNameDba":{"type":"string","description":"Any trading name, brand name, or 'doing business as' (DBA) the company uses publicly that differs from the legal name. Leave blank if the company only trades under the legal name.","maxLength":255},"businessEntityId":{"type":"string","description":"Business Entity ID","maxLength":255},"taxId":{"type":"string","description":"Tax Identification Number"},"chapter4Status":{"type":"string","description":"The entity's chapter 4 status as stated on line 5 of its Form W-8BEN-E.","enum":["Participating FFI","Reporting Model 1 FFI","Reporting Model 2 FFI","Active NFFE","Passive NFFE"]},"giin":{"type":"string","description":"Global Intermediary Identification Number from the IRS FFI List, line 9a of Form W-8BEN-E; required for an FFI status.","pattern":"^[0-9A-Z]{6}\\.[0-9A-Z]{5}\\.[A-Z]{2}\\.[0-9]{3}$"},"website":{"type":"string","description":"Website","format":"uri","maxLength":500},"companyEmail":{"type":"string","description":"Company Email","format":"email","maxLength":255},"companyPhone":{"type":"string","description":"Company Phone"}}},"registeredAddress":{"type":"object","description":"Registered business address. `country` accepts ISO 3166-1 alpha-2 or alpha-3.","properties":{"country":{"type":"string","description":"Country"},"addressLine1":{"type":"string","description":"Street 1","maxLength":500},"addressLine2":{"type":"string","description":"Street 2","maxLength":500},"city":{"type":"string","description":"City","maxLength":255},"state":{"type":"string","description":"State / Province","maxLength":255},"postalCode":{"type":"string","description":"Zip Code","maxLength":20},"poBox":{"type":"string","description":"P.O. Box Number","pattern":"^[0-9]{4,5}$"}}},"operatingAddress":{"type":"object","description":"Operating address when it differs from the registered one. Same leaves and `country` rules.","properties":{"sameAsRegistered":{"type":"boolean","description":"Is the operating address the same as the registered address?"},"addressLine1":{"type":"string","description":"Street 1"},"addressLine2":{"type":"string","description":"Street 2"},"city":{"type":"string","description":"City"},"state":{"type":"string","description":"State / Province"},"country":{"type":"string","description":"Country"},"postalCode":{"type":"string","description":"Zip Code"}}},"companyClassification":{"type":"object","description":"Legal-structure and industry classification. `legalStructure` and `primaryIndustry` are jurisdiction-specific; take their accepted values from `GET /v2/onboarding/requirements`.","properties":{"legalStructure":{"type":"string","description":"Legal Structure"},"llcTaxClassification":{"type":"string","description":"How the IRS taxes this US LLC: Partnership, C-Corp or S-Corp. A multi-member LLC that made no election is a Partnership. Applies only to an LLC registered in the USA.","enum":["Partnership","C-Corp","S-Corp"]},"legalStructureOther":{"type":"string","description":"Legal Structure (Other)","pattern":"\\S","maxLength":255},"incorporationDate":{"type":"string","description":"Date of Incorporation","format":"date"},"primaryIndustry":{"type":"string","description":"The single industry that best describes your primary revenue source, chosen from the current policy catalog. If the business spans multiple industries, pick the one generating the most revenue rather than the broadest category.","maxLength":120},"primaryIndustryOther":{"type":"string","description":"Primary Industry (Other)","maxLength":500},"hasDba":{"type":"boolean","description":"Has DBA / Trade Name?"},"isPubliclyListed":{"type":"boolean","description":"Publicly Listed?"},"stockExchange":{"type":"string","description":"Stock Exchange","enum":["NYSE","NASDAQ","LSE","JSE","NSE","B3","BMV","SGX","HKEX","TSX","ASX","Other"]},"stockExchangeOther":{"type":"string","description":"Stock Exchange (Other)"},"tickerSymbol":{"type":"string","description":"Ticker Symbol"}}},"businessActivity":{"type":"object","description":"Operating-activity descriptors.","properties":{"businessActivitiesDescription":{"type":"string","description":"Plain-language summary of what the business actually does day-to-day. A paragraph is enough — describe the core economic activity, not the legal form."},"accountPurpose":{"type":"array","description":"Select every USD virtual-account use case that applies, even those that are infrequent. This drives risk-tier categorisation and monitoring thresholds, so being complete is better than picking only the dominant flow.","items":{"type":"string","enum":["Treasury Management","Payroll","Vendor/Supplier Payments","Operating Expenses","Client Collections","Investment","FX Settlement","Escrow","Other"]}},"accountPurposeOther":{"type":"string","description":"Describe the USD VA use case"},"productsServices":{"type":"array","description":"What the business sells to its customers. Internal-use products (HR systems, IT tooling, etc.) are not the target here — focus on what generates revenue. Select all that apply.","items":{"type":"string","enum":["Technology / SaaS Provider","Sale of Goods / Non-Financial Services","Import / Export","Wholesale / Distribution","Investment Advisory","Digital Wallets / Stored Value","Custody","Lending / Credit","Escrow / Settlement Services","Crypto Exchange or Trading","Cross-Border Payments","NFT / DeFi / Web3","Foreign Exchange / Currency Conversion","Card Issuance & Merchant Services","Brokerage / Trading Platform","Asset Management / Fund Services","Precious Metals / High-Value Commodities","Marketplace or Platform Operator","Real Estate / Title / Property Escrow","Crowdfunding / Capital Raising Platforms","Trust and Company Services (TCSP)"]}},"productsServicesOther":{"type":"string","description":"Products / Services (Other)"},"countriesOfActivity":{"type":"array","description":"Countries where the business has customers, counterparties, or operations. Include jurisdictions where the business receives payments, sends payments, or holds assets — not just the country of incorporation.","items":{"type":"string","enum":["AFG","ALB","DZA","ASM","AND","AGO","AIA","ATA","ATG","ARG","ARM","ABW","AUS","AUT","AZE","BHS","BHR","BGD","BRB","BLR","BEL","BLZ","BEN","BMU","BTN","BOL","BES","BIH","BWA","BVT","BRA","IOT","BRN","BGR","BFA","BDI","CPV","KHM","CMR","CAN","CYM","CAF","TCD","CHL","CHN","CXR","CCK","COL","COM","COG","COD","COK","CRI","CIV","HRV","CUB","CUW","CYP","CZE","DNK","DJI","DMA","DOM","ECU","EGY","SLV","GNQ","ERI","EST","SWZ","ETH","FLK","FRO","FJI","FIN","FRA","GUF","PYF","ATF","GAB","GMB","GEO","DEU","GHA","GIB","GRC","GRL","GRD","GLP","GUM","GTM","GGY","GIN","GNB","GUY","HTI","HMD","VAT","HND","HKG","HUN","ISL","IND","IDN","IRN","IRQ","IRL","IMN","ISR","ITA","JAM","JPN","JEY","JOR","KAZ","KEN","KIR","PRK","KOR","KWT","KGZ","LAO","LVA","LBN","LSO","LBR","LBY","LIE","LTU","LUX","MAC","MDG","MWI","MYS","MDV","MLI","MLT","MHL","MTQ","MRT","MUS","MYT","MEX","FSM","MDA","MCO","MNG","MNE","MSR","MAR","MOZ","MMR","NAM","NRU","NPL","NLD","NCL","NZL","NIC","NER","NGA","NIU","NFK","MKD","MNP","NOR","OMN","PAK","PLW","PSE","PAN","PNG","PRY","PER","PHL","PCN","POL","PRT","PRI","QAT","REU","ROU","RUS","RWA","BLM","SHN","KNA","LCA","MAF","SPM","VCT","WSM","SMR","STP","SAU","SEN","SRB","SYC","SLE","SGP","SXM","SVK","SVN","SLB","SOM","ZAF","SGS","SSD","ESP","LKA","SDN","SUR","SJM","SWE","CHE","SYR","TWN","TJK","TZA","THA","TLS","TGO","TKL","TON","TTO","TUN","TUR","TKM","TCA","TUV","UGA","UKR","ARE","GBR","USA","UMI","URY","UZB","VUT","VEN","VNM","VGB","VIR","WLF","ESH","YEM","ZMB","ZWE"]}},"countriesOfActivityOther":{"type":"string","description":"Countries of Activity (Other)"},"avgMonthlyVolume":{"type":"string","description":"Expected average USD value flowing through the business's Conduit virtual account each month, across all in- and out-bound transactions combined.","enum":["VOLUME_LT_10K","VOLUME_10K_50K","VOLUME_50K_250K","VOLUME_250K_1M","VOLUME_GT_1M"]},"estimatedTransactionsPerMonth":{"type":"string","description":"Expected average count of transactions per month through the business's Conduit virtual account, across all flows combined (deposits, withdrawals, conversions).","enum":["<10","10-50","50-200","200-1,000","1,000+"]},"sourceOfFunds":{"type":"array","description":"Where the money the business expects to receive through Conduit originates. Select all that apply (e.g. customer revenue, investor capital, lending proceeds). Use the 'Other' follow-up for sources not on the list.","items":{"type":"string","enum":["Revenue/Sales","VC/PE Investment","Loans/Debt Financing","Government Grant","Personal/Founder Funds","Donations","Other"]}},"sourceOfFundsOther":{"type":"string","description":"Source of Funds (Other)"},"fundFlowDescription":{"type":"string","description":"Describe the typical end-to-end flow of funds through the business: who sends money in, what triggers the inbound flow, and where the money is ultimately paid out. One or two paragraphs."},"isRegulated":{"type":"boolean","description":"Regulated / Financial Services?"},"regulatoryAuthorities":{"type":"array","description":"Regulatory Authorities","items":{"type":"string","enum":["Central Bank of Kenya","FCA","SEC","OCC","FinCEN","SARB","CBN","BdF","BaFin","MAS","Other"]}},"regulatoryAuthorityOther":{"type":"string","description":"Regulatory Authority (Other)"},"licenseNumber":{"type":"string","description":"License / Registration Number"},"isNonbankFinancialInstitution":{"type":"boolean","description":"Yes if the business provides financial services without holding a banking charter — e.g. lending, money transmission or payment services, broker-dealer or investment advisory activity, insurance, currency exchange, or consumer finance. Chartered banks and credit unions answer No."},"operatesOnBehalf":{"type":"boolean","description":"Select Yes if the business receives, holds or sends money that belongs to its own clients or customers. Select No if the business only moves its own money, including payments to its own vendors or suppliers."},"holdsClientFundsInVirtualAccounts":{"type":"boolean","description":"Select Yes if the business holds, receives or sends funds that belong to its clients through virtual accounts opened in its name. Select No if every virtual account holds only the company's own funds."},"usesBlockchainWallets":{"type":"boolean","description":"Uses Blockchain Wallets?"},"onBehalfDescription":{"type":"string","description":"On Behalf Description"},"walletAddresses":{"type":"string","description":"Blockchain Wallet Addresses"},"walletExchanges":{"type":"string","description":"Blockchain Wallet Exchanges"},"isGeneratingRevenue":{"type":"boolean","description":"Currently Generating Revenue?"},"revenueCovers":{"type":"string","description":"What share of the business's monthly operating expenses its revenue currently covers, on average over the trailing three months.","enum":["All operating expenses","Most","Some","Minimal"]},"hasInstitutionalInvestors":{"type":"boolean","description":"Yes if the business has raised capital from venture capital, private equity, hedge funds, family offices, or strategic corporate investors. Friends-and-family or solo-angel equity does not count as institutional."},"financialRunway":{"type":"string","description":"Financial Runway (Months)","enum":["RUNWAY_LT_3M","RUNWAY_3M_6M","RUNWAY_6M_12M","RUNWAY_GT_12M"]},"cashOnHand":{"type":"string","description":"Total liquid funds the business currently holds across all business accounts (cash, money-market, short-dated treasuries). Excludes owners' personal accounts and illiquid or locked-up assets.","enum":["<$50K","$50K-$250K","$250K-$1M","$1M-$5M","$5M-$25M","$25M+"]},"runwayExplanation":{"type":"string","description":"Runway Explanation"},"hasIndependentAmlAudit":{"type":"boolean","description":"Has Independent AML Audit?"},"hasHighRiskIndustries":{"type":"boolean","description":"Answer Yes if the business directly participates in or earns revenue from any of these high-risk industries: Adult Entertainment, Cannabis/Marijuana, Cryptocurrency/Digital Assets, Firearms/Ammunition, Gambling/Online Gaming, Money Services Business, Precious Metals/Stones, Third-Party Payment Processing, Virtual Currency/Digital Tokens, Pawnbroker, Tobacco, Pharmaceutical Sales (Online), Shell Banks, Non-Profit / Charity, Cash-Intensive Retail. If the activity isn't listed but is high-risk, answer Yes and select \"Other\" to describe it."},"highRiskIndustries":{"type":"array","description":"Industries the business directly participates in or earns revenue from. This asks about direct participation, not incidental exposure (e.g. having a customer in a high-risk industry). Select 'Other' if the activity isn't listed, then describe it.","items":{"type":"string","enum":["Adult Entertainment","Cannabis/Marijuana","Cryptocurrency/Digital Assets","Firearms/Ammunition","Gambling/Online Gaming","Money Services Business","Precious Metals/Stones","Third-Party Payment Processing","Virtual Currency/Digital Tokens","Pawnbroker","Tobacco","Pharmaceutical Sales (Online)","Shell Banks","Non-Profit / Charity","Cash-Intensive Retail","Other","None of the Above"]}},"highRiskDetails":{"type":"string","description":"High-Risk Details"},"hasRegulatedOrRestrictedActivities":{"type":"boolean","description":"Answer Yes if the business directly participates in or earns revenue from any activity on the current policy catalog. If the activity isn't listed but is regulated or restricted, answer Yes and select \"Other\" to describe it."},"regulatedOrRestrictedActivities":{"type":"array","description":"Activities the business directly participates in or earns revenue from, chosen from the current policy catalog. This asks about direct participation, not incidental exposure. \"Other\" is composable with named activities — select it alongside any that apply, then describe it below.","items":{"type":"string"}},"otherActivityDescription":{"type":"string","description":"Other Activity Description","maxLength":500}}},"compliance":{"type":"object","description":"Compliance-programme attestations.","properties":{"hasComplianceProgram":{"type":"boolean","description":"Yes if the business has documented BSA/AML or KYC policies, named a compliance owner, and operates ongoing controls (screening, monitoring, periodic reviews). Informal or ad-hoc controls do not qualify as a 'program'."},"complianceManager":{"type":"string","description":"Compliance Manager"},"complianceManagerEmail":{"type":"string","description":"Compliance Manager Email","format":"email"},"sanctionsScreening":{"type":"string","description":"How the business screens customers and counterparties against sanctions lists (OFAC, UN, EU). Pick the primary method: automated vendor (e.g. ComplyAdvantage, LexisNexis, Refinitiv), in-house tooling, manual checks against published lists, or none.","enum":["Chainalysis","Elliptic","ComplyAdvantage","Sardine","TRM Labs","Refinitiv World-Check","Dow Jones Risk & Compliance","LexisNexis","Sanctions.io","Manual OFAC List Checks","No Screening","Other"]},"sanctionsScreeningOther":{"type":"string","description":"Sanctions Screening (Other)"},"cddMethod":{"type":"string","description":"How the business verifies the identity of its customers and their beneficial owners (Customer Due Diligence). Pick the primary approach: third-party KYC vendor, in-house workflow, document-only review at onboarding, or none.","enum":["Jumio","Onfido","Veriff","Sumsub","Persona","Alloy","Trulioo","LexisNexis","Plaid Identity Verification","Manual Document Review","No CDD Process","Other"]},"cddMethodOther":{"type":"string","description":"Customer Due Diligence Method (Other)"},"transactionMonitoring":{"type":"array","description":"How the business flags unusual transaction patterns post-onboarding. Select all that apply: rule-based engines, vendor platforms, manual review against thresholds, periodic file review, etc.","items":{"type":"string","enum":["Chainalysis KYT","Elliptic Lens","ComplyAdvantage","Sardine","TRM Labs","Featurespace","Manual Monitoring","No Transaction Monitoring","Other"]}},"transactionMonitoringOther":{"type":"string","description":"Transaction Monitoring (Other)"},"complianceTraining":{"type":"array","description":"Compliance Training Programs","items":{"type":"string","enum":["Annual AML/KYC Training","Role-Specific Compliance Training","External Compliance Certifications","Ad Hoc Training Only","No Formal Training Program"]}},"hasAmlAudit":{"type":"boolean","description":"Has Independent AML Audit?"},"noAuditExplanation":{"type":"string","description":"No Audit Explanation"},"auditIntention":{"type":"string","description":"Audit Intention"},"leadershipExperience":{"type":"string","description":"Aggregate years of BSA / AML / financial-compliance experience among the leadership responsible for the program — typically the compliance manager or MLRO, plus the CEO if owner-operator.","enum":["Extensive (5+ years in compliance/regulated industry)","Moderate (2-5 years in compliance/regulated industry)","Limited (Less than 2 years or no direct experience)"]}}},"regulatoryHistory":{"type":"object","description":"Regulatory and adverse-action history.","properties":{"hasUSBankAccount":{"type":"boolean","description":"Existing US Bank Account?"},"deniedBankAccount":{"type":"boolean","description":"Ever Denied a US Bank Account?"},"deniedBankAccountDetails":{"type":"string","description":"The reason the bank gave for denying the account. Do not enter account or routing numbers."},"subjectToAdverseActions":{"type":"boolean","description":"Yes if the business has ever been subject to regulatory enforcement, consent orders, fines, license revocations, criminal proceedings, or significant civil litigation — past or pending. Use the follow-up field to describe each instance."},"hasPoliticallyExposedPersons":{"type":"boolean","description":"Yes if any owner, director, or senior executive of the business is — or is a close family member or known associate of — a current or former senior government official, head of state, senior politician, judge, or military officer. This is the standard 'Politically Exposed Person' (PEP) definition. Disclose the business's own people, not its customers."},"businessAdverseActions":{"type":"array","description":"Business Adverse Actions","items":{"type":"string","enum":["Sanctions","Regulatory enforcement","Criminal investigation","Civil litigation","Bankruptcy/insolvency","Account closure/termination","Consent order","Seizure/forfeiture","None"]}},"ownersDirectorsAdverseActions":{"type":"array","description":"Adverse-action categories that have affected any current owner, director, or senior executive personally — not the business entity itself. Includes past employer enforcement actions where the individual was named. Select 'None' if none apply.","items":{"type":"string","enum":["Sanctions","Regulatory enforcement","Criminal investigation","Civil litigation","Bankruptcy/insolvency","Account closure/termination","Consent order","Seizure/forfeiture","None"]}},"adverseActionsDetails":{"type":"string","description":"Adverse Actions Details"},"isPoliticallyExposedPerson":{"type":"boolean","description":"Yes if the account holder is — or is a close family member or known associate of — a current or former senior government official, head of state, senior politician, judge, or military officer. This is the standard 'Politically Exposed Person' (PEP) definition."},"adverseActions":{"type":"array","description":"Adverse Actions","items":{"type":"string","enum":["Sanctions","Regulatory enforcement","Criminal investigation","Civil litigation","Bankruptcy/insolvency","Account closure/termination","Consent order","Seizure/forfeiture","None"]}}}},"ownership":{"type":"object","description":"Beneficial-owner and controlling-person disclosure under `persons[]`. Persons are natural people: disclose a corporate owner under `relatedCompany` and look through it to the individuals behind it.","properties":{"persons":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Person Record ID"},"firstName":{"type":"string","description":"First Name","maxLength":255},"lastName":{"type":"string","description":"Last Name","maxLength":255},"middleName":{"type":"string","description":"Middle Name","maxLength":255},"email":{"type":"string","description":"Email","format":"email","maxLength":255},"phoneNumber":{"type":"string","description":"Phone Number"},"birthDate":{"type":"string","description":"Date of Birth","format":"date"},"identityDocumentExpiryDate":{"type":"string","description":"The expiry date of the identity document, as verified by the identity provider. The document must not have expired.","format":"date"},"identityVerificationDate":{"type":"string","description":"The date the identity verification of this person was completed, as shown on the identity verification report. Without it, approval depends on reading the date from the report and can wait for a manual review.","format":"date"},"nationality":{"type":"string","description":"Country of citizenship. For dual nationals, use the citizenship matching the tax ID provided; if asked about additional nationalities elsewhere, disclose them there."},"taxIdType":{"type":"string","description":"An individual may send one of PASSPORT, NATIONAL_ID, DRIVER_LICENSE, RESIDENT_CARD, SSN, ITIN, subject to the nationality rule below. A business owner accepts only SSN, ITIN, NATIONAL_ID. For an individual customer, a US national sends SSN. ITIN is for a US resident of another nationality. For an individual customer, a NATIONAL_ID issued by CAN, NLD, IRL, AUS, JPN is not accepted. For an individual customer, a NATIONAL_ID must be the 13-digit French tax number (numéro fiscal) for FRA, the 16-digit PhilSys card number (PCN) for PHL, a PAN for IND, the 13-digit CNIC for PAK, the 11-digit CPF for BRA, the 18-character CURP for MEX, the 11-digit NIN for NGA, the 10-, 13- or 17-digit NID for BGD, the 11-digit T.C. Kimlik No for TUR. Spaces, dashes, dots, slashes and letter case are ignored. Check digits are verified for FRA, BRA, MEX, TUR. For an individual customer, send a PASSPORT, DRIVER_LICENSE or RESIDENT_CARD instead.","enum":["PASSPORT","NATIONAL_ID","DRIVER_LICENSE","RESIDENT_CARD","SSN","ITIN"]},"taxIdNumber":{"type":"string","description":"For an individual customer, a NATIONAL_ID issued by CAN, NLD, IRL, AUS, JPN is not accepted. For an individual customer, a NATIONAL_ID must be the 13-digit French tax number (numéro fiscal) for FRA, the 16-digit PhilSys card number (PCN) for PHL, a PAN for IND, the 13-digit CNIC for PAK, the 11-digit CPF for BRA, the 18-character CURP for MEX, the 11-digit NIN for NGA, the 10-, 13- or 17-digit NID for BGD, the 11-digit T.C. Kimlik No for TUR. Spaces, dashes, dots, slashes and letter case are ignored. Check digits are verified for FRA, BRA, MEX, TUR. For an individual customer, send a PASSPORT, DRIVER_LICENSE or RESIDENT_CARD instead."},"taxIdCountry":{"type":"string","description":"The country whose tax authority issued the tax identification number (TIN). May differ from the person's nationality or country of residence."},"immigrationStatus":{"type":"string","description":"US immigration status — only relevant for non-US citizens currently living in the United States. Skip if the person is a US citizen or does not live in the US.","enum":["Permanent U.S. Resident","Non-Permanent U.S. Resident","Non-Resident of U.S."]},"taxResidencyCountry":{"type":"string","description":"The country whose tax authority the person files personal income tax with. May differ from nationality (citizenship) or current residence. For multiple tax residencies, list the primary one."},"ownershipPercent":{"type":"number","description":"Direct or indirect ownership share in the business, including ownership held through intermediate entities. For tiered ownership structures, give the effective beneficial share at this entity — not the immediate-parent share.","minimum":0,"maximum":100},"sharesAllocated":{"type":"integer","description":"Shares Allocated","minimum":0},"roles":{"type":"array","description":"Which capacity each person fills. Beneficial Owner: holds ≥25% ownership or otherwise exercises ultimate control. Controlling Person: a senior managing official (CEO / CFO / COO / General Counsel / President or equivalent), regardless of ownership. Legal Representative: authorized to sign on behalf of the entity. Account Holder: the person who opens the account in their own name. Select all that apply.","items":{"type":"string","enum":["BENEFICIAL_OWNER","CONTROLLING_PERSON","LEGAL_REPRESENTATIVE","ACCOUNT_HOLDER"]}},"address":{"type":"object","properties":{"country":{"type":"string","description":"Country"},"addressLine1":{"type":"string","description":"Street 1","maxLength":255},"addressLine2":{"type":"string","description":"Street 2","maxLength":255},"city":{"type":"string","description":"City","maxLength":255},"state":{"type":"string","description":"State / Province","maxLength":255},"postalCode":{"type":"string","description":"Zip Code","maxLength":50}}},"documentIds":{"type":"array","maxItems":100,"items":{"type":"string","minLength":1},"description":"Ids of documents uploaded with `POST /v2/documents` for this person, for example the identity verification attestation."}}}}}},"relatedCompany":{"type":"object","description":"Related-company disclosure for affiliated entities — a parent, subsidiary, sister company or holding entity.","properties":{"hasRelatedCompany":{"type":"boolean","description":"Yes if the business is part of a corporate group: a subsidiary, a parent company, sibling entities under common ownership, or a holding-company structure. Independent companies that merely share investors do not count."},"companies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Related Company Record ID"},"companyName":{"type":"string","description":"Related Company Name"},"description":{"type":"string","description":"Related Company Description"},"role":{"type":"string","description":"How this related entity is connected to the business — parent, subsidiary, sister/affiliate, or a holding entity. Choose the closest match; this drives how the relationship is documented in the group structure chart.","enum":["Ultimate Parent Company","Subsidiary","Affiliate","Holding Company"]},"ownershipPercent":{"type":"string","description":"Related Company Ownership Percent","pattern":"^(100(\\.0+)?|\\d{1,2}(\\.\\d+)?)$"},"email":{"type":"string","description":"Related Company Email","format":"email"},"phone":{"type":"string","description":"Related Company Phone Number"},"formationDate":{"type":"string","description":"Related Company Formation Date","format":"date"}}}}}},"certification":{"type":"object","description":"Legal certifications the customer must affirm.","properties":{"authorityToBind":{"type":"boolean","description":"By checking this box and clicking Submit, I hereby swear, affirm, and attest that I have the requisite internal authority to bind the company submitting the information contained herein."},"consentToElectronicSignatures":{"type":"boolean","description":"I, and the company for which I am submitting the information contained herein, acknowledge and agree that by checking this box and clicking Submit we are electronically signing and such electronic signature is legally binding and enforceable in the same manner as a handwritten signature."},"termsAndConditions":{"description":"The customer's acceptance of Conduit's Terms and Conditions. The acceptance record is the current form. `true` is the earlier form. `GET /v2/onboarding/requirements` shows which form the active rules accept.","anyOf":[{"type":"boolean","enum":[true]},{"type":"object","properties":{"accepted":{"type":"boolean","description":"Read the terms at https://conduitpay.com/terms-of-service"},"acceptedAt":{"type":"string","description":"When the customer accepted, not when you submit this form","format":"date-time"},"acceptedByName":{"type":"string","description":"The person who accepted for the customer","maxLength":140},"acceptedByEmail":{"type":"string","description":"Email of the person who accepted","format":"email","maxLength":254},"ipAddress":{"type":"string","description":"The IP address your customer accepted from, as your platform recorded it. Not your own IP address."},"isAuthenticated":{"type":"boolean","description":"Your customer was signed in to your platform when they accepted"},"version":{"type":"string","description":"Terms version","maxLength":64}}}]},"treasuryOnlyCertification":{"type":"boolean","description":"Certify that this entity will use the Conduit account exclusively for its own treasury operations — not on behalf of clients, customers, or third parties. Required to enroll in the treasury-only product configuration."}}},"activity":{"type":"object","description":"Account holder's activity and due-diligence descriptors on an individual application: occupation, employer, account purpose, source of funds, expected volumes and countries of activity. A virtual account request for an individual customer only: it answers the `/activity/...` fields `GET /v2/customers/{customerId}/features/requirements` lists, with the values onboarding accepts. Any other request with `activity` returns 400.","properties":{"occupation":{"type":"string","description":"The account holder's current occupation or profession. Describe the role, not the employer.","maxLength":255},"occupationCategory":{"type":"string","description":"The category that best describes the account holder's occupation or main source of income.","enum":["EMPLOYED_PROFESSIONAL","EMPLOYED_TRADES","GOVERNMENT_PUBLIC_SECTOR","FINANCIAL_LEGAL_ACCOUNTING","RETIRED","STUDENT","UNEMPLOYED_HOMEMAKER","SELF_EMPLOYED","REAL_ESTATE","BUSINESS_OWNER_CASH_INTENSIVE","DIGITAL_ASSETS_TRADING","HIGH_RISK_INDUSTRY","OTHER"]},"employerName":{"type":"string","description":"The name of the account holder's current employer, if any.","maxLength":255},"accountPurpose":{"type":"array","description":"Select every account use case that applies, even those that are infrequent. This drives risk-tier categorisation and monitoring thresholds.","items":{"type":"string","enum":["Receive Salary","Savings","Family Support","Pay Bills","Investment","Business Payments"]}},"sourceOfFunds":{"type":"array","description":"Where the money flowing into the account comes from. Select all that apply. Use the 'Other' follow-up for a source not on the list.","items":{"type":"string","enum":["Salary","Business Income","Savings","Investment","Inheritance","Gift","Sale of Asset","Other"]}},"sourceOfFundsOther":{"type":"string","description":"Source of Funds (Other)"},"sourceOfWealth":{"type":"array","description":"Where the account holder's overall wealth comes from. Select all that apply. Use the 'Other' follow-up for a source not on the list.","items":{"type":"string","enum":["Salary","Business Income","Savings","Investment","Inheritance","Gift","Sale of Asset","Other"]}},"sourceOfWealthOther":{"type":"string","description":"Source of Wealth (Other)"},"expectedMonthlyVolume":{"type":"string","description":"Expected average USD value flowing through the account each month, across all in- and out-bound transactions combined.","enum":["VOLUME_LT_10K","VOLUME_10K_50K","VOLUME_50K_250K","VOLUME_250K_1M","VOLUME_GT_1M"]},"expectedTransactionsPerMonth":{"type":"string","description":"Expected number of transactions through the account each month, in- and out-bound combined.","enum":["<10","10-50","50-200","200-1,000","1,000+"]},"countriesOfActivity":{"type":"array","description":"Countries where the account holder receives payments, sends payments, or holds assets.","items":{"type":"string","enum":["AFG","ALB","DZA","ASM","AND","AGO","AIA","ATA","ATG","ARG","ARM","ABW","AUS","AUT","AZE","BHS","BHR","BGD","BRB","BLR","BEL","BLZ","BEN","BMU","BTN","BOL","BES","BIH","BWA","BVT","BRA","IOT","BRN","BGR","BFA","BDI","CPV","KHM","CMR","CAN","CYM","CAF","TCD","CHL","CHN","CXR","CCK","COL","COM","COG","COD","COK","CRI","CIV","HRV","CUB","CUW","CYP","CZE","DNK","DJI","DMA","DOM","ECU","EGY","SLV","GNQ","ERI","EST","SWZ","ETH","FLK","FRO","FJI","FIN","FRA","GUF","PYF","ATF","GAB","GMB","GEO","DEU","GHA","GIB","GRC","GRL","GRD","GLP","GUM","GTM","GGY","GIN","GNB","GUY","HTI","HMD","VAT","HND","HKG","HUN","ISL","IND","IDN","IRN","IRQ","IRL","IMN","ISR","ITA","JAM","JPN","JEY","JOR","KAZ","KEN","KIR","PRK","KOR","KWT","KGZ","LAO","LVA","LBN","LSO","LBR","LBY","LIE","LTU","LUX","MAC","MDG","MWI","MYS","MDV","MLI","MLT","MHL","MTQ","MRT","MUS","MYT","MEX","FSM","MDA","MCO","MNG","MNE","MSR","MAR","MOZ","MMR","NAM","NRU","NPL","NLD","NCL","NZL","NIC","NER","NGA","NIU","NFK","MKD","MNP","NOR","OMN","PAK","PLW","PSE","PAN","PNG","PRY","PER","PHL","PCN","POL","PRT","PRI","QAT","REU","ROU","RUS","RWA","BLM","SHN","KNA","LCA","MAF","SPM","VCT","WSM","SMR","STP","SAU","SEN","SRB","SYC","SLE","SGP","SXM","SVK","SVN","SLB","SOM","ZAF","SGS","SSD","ESP","LKA","SDN","SUR","SJM","SWE","CHE","SYR","TWN","TJK","TZA","THA","TLS","TGO","TKL","TON","TTO","TUN","TUR","TKM","TCA","TUV","UGA","UKR","ARE","GBR","USA","UMI","URY","UZB","VUT","VEN","VNM","VGB","VIR","WLF","ESH","YEM","ZMB","ZWE"]}}}}}},"documentIds":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1},"description":"Flat list of uploaded document IDs to associate with this feature request","example":["doc_2xKjF9mQb7vN4hL1pR3w8t"]},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"]}},"required":["code"],"additionalProperties":false,"description":"Target asset for the feature, required for some feature types","example":{"code":"USD"}}},"required":["type"],"additionalProperties":false},"ExternalRequirementsResponseDto":{"type":"object","properties":{"schemaVersion":{"type":"string","description":"Discovery response schema version. Bumps on any breaking discovery-response change (field renamed, removed, type changed, conditional semantics changed). Distinct from the webhook envelope's `apiVersion` which tracks the API major. Clients pin the literal and fail loudly on mismatch; servers do not negotiate.","enum":["3"]},"context":{"type":"string","enum":["onboarding","feature","order"],"description":"The discovery context that produced this requirements set.","example":"onboarding"},"country":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 3166-1 alpha-3 country code the requirements were resolved for. Always three uppercase letters.","example":"USA"},"fields":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the field in the submission payload. Always starts with /. Array indices appear as integers.","example":"/businessInfo/taxId"},"label":{"type":"string","description":"Human-readable label for display","example":"Tax Identification Number"},"helpText":{"description":"One-line guidance for the field, intended to render as a tooltip / info pill next to the label. Plain text, no markup. For `businessInfo.taxId` and `businessInfo.businessEntityId` this is the country-specific identifier description from `countries.json` (with the issuing authority prefixed when known, e.g. 'Issued by HMRC.'). For other fields it is universal copy from the server-side field registry. Silently absent when neither source has guidance on file. See api-conventions §5.1.5.","example":"Issued by HMRC. 10-digit number; auto-assigned on CT registration; appears on HMRC correspondence. VAT Registration Number (GB + 9 digits; XI prefix for NI–EU trade) is supplementary — collect separately if VAT-registered.","type":"string"},"type":{"type":"string","enum":["string","number","integer","boolean","date","datetime","email","url","phone","country","enum","stringArray","enumArray"],"description":"Data type of the field","example":"string"},"required":{"type":"boolean","description":"Whether the field is required at submit"},"group":{"description":"Section grouping code for renderers. Stable camelCase token drawn from a closed set per discovery context (onboarding today: `businessInfo`, `companyClassification`, `registeredAddress`, `operatingAddress`, `businessActivity`, `activity`, `regulatoryHistory`, `certification`, `customAnswers`; `activity` carries an individual subject's own activity envelope, where `businessActivity` carries a business subject's; `customAnswers` carries operator-authored questions). Omitted on top-level scalars without a section and on fields nested inside `individualRequirements[].fields[]` (already a logical group). Presentation metadata; submit ignores it.","type":"string"},"mustEqual":{"description":"Required-with-const marker. Submit enforces strict equality on the field value (not just presence). Most common case: legal-certification booleans (`certification.termsAndConditions: { required: true, mustEqual: true }`) where `false` submits are rejected. Omitted when not constrained to a single value.","anyOf":[{"type":"boolean"},{"type":"string"},{"type":"number"}]},"constraints":{"description":"Per-value limits on this field alone, enforceable client-side. Satisfying them does not by itself clear submit: a value must also satisfy the field's `allowedValues`, its `mustEqual`, and every `conditionalOverride` whose conditions hold. Some `pattern` values state only a canonical spelling, and submit can accept equivalent spellings such a pattern does not list.","type":"object","properties":{"pattern":{"description":"Regex stating the canonical form of the value. A value that matches it is in the form submit expects; for some fields, submit is more lenient than this pattern and can accept spellings it does not state, so a value outside it is not always refused.","example":"^\\d{2}\\.\\d{3}\\.\\d{3}/\\d{4}-\\d{2}$","type":"string"},"example":{"description":"Example value matching the pattern","example":"12.345.678/0001-95","type":"string"},"format":{"description":"Advertised server-enforced semantic format marker. Closed enum: `safeString` (structured short fields — rejects control characters, HTML tags, and punctuation outside the documented allowlist), `prose` (free-text fields — allows ordinary punctuation and multi-line text, rejecting control characters, invisible-format characters, line/paragraph separators, and lone surrogates) or `ip` (an IPv4 or IPv6 address — no zone identifier, no leading zeros in IPv4 octets). The server enforces the rule at submit; the marker advertises it so clients can pre-validate. Arbitrary regex aliases belong in `pattern`.","type":"string","enum":["safeString","prose","ip"]},"minLength":{"description":"Minimum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxLength":{"description":"Maximum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"min":{"description":"Minimum numeric value","type":"number"},"max":{"description":"Maximum numeric value","type":"number"},"minDate":{"description":"Earliest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"1800-01-01","type":"string"},"maxDate":{"description":"Latest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"today","type":"string"},"maxDateTime":{"description":"Latest allowed instant for a datetime field: the literal 'now'. A value up to five minutes ahead of the server clock is accepted to absorb clock skew.","example":"now","type":"string","enum":["now"]},"minAgeYears":{"description":"Minimum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxAgeYears":{"description":"Maximum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"checksum":{"description":"A check digit rule the value must pass beyond `pattern`: `aba` for a US routing number, `iban` for an international bank account number (mod-97).","type":"string","enum":["aba","iban"]}},"additionalProperties":false},"requiredOneOf":{"description":"Names a group of fields of which at least one must be sent. Every field in the response that has the same value is in the group, and each of them alone is enough. Absent when the field is in no group.","example":"accountIdentifier","type":"string"},"conditions":{"description":"Conditional applicability rules. The field applies (is shown / required) only when every condition evaluates true against the current submission. Empty / absent means unconditional.","type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the submitted-data field this condition reads. Resolution is governed by the sibling scope (root by default; person-scoped when scope='person').","example":"/companyClassification/legalStructure"},"operator":{"type":"string","enum":["eq","in","not_in","exists","is_true","is_false"],"description":"Comparison operator. The field is required / applies only when the condition evaluates true against the current submitted data.","example":"eq"},"value":{"description":"Single comparison value, used with eq / exists operators","type":"string"},"values":{"description":"Array of comparison values, used with in / not_in operators. When the field at `pointer` is an array, `in` holds when any element of it is one of these values.","type":"array","items":{"type":"string"}},"scope":{"description":"Evaluation scope for `pointer`. Default `root` evaluates against the top-level submission; `person` evaluates against the current `ownership.persons[i]` row (used inside `individualRequirements[].fields[].conditions`).","type":"string","enum":["root","person"]}},"required":["pointer","operator"],"additionalProperties":false}},"allowedValues":{"description":"Allowed values for enum / enumArray fields. The submitted value MUST be one of these.","example":["LLC","CORPORATION","PARTNERSHIP"],"type":"array","items":{"type":"string"}},"options":{"description":"Structured per-option metadata for enum fields with display / grouping hints (label, abbr, description, category). `value` mirrors an entry in `allowedValues`. Present when the projector has localized data to surface (e.g. country-specific legal structures); enum fields without rich metadata use `allowedValues` alone.","type":"array","items":{"type":"object","properties":{"value":{"type":"string","description":"Submitted value. Must be one of the entries in the sibling `allowedValues` array.","example":"Sociedad Anónima"},"label":{"type":"string","description":"Human-readable label for display","example":"Sociedad Anónima"},"abbr":{"type":"string","description":"Short-form / acronym for the option","example":"S.A.","nullable":true},"description":{"description":"Long-form description of the option","type":"string"},"category":{"type":"string","enum":["Corp","LLC","Sole Proprietorship","Partnership","Other","regulatory_review"],"description":"Out-of-band metadata for an option that affects how it should be rendered or handled. Values: the legal-structure canonical bucket (`Corp` / `LLC` / `Sole Proprietorship` / `Partnership` / `Other`) — used to map the localised `value` to a standardised type; and `regulatory_review` — indicates this option is subject to additional regulatory review and may warrant a pre-submission warning to the user. Silently absent on options that carry no such metadata."}},"required":["value","label"],"additionalProperties":false}},"conditionalOverrides":{"description":"Extra constraints that apply only while their own conditions hold. Each element carries a `conditions` array read exactly like the field's own `conditions` — every condition must hold, and `scope: 'person'` resolves the pointer against the current `ownership.persons[i]` row — plus the `constraints` submit adds for that case. Three cases ship. An address states what submit keys on that address's own country: a person's `/address/state` carries the US subdivision pattern and `/address/postalCode` the US ZIP pattern while that same person's `/address/country` is `USA` (`scope: 'person'`), and the business's `/operatingAddress/state` and `/operatingAddress/postalCode` carry the same two while `/operatingAddress/country` is `USA`, read at the root of the body because the condition names no scope. A person's `/taxIdNumber` carries the US Social Security Number pattern while that same person's `/taxIdType` is `SSN`. When two or more requirement rules declare one field and a rule's check depends on a condition discovery cannot settle (most often a `scope: 'person'` condition), that rule's check is an element too: its `constraints` and, for an enum field, its `allowedValues`. Some overrides' `pattern` states only the canonical value to send, not the full set submit accepts: the US subdivision pattern states the two-letter code with or without the `US-` prefix, while submit also accepts the full state name and other spellings. Apply every element whose conditions hold ON TOP OF the field's own `constraints`, never in place of them: the value must match the field-level `pattern` and every override `pattern` that applies, and a bound named twice tightens to the stricter value. The property is additive and a client may ignore it, in which case the field reads exactly as it did before the property existed and submit can still reject a value the override would have named. Silently absent when the field carries no conditional case.","type":"array","items":{"type":"object","properties":{"conditions":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the submitted-data field this condition reads. Resolution is governed by the sibling scope (root by default; person-scoped when scope='person').","example":"/companyClassification/legalStructure"},"operator":{"type":"string","enum":["eq","in","not_in","exists","is_true","is_false"],"description":"Comparison operator. The field is required / applies only when the condition evaluates true against the current submitted data.","example":"eq"},"value":{"description":"Single comparison value, used with eq / exists operators","type":"string"},"values":{"description":"Array of comparison values, used with in / not_in operators. When the field at `pointer` is an array, `in` holds when any element of it is one of these values.","type":"array","items":{"type":"string"}},"scope":{"description":"Evaluation scope for `pointer`. Default `root` evaluates against the top-level submission; `person` evaluates against the current `ownership.persons[i]` row (used inside `individualRequirements[].fields[].conditions`).","type":"string","enum":["root","person"]}},"required":["pointer","operator"],"additionalProperties":false},"description":"Conditions that must ALL hold for this override to apply. Same shape and evaluation as `conditions` on the field itself, `scope` included."},"constraints":{"type":"object","properties":{"pattern":{"description":"Regex stating the canonical form of the value. A value that matches it is in the form submit expects; for some fields, submit is more lenient than this pattern and can accept spellings it does not state, so a value outside it is not always refused.","example":"^\\d{2}\\.\\d{3}\\.\\d{3}/\\d{4}-\\d{2}$","type":"string"},"example":{"description":"Example value matching the pattern","example":"12.345.678/0001-95","type":"string"},"format":{"description":"Advertised server-enforced semantic format marker. Closed enum: `safeString` (structured short fields — rejects control characters, HTML tags, and punctuation outside the documented allowlist), `prose` (free-text fields — allows ordinary punctuation and multi-line text, rejecting control characters, invisible-format characters, line/paragraph separators, and lone surrogates) or `ip` (an IPv4 or IPv6 address — no zone identifier, no leading zeros in IPv4 octets). The server enforces the rule at submit; the marker advertises it so clients can pre-validate. Arbitrary regex aliases belong in `pattern`.","type":"string","enum":["safeString","prose","ip"]},"minLength":{"description":"Minimum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxLength":{"description":"Maximum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"min":{"description":"Minimum numeric value","type":"number"},"max":{"description":"Maximum numeric value","type":"number"},"minDate":{"description":"Earliest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"1800-01-01","type":"string"},"maxDate":{"description":"Latest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"today","type":"string"},"maxDateTime":{"description":"Latest allowed instant for a datetime field: the literal 'now'. A value up to five minutes ahead of the server clock is accepted to absorb clock skew.","example":"now","type":"string","enum":["now"]},"minAgeYears":{"description":"Minimum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxAgeYears":{"description":"Maximum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"checksum":{"description":"A check digit rule the value must pass beyond `pattern`: `aba` for a US routing number, `iban` for an international bank account number (mod-97).","type":"string","enum":["aba","iban"]}},"additionalProperties":false,"description":"Constraints submit adds while the conditions hold. They narrow the field, never widen it, and they do not replace the field's own `constraints`: `pattern` is a SECOND regex that states the canonical form for this case, applied as well as the field-level `pattern`, and a bound named on both takes whichever value is stricter. As at field level, submit can be more lenient than some of these patterns state. `example` is a value valid under this override. Empty when the override narrows only `allowedValues`."},"allowedValues":{"description":"Allowed values for an enum / enumArray field while the conditions hold: a subset of the field's own `allowedValues`. Submit refuses a value outside it in that case. Omitted when the override does not narrow the values.","example":["SSN"],"type":"array","items":{"type":"string"}}},"required":["conditions","constraints"],"additionalProperties":false}}},"required":["pointer","label","type","required"]},"description":"Scalar fields the integrator must collect, with format hints and allowedValues for enum fields."},"documents":{"type":"array","items":{"type":"object","properties":{"canonicalType":{"type":"string","enum":["BUSINESS_REGISTRATION","ARTICLES_OF_INCORPORATION","TAX_CERTIFICATE","OPERATING_LICENSE","REGULATORY_LICENSE","SHAREHOLDERS_REGISTRY","DIRECTORS_REGISTRY","AUTHORIZATION_TO_ACT","PROOF_OF_ADDRESS","CERTIFICATE_OF_GOOD_STANDING","FLOW_OF_FUNDS","AUDITED_FINANCIAL_STATEMENT","BANK_STATEMENT","ORG_STRUCTURE_CHART","AML_AUDIT","COMPLIANCE_POLICY","INSTITUTIONAL_INVESTOR_DOCUMENTATION","IRS_W8BEN_E","IRS_W8BEN","IRS_W9","IDENTITY_VERIFICATION","IDENTITY_VERIFICATION_ATTESTATION","EDD_EVIDENCE","BANK_VERIFICATION_LETTER","INVOICE","CONTRACT","PAYROLL_REGISTER","INVESTMENT_AGREEMENT","OTHER","SELFIE"],"description":"Canonical category label for this document slot. Collect a document matching the title or category and upload it with `POST /v2/documents`. Setting that upload's optional `type` to this value records the file against this slot; Conduit still identifies the document itself, and that determination is what applies."},"title":{"type":"string","description":"Human-readable name for UI display: the artifact when the row has one, otherwise the document type. The artifacts are in `alternatives`, `requiredArtifacts` and `optionalArtifacts`.","example":"Articles of Incorporation"},"from":{"description":"Issuing authority, when known and different from the title","type":"string"},"alternatives":{"description":"Acceptable alternative artifacts. Collect ANY ONE of these to satisfy the requirement.","type":"array","items":{"type":"object","properties":{"title":{"type":"string","description":"Human-readable artifact name for UI display","example":"Certificate of Incorporation"},"from":{"description":"Issuing authority, when known and different from the title","type":"string"}},"required":["title"],"additionalProperties":false}},"requiredArtifacts":{"description":"Present only when the slot mixes required artifacts with alternative or optional artifacts. Single required-only slots are flattened to the row itself.","type":"array","items":{"type":"object","properties":{"title":{"type":"string","description":"Human-readable artifact name for UI display","example":"Certificate of Incorporation"},"from":{"description":"Issuing authority, when known and different from the title","type":"string"}},"required":["title"],"additionalProperties":false}},"optionalArtifacts":{"description":"Recommended artifacts for this canonical document slot. These are not required for submission.","type":"array","items":{"type":"object","properties":{"title":{"type":"string","description":"Human-readable artifact name for UI display","example":"Certificate of Incorporation"},"from":{"description":"Issuing authority, when known and different from the title","type":"string"}},"required":["title"],"additionalProperties":false}},"required":{"type":"boolean","description":"True when the review needs a document for this row. Submit does not check document types, so an application without a required document is accepted and stays in `processing` until the document arrives. A row with `conditions` is required only when every condition holds on your submission. Rows that share a `groupId` are one requirement: a document for any one of them satisfies it. False on a recommended row."},"optional":{"description":"True when collection is recommended but not required. Always the opposite of `required`.","type":"boolean"},"minCount":{"description":"Number of files of this canonical type the integrator must upload. Absent / 1 means a single file satisfies the slot; values greater than 1 require N distinct uploads (e.g. 3 consecutive bank statements). The review enforces the same floor; submit does not.","type":"integer","minimum":1,"maximum":9007199254740991},"groupId":{"description":"When present, this document row is one branch of an `any-of` alternation. Every row sharing the same `groupId` forms a single decision point: satisfying ANY branch's own minCount satisfies the group. The integrator should render grouped rows together (e.g. a single slab with each branch as a sub-option). The `group:` prefix namespaces the id away from canonical type names (which are SCREAMING_SNAKE_CASE and never contain `:` or `+`).","example":"group:any-of:AUDITED_FINANCIAL_STATEMENT+BANK_STATEMENT","type":"string"},"policyFallback":{"description":"True when this row exists because the requirement rule asks for the canonicalType but the country has no jurisdiction-specific document. Conduit substitutes a generic, company-producible alternative (e.g. an internal share register, board resolution, utility bill). The customer is still expected to provide evidence; see `guidance` for what to collect.","type":"boolean"},"guidance":{"description":"One-line collection guidance shown to the integrator's end customer: what evidence to collect for this slot. Present on `policyFallback: true` rows (what to supply absent a jurisdiction-specific document) and on address-targeted proof-of-address rows (which address the document must show — registered vs operating).","type":"string"},"addressTarget":{"description":"Which submitted address this proof-of-address row must be shown to prove. Present ONLY on `PROOF_OF_ADDRESS` rows that are address-targeted: the requirement can surface as two rows sharing `canonicalType: \"PROOF_OF_ADDRESS\"`, disambiguated by this field (`registered` always; `operating` when the operating address differs). Both must be collected. Machine-readable key for these rows — do NOT dedupe address-targeted rows by `canonicalType`.","type":"string","enum":["registered","operating"]},"conditions":{"description":"Present when the document is owed only conditionally. The document is owed only when every condition holds on your submission; evaluate them like a field's `conditions`.","type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the submitted-data field this condition reads. Resolution is governed by the sibling scope (root by default; person-scoped when scope='person').","example":"/companyClassification/legalStructure"},"operator":{"type":"string","enum":["eq","in","not_in","exists","is_true","is_false"],"description":"Comparison operator. The field is required / applies only when the condition evaluates true against the current submitted data.","example":"eq"},"value":{"description":"Single comparison value, used with eq / exists operators","type":"string"},"values":{"description":"Array of comparison values, used with in / not_in operators. When the field at `pointer` is an array, `in` holds when any element of it is one of these values.","type":"array","items":{"type":"string"}},"scope":{"description":"Evaluation scope for `pointer`. Default `root` evaluates against the top-level submission; `person` evaluates against the current `ownership.persons[i]` row (used inside `individualRequirements[].fields[].conditions`).","type":"string","enum":["root","person"]}},"required":["pointer","operator"],"additionalProperties":false}}},"required":["canonicalType","title","required"],"additionalProperties":false},"description":"Customer-level documents to collect. Rows are usually keyed by canonicalType — EXCEPT address-targeted proof-of-address, which can appear as two rows sharing canonicalType `PROOF_OF_ADDRESS` disambiguated by `addressTarget` (registered / operating); collect both, and key those rows on `addressTarget`, not canonicalType alone. Upload every requiredArtifacts[] entry and any one alternatives[] entry when present, otherwise upload the row itself via POST /v2/documents."},"minDocuments":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Document floor: the minimum number of documents POST /v2/onboarding accepts — currently 0 or 1. `1` means the submission must carry at least one document, counting `documentIds` at the top level and on each person; a submission with none anywhere is rejected with 422 ONBOARDING_NOT_READY. `0` means documents are optional at submit. Submit checks the count, not the type. The review checks each `documents[]` row with `required: true`, so send what each of them asks for with the submission: its `minCount`, and one row per `groupId`.","example":1},"individualRequirements":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"role":{"type":"string","description":"Role discriminant. BENEFICIAL_OWNER is the only role that carries `ownershipThreshold`.","enum":["BENEFICIAL_OWNER"]},"minCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Minimum number of persons that must fill this role. BENEFICIAL_OWNER may be 0 when the rule only conditionally requires beneficial-owner disclosure (e.g. only when actual ownership crosses `ownershipThreshold`)."},"maxCount":{"description":"Maximum number of persons accepted under this role. Absent when unbounded.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"ownershipThreshold":{"example":25,"type":"number","description":"Minimum ownership percentage qualifying a person as a beneficial owner under this rule. Absent when the rule doesn't constrain ownership disclosure."},"conditionalOverrides":{"description":"Lower ownership thresholds that apply only while their conditions hold. Enhanced due diligence, for example, lowers the threshold when the business declares a high-risk regulated activity. When more than one element holds, use the lowest `ownershipThreshold`. Silently absent when no conditional threshold applies.","type":"array","items":{"type":"object","properties":{"conditions":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the submitted-data field this condition reads. Resolution is governed by the sibling scope (root by default; person-scoped when scope='person').","example":"/companyClassification/legalStructure"},"operator":{"type":"string","enum":["eq","in","not_in","exists","is_true","is_false"],"description":"Comparison operator. The field is required / applies only when the condition evaluates true against the current submitted data.","example":"eq"},"value":{"description":"Single comparison value, used with eq / exists operators","type":"string"},"values":{"description":"Array of comparison values, used with in / not_in operators. When the field at `pointer` is an array, `in` holds when any element of it is one of these values.","type":"array","items":{"type":"string"}},"scope":{"description":"Evaluation scope for `pointer`. Default `root` evaluates against the top-level submission; `person` evaluates against the current `ownership.persons[i]` row (used inside `individualRequirements[].fields[].conditions`).","type":"string","enum":["root","person"]}},"required":["pointer","operator"],"additionalProperties":false},"description":"Conditions that must ALL hold for this threshold to apply. Evaluate them like a field's `conditions`."},"ownershipThreshold":{"type":"number","description":"The ownership percentage that qualifies a person as a beneficial owner while the conditions hold.","example":10}},"required":["conditions","ownershipThreshold"],"additionalProperties":false}},"fields":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the field in the submission payload. Always starts with /. Array indices appear as integers.","example":"/businessInfo/taxId"},"label":{"type":"string","description":"Human-readable label for display","example":"Tax Identification Number"},"helpText":{"description":"One-line guidance for the field, intended to render as a tooltip / info pill next to the label. Plain text, no markup. For `businessInfo.taxId` and `businessInfo.businessEntityId` this is the country-specific identifier description from `countries.json` (with the issuing authority prefixed when known, e.g. 'Issued by HMRC.'). For other fields it is universal copy from the server-side field registry. Silently absent when neither source has guidance on file. See api-conventions §5.1.5.","example":"Issued by HMRC. 10-digit number; auto-assigned on CT registration; appears on HMRC correspondence. VAT Registration Number (GB + 9 digits; XI prefix for NI–EU trade) is supplementary — collect separately if VAT-registered.","type":"string"},"type":{"type":"string","enum":["string","number","integer","boolean","date","datetime","email","url","phone","country","enum","stringArray","enumArray"],"description":"Data type of the field","example":"string"},"required":{"type":"boolean","description":"Whether the field is required at submit"},"group":{"description":"Section grouping code for renderers. Stable camelCase token drawn from a closed set per discovery context (onboarding today: `businessInfo`, `companyClassification`, `registeredAddress`, `operatingAddress`, `businessActivity`, `activity`, `regulatoryHistory`, `certification`, `customAnswers`; `activity` carries an individual subject's own activity envelope, where `businessActivity` carries a business subject's; `customAnswers` carries operator-authored questions). Omitted on top-level scalars without a section and on fields nested inside `individualRequirements[].fields[]` (already a logical group). Presentation metadata; submit ignores it.","type":"string"},"mustEqual":{"description":"Required-with-const marker. Submit enforces strict equality on the field value (not just presence). Most common case: legal-certification booleans (`certification.termsAndConditions: { required: true, mustEqual: true }`) where `false` submits are rejected. Omitted when not constrained to a single value.","anyOf":[{"type":"boolean"},{"type":"string"},{"type":"number"}]},"constraints":{"description":"Per-value limits on this field alone, enforceable client-side. Satisfying them does not by itself clear submit: a value must also satisfy the field's `allowedValues`, its `mustEqual`, and every `conditionalOverride` whose conditions hold. Some `pattern` values state only a canonical spelling, and submit can accept equivalent spellings such a pattern does not list.","type":"object","properties":{"pattern":{"description":"Regex stating the canonical form of the value. A value that matches it is in the form submit expects; for some fields, submit is more lenient than this pattern and can accept spellings it does not state, so a value outside it is not always refused.","example":"^\\d{2}\\.\\d{3}\\.\\d{3}/\\d{4}-\\d{2}$","type":"string"},"example":{"description":"Example value matching the pattern","example":"12.345.678/0001-95","type":"string"},"format":{"description":"Advertised server-enforced semantic format marker. Closed enum: `safeString` (structured short fields — rejects control characters, HTML tags, and punctuation outside the documented allowlist), `prose` (free-text fields — allows ordinary punctuation and multi-line text, rejecting control characters, invisible-format characters, line/paragraph separators, and lone surrogates) or `ip` (an IPv4 or IPv6 address — no zone identifier, no leading zeros in IPv4 octets). The server enforces the rule at submit; the marker advertises it so clients can pre-validate. Arbitrary regex aliases belong in `pattern`.","type":"string","enum":["safeString","prose","ip"]},"minLength":{"description":"Minimum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxLength":{"description":"Maximum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"min":{"description":"Minimum numeric value","type":"number"},"max":{"description":"Maximum numeric value","type":"number"},"minDate":{"description":"Earliest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"1800-01-01","type":"string"},"maxDate":{"description":"Latest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"today","type":"string"},"maxDateTime":{"description":"Latest allowed instant for a datetime field: the literal 'now'. A value up to five minutes ahead of the server clock is accepted to absorb clock skew.","example":"now","type":"string","enum":["now"]},"minAgeYears":{"description":"Minimum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxAgeYears":{"description":"Maximum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"checksum":{"description":"A check digit rule the value must pass beyond `pattern`: `aba` for a US routing number, `iban` for an international bank account number (mod-97).","type":"string","enum":["aba","iban"]}},"additionalProperties":false},"requiredOneOf":{"description":"Names a group of fields of which at least one must be sent. Every field in the response that has the same value is in the group, and each of them alone is enough. Absent when the field is in no group.","example":"accountIdentifier","type":"string"},"conditions":{"description":"Conditional applicability rules. The field applies (is shown / required) only when every condition evaluates true against the current submission. Empty / absent means unconditional.","type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the submitted-data field this condition reads. Resolution is governed by the sibling scope (root by default; person-scoped when scope='person').","example":"/companyClassification/legalStructure"},"operator":{"type":"string","enum":["eq","in","not_in","exists","is_true","is_false"],"description":"Comparison operator. The field is required / applies only when the condition evaluates true against the current submitted data.","example":"eq"},"value":{"description":"Single comparison value, used with eq / exists operators","type":"string"},"values":{"description":"Array of comparison values, used with in / not_in operators. When the field at `pointer` is an array, `in` holds when any element of it is one of these values.","type":"array","items":{"type":"string"}},"scope":{"description":"Evaluation scope for `pointer`. Default `root` evaluates against the top-level submission; `person` evaluates against the current `ownership.persons[i]` row (used inside `individualRequirements[].fields[].conditions`).","type":"string","enum":["root","person"]}},"required":["pointer","operator"],"additionalProperties":false}},"allowedValues":{"description":"Allowed values for enum / enumArray fields. The submitted value MUST be one of these.","example":["LLC","CORPORATION","PARTNERSHIP"],"type":"array","items":{"type":"string"}},"options":{"description":"Structured per-option metadata for enum fields with display / grouping hints (label, abbr, description, category). `value` mirrors an entry in `allowedValues`. Present when the projector has localized data to surface (e.g. country-specific legal structures); enum fields without rich metadata use `allowedValues` alone.","type":"array","items":{"type":"object","properties":{"value":{"type":"string","description":"Submitted value. Must be one of the entries in the sibling `allowedValues` array.","example":"Sociedad Anónima"},"label":{"type":"string","description":"Human-readable label for display","example":"Sociedad Anónima"},"abbr":{"type":"string","description":"Short-form / acronym for the option","example":"S.A.","nullable":true},"description":{"description":"Long-form description of the option","type":"string"},"category":{"type":"string","enum":["Corp","LLC","Sole Proprietorship","Partnership","Other","regulatory_review"],"description":"Out-of-band metadata for an option that affects how it should be rendered or handled. Values: the legal-structure canonical bucket (`Corp` / `LLC` / `Sole Proprietorship` / `Partnership` / `Other`) — used to map the localised `value` to a standardised type; and `regulatory_review` — indicates this option is subject to additional regulatory review and may warrant a pre-submission warning to the user. Silently absent on options that carry no such metadata."}},"required":["value","label"],"additionalProperties":false}},"conditionalOverrides":{"description":"Extra constraints that apply only while their own conditions hold. Each element carries a `conditions` array read exactly like the field's own `conditions` — every condition must hold, and `scope: 'person'` resolves the pointer against the current `ownership.persons[i]` row — plus the `constraints` submit adds for that case. Three cases ship. An address states what submit keys on that address's own country: a person's `/address/state` carries the US subdivision pattern and `/address/postalCode` the US ZIP pattern while that same person's `/address/country` is `USA` (`scope: 'person'`), and the business's `/operatingAddress/state` and `/operatingAddress/postalCode` carry the same two while `/operatingAddress/country` is `USA`, read at the root of the body because the condition names no scope. A person's `/taxIdNumber` carries the US Social Security Number pattern while that same person's `/taxIdType` is `SSN`. When two or more requirement rules declare one field and a rule's check depends on a condition discovery cannot settle (most often a `scope: 'person'` condition), that rule's check is an element too: its `constraints` and, for an enum field, its `allowedValues`. Some overrides' `pattern` states only the canonical value to send, not the full set submit accepts: the US subdivision pattern states the two-letter code with or without the `US-` prefix, while submit also accepts the full state name and other spellings. Apply every element whose conditions hold ON TOP OF the field's own `constraints`, never in place of them: the value must match the field-level `pattern` and every override `pattern` that applies, and a bound named twice tightens to the stricter value. The property is additive and a client may ignore it, in which case the field reads exactly as it did before the property existed and submit can still reject a value the override would have named. Silently absent when the field carries no conditional case.","type":"array","items":{"type":"object","properties":{"conditions":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the submitted-data field this condition reads. Resolution is governed by the sibling scope (root by default; person-scoped when scope='person').","example":"/companyClassification/legalStructure"},"operator":{"type":"string","enum":["eq","in","not_in","exists","is_true","is_false"],"description":"Comparison operator. The field is required / applies only when the condition evaluates true against the current submitted data.","example":"eq"},"value":{"description":"Single comparison value, used with eq / exists operators","type":"string"},"values":{"description":"Array of comparison values, used with in / not_in operators. When the field at `pointer` is an array, `in` holds when any element of it is one of these values.","type":"array","items":{"type":"string"}},"scope":{"description":"Evaluation scope for `pointer`. Default `root` evaluates against the top-level submission; `person` evaluates against the current `ownership.persons[i]` row (used inside `individualRequirements[].fields[].conditions`).","type":"string","enum":["root","person"]}},"required":["pointer","operator"],"additionalProperties":false},"description":"Conditions that must ALL hold for this override to apply. Same shape and evaluation as `conditions` on the field itself, `scope` included."},"constraints":{"type":"object","properties":{"pattern":{"description":"Regex stating the canonical form of the value. A value that matches it is in the form submit expects; for some fields, submit is more lenient than this pattern and can accept spellings it does not state, so a value outside it is not always refused.","example":"^\\d{2}\\.\\d{3}\\.\\d{3}/\\d{4}-\\d{2}$","type":"string"},"example":{"description":"Example value matching the pattern","example":"12.345.678/0001-95","type":"string"},"format":{"description":"Advertised server-enforced semantic format marker. Closed enum: `safeString` (structured short fields — rejects control characters, HTML tags, and punctuation outside the documented allowlist), `prose` (free-text fields — allows ordinary punctuation and multi-line text, rejecting control characters, invisible-format characters, line/paragraph separators, and lone surrogates) or `ip` (an IPv4 or IPv6 address — no zone identifier, no leading zeros in IPv4 octets). The server enforces the rule at submit; the marker advertises it so clients can pre-validate. Arbitrary regex aliases belong in `pattern`.","type":"string","enum":["safeString","prose","ip"]},"minLength":{"description":"Minimum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxLength":{"description":"Maximum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"min":{"description":"Minimum numeric value","type":"number"},"max":{"description":"Maximum numeric value","type":"number"},"minDate":{"description":"Earliest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"1800-01-01","type":"string"},"maxDate":{"description":"Latest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"today","type":"string"},"maxDateTime":{"description":"Latest allowed instant for a datetime field: the literal 'now'. A value up to five minutes ahead of the server clock is accepted to absorb clock skew.","example":"now","type":"string","enum":["now"]},"minAgeYears":{"description":"Minimum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxAgeYears":{"description":"Maximum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"checksum":{"description":"A check digit rule the value must pass beyond `pattern`: `aba` for a US routing number, `iban` for an international bank account number (mod-97).","type":"string","enum":["aba","iban"]}},"additionalProperties":false,"description":"Constraints submit adds while the conditions hold. They narrow the field, never widen it, and they do not replace the field's own `constraints`: `pattern` is a SECOND regex that states the canonical form for this case, applied as well as the field-level `pattern`, and a bound named on both takes whichever value is stricter. As at field level, submit can be more lenient than some of these patterns state. `example` is a value valid under this override. Empty when the override narrows only `allowedValues`."},"allowedValues":{"description":"Allowed values for an enum / enumArray field while the conditions hold: a subset of the field's own `allowedValues`. Submit refuses a value outside it in that case. Omitted when the override does not narrow the values.","example":["SSN"],"type":"array","items":{"type":"string"}}},"required":["conditions","constraints"],"additionalProperties":false}}},"required":["pointer","label","type","required"]},"description":"Scalar fields each person filling this role must submit. Each `pointer` is rooted at the person object (un-prefixed, e.g. `/firstName`, not `/ownership/persons/firstName`). Conditions on these fields default to `scope: 'root'`; per-person conditional applicability uses `scope: 'person'`."},"documents":{"type":"array","items":{"type":"object","properties":{"canonicalType":{"type":"string","enum":["BUSINESS_REGISTRATION","ARTICLES_OF_INCORPORATION","TAX_CERTIFICATE","OPERATING_LICENSE","REGULATORY_LICENSE","SHAREHOLDERS_REGISTRY","DIRECTORS_REGISTRY","AUTHORIZATION_TO_ACT","PROOF_OF_ADDRESS","CERTIFICATE_OF_GOOD_STANDING","FLOW_OF_FUNDS","AUDITED_FINANCIAL_STATEMENT","BANK_STATEMENT","ORG_STRUCTURE_CHART","AML_AUDIT","COMPLIANCE_POLICY","INSTITUTIONAL_INVESTOR_DOCUMENTATION","IRS_W8BEN_E","IRS_W8BEN","IRS_W9","IDENTITY_VERIFICATION","IDENTITY_VERIFICATION_ATTESTATION","EDD_EVIDENCE","BANK_VERIFICATION_LETTER","INVOICE","CONTRACT","PAYROLL_REGISTER","INVESTMENT_AGREEMENT","OTHER","SELFIE"],"description":"Canonical category label for this document slot. Collect a document matching the title or category and upload it with `POST /v2/documents`. Setting that upload's optional `type` to this value records the file against this slot; Conduit still identifies the document itself, and that determination is what applies."},"title":{"type":"string","description":"Human-readable artifact name for UI display","example":"Government-issued photo ID"},"optional":{"description":"True when collection is recommended but not required for submission.","type":"boolean"}},"required":["canonicalType","title"],"additionalProperties":false},"description":"Documents each person in this role must supply. Upload via POST /v2/documents and reference the returned id under `ownership.persons[i].documentIds[]`."}},"required":["role","minCount","fields","documents"]},{"type":"object","properties":{"role":{"type":"string","description":"Role label for this requirement row. A business row carries `CONTROLLING_PERSON`, `LEGAL_REPRESENTATIVE` or the sentinel `any`; `BENEFICIAL_OWNER` has its own branch. An individual row carries `ACCOUNT_HOLDER`, the one role of an individual application. Submit a role under `ownership.persons[i].roles[]` verbatim, except `any`, which marks a row that applies to every declared person and is rejected as a person's role at submit. Each row is self-contained: `documents[]` already includes any requirement authored with the sentinel role `any`, so a client only needs this one row per role. An `any` row appears only when a rule asks for `any` as a person requirement.","example":"CONTROLLING_PERSON"},"minCount":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Minimum number of persons that must fill this role"},"maxCount":{"description":"Maximum number of persons accepted under this role. Absent when unbounded.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"fields":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the field in the submission payload. Always starts with /. Array indices appear as integers.","example":"/businessInfo/taxId"},"label":{"type":"string","description":"Human-readable label for display","example":"Tax Identification Number"},"helpText":{"description":"One-line guidance for the field, intended to render as a tooltip / info pill next to the label. Plain text, no markup. For `businessInfo.taxId` and `businessInfo.businessEntityId` this is the country-specific identifier description from `countries.json` (with the issuing authority prefixed when known, e.g. 'Issued by HMRC.'). For other fields it is universal copy from the server-side field registry. Silently absent when neither source has guidance on file. See api-conventions §5.1.5.","example":"Issued by HMRC. 10-digit number; auto-assigned on CT registration; appears on HMRC correspondence. VAT Registration Number (GB + 9 digits; XI prefix for NI–EU trade) is supplementary — collect separately if VAT-registered.","type":"string"},"type":{"type":"string","enum":["string","number","integer","boolean","date","datetime","email","url","phone","country","enum","stringArray","enumArray"],"description":"Data type of the field","example":"string"},"required":{"type":"boolean","description":"Whether the field is required at submit"},"group":{"description":"Section grouping code for renderers. Stable camelCase token drawn from a closed set per discovery context (onboarding today: `businessInfo`, `companyClassification`, `registeredAddress`, `operatingAddress`, `businessActivity`, `activity`, `regulatoryHistory`, `certification`, `customAnswers`; `activity` carries an individual subject's own activity envelope, where `businessActivity` carries a business subject's; `customAnswers` carries operator-authored questions). Omitted on top-level scalars without a section and on fields nested inside `individualRequirements[].fields[]` (already a logical group). Presentation metadata; submit ignores it.","type":"string"},"mustEqual":{"description":"Required-with-const marker. Submit enforces strict equality on the field value (not just presence). Most common case: legal-certification booleans (`certification.termsAndConditions: { required: true, mustEqual: true }`) where `false` submits are rejected. Omitted when not constrained to a single value.","anyOf":[{"type":"boolean"},{"type":"string"},{"type":"number"}]},"constraints":{"description":"Per-value limits on this field alone, enforceable client-side. Satisfying them does not by itself clear submit: a value must also satisfy the field's `allowedValues`, its `mustEqual`, and every `conditionalOverride` whose conditions hold. Some `pattern` values state only a canonical spelling, and submit can accept equivalent spellings such a pattern does not list.","type":"object","properties":{"pattern":{"description":"Regex stating the canonical form of the value. A value that matches it is in the form submit expects; for some fields, submit is more lenient than this pattern and can accept spellings it does not state, so a value outside it is not always refused.","example":"^\\d{2}\\.\\d{3}\\.\\d{3}/\\d{4}-\\d{2}$","type":"string"},"example":{"description":"Example value matching the pattern","example":"12.345.678/0001-95","type":"string"},"format":{"description":"Advertised server-enforced semantic format marker. Closed enum: `safeString` (structured short fields — rejects control characters, HTML tags, and punctuation outside the documented allowlist), `prose` (free-text fields — allows ordinary punctuation and multi-line text, rejecting control characters, invisible-format characters, line/paragraph separators, and lone surrogates) or `ip` (an IPv4 or IPv6 address — no zone identifier, no leading zeros in IPv4 octets). The server enforces the rule at submit; the marker advertises it so clients can pre-validate. Arbitrary regex aliases belong in `pattern`.","type":"string","enum":["safeString","prose","ip"]},"minLength":{"description":"Minimum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxLength":{"description":"Maximum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"min":{"description":"Minimum numeric value","type":"number"},"max":{"description":"Maximum numeric value","type":"number"},"minDate":{"description":"Earliest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"1800-01-01","type":"string"},"maxDate":{"description":"Latest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"today","type":"string"},"maxDateTime":{"description":"Latest allowed instant for a datetime field: the literal 'now'. A value up to five minutes ahead of the server clock is accepted to absorb clock skew.","example":"now","type":"string","enum":["now"]},"minAgeYears":{"description":"Minimum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxAgeYears":{"description":"Maximum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"checksum":{"description":"A check digit rule the value must pass beyond `pattern`: `aba` for a US routing number, `iban` for an international bank account number (mod-97).","type":"string","enum":["aba","iban"]}},"additionalProperties":false},"requiredOneOf":{"description":"Names a group of fields of which at least one must be sent. Every field in the response that has the same value is in the group, and each of them alone is enough. Absent when the field is in no group.","example":"accountIdentifier","type":"string"},"conditions":{"description":"Conditional applicability rules. The field applies (is shown / required) only when every condition evaluates true against the current submission. Empty / absent means unconditional.","type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the submitted-data field this condition reads. Resolution is governed by the sibling scope (root by default; person-scoped when scope='person').","example":"/companyClassification/legalStructure"},"operator":{"type":"string","enum":["eq","in","not_in","exists","is_true","is_false"],"description":"Comparison operator. The field is required / applies only when the condition evaluates true against the current submitted data.","example":"eq"},"value":{"description":"Single comparison value, used with eq / exists operators","type":"string"},"values":{"description":"Array of comparison values, used with in / not_in operators. When the field at `pointer` is an array, `in` holds when any element of it is one of these values.","type":"array","items":{"type":"string"}},"scope":{"description":"Evaluation scope for `pointer`. Default `root` evaluates against the top-level submission; `person` evaluates against the current `ownership.persons[i]` row (used inside `individualRequirements[].fields[].conditions`).","type":"string","enum":["root","person"]}},"required":["pointer","operator"],"additionalProperties":false}},"allowedValues":{"description":"Allowed values for enum / enumArray fields. The submitted value MUST be one of these.","example":["LLC","CORPORATION","PARTNERSHIP"],"type":"array","items":{"type":"string"}},"options":{"description":"Structured per-option metadata for enum fields with display / grouping hints (label, abbr, description, category). `value` mirrors an entry in `allowedValues`. Present when the projector has localized data to surface (e.g. country-specific legal structures); enum fields without rich metadata use `allowedValues` alone.","type":"array","items":{"type":"object","properties":{"value":{"type":"string","description":"Submitted value. Must be one of the entries in the sibling `allowedValues` array.","example":"Sociedad Anónima"},"label":{"type":"string","description":"Human-readable label for display","example":"Sociedad Anónima"},"abbr":{"type":"string","description":"Short-form / acronym for the option","example":"S.A.","nullable":true},"description":{"description":"Long-form description of the option","type":"string"},"category":{"type":"string","enum":["Corp","LLC","Sole Proprietorship","Partnership","Other","regulatory_review"],"description":"Out-of-band metadata for an option that affects how it should be rendered or handled. Values: the legal-structure canonical bucket (`Corp` / `LLC` / `Sole Proprietorship` / `Partnership` / `Other`) — used to map the localised `value` to a standardised type; and `regulatory_review` — indicates this option is subject to additional regulatory review and may warrant a pre-submission warning to the user. Silently absent on options that carry no such metadata."}},"required":["value","label"],"additionalProperties":false}},"conditionalOverrides":{"description":"Extra constraints that apply only while their own conditions hold. Each element carries a `conditions` array read exactly like the field's own `conditions` — every condition must hold, and `scope: 'person'` resolves the pointer against the current `ownership.persons[i]` row — plus the `constraints` submit adds for that case. Three cases ship. An address states what submit keys on that address's own country: a person's `/address/state` carries the US subdivision pattern and `/address/postalCode` the US ZIP pattern while that same person's `/address/country` is `USA` (`scope: 'person'`), and the business's `/operatingAddress/state` and `/operatingAddress/postalCode` carry the same two while `/operatingAddress/country` is `USA`, read at the root of the body because the condition names no scope. A person's `/taxIdNumber` carries the US Social Security Number pattern while that same person's `/taxIdType` is `SSN`. When two or more requirement rules declare one field and a rule's check depends on a condition discovery cannot settle (most often a `scope: 'person'` condition), that rule's check is an element too: its `constraints` and, for an enum field, its `allowedValues`. Some overrides' `pattern` states only the canonical value to send, not the full set submit accepts: the US subdivision pattern states the two-letter code with or without the `US-` prefix, while submit also accepts the full state name and other spellings. Apply every element whose conditions hold ON TOP OF the field's own `constraints`, never in place of them: the value must match the field-level `pattern` and every override `pattern` that applies, and a bound named twice tightens to the stricter value. The property is additive and a client may ignore it, in which case the field reads exactly as it did before the property existed and submit can still reject a value the override would have named. Silently absent when the field carries no conditional case.","type":"array","items":{"type":"object","properties":{"conditions":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the submitted-data field this condition reads. Resolution is governed by the sibling scope (root by default; person-scoped when scope='person').","example":"/companyClassification/legalStructure"},"operator":{"type":"string","enum":["eq","in","not_in","exists","is_true","is_false"],"description":"Comparison operator. The field is required / applies only when the condition evaluates true against the current submitted data.","example":"eq"},"value":{"description":"Single comparison value, used with eq / exists operators","type":"string"},"values":{"description":"Array of comparison values, used with in / not_in operators. When the field at `pointer` is an array, `in` holds when any element of it is one of these values.","type":"array","items":{"type":"string"}},"scope":{"description":"Evaluation scope for `pointer`. Default `root` evaluates against the top-level submission; `person` evaluates against the current `ownership.persons[i]` row (used inside `individualRequirements[].fields[].conditions`).","type":"string","enum":["root","person"]}},"required":["pointer","operator"],"additionalProperties":false},"description":"Conditions that must ALL hold for this override to apply. Same shape and evaluation as `conditions` on the field itself, `scope` included."},"constraints":{"type":"object","properties":{"pattern":{"description":"Regex stating the canonical form of the value. A value that matches it is in the form submit expects; for some fields, submit is more lenient than this pattern and can accept spellings it does not state, so a value outside it is not always refused.","example":"^\\d{2}\\.\\d{3}\\.\\d{3}/\\d{4}-\\d{2}$","type":"string"},"example":{"description":"Example value matching the pattern","example":"12.345.678/0001-95","type":"string"},"format":{"description":"Advertised server-enforced semantic format marker. Closed enum: `safeString` (structured short fields — rejects control characters, HTML tags, and punctuation outside the documented allowlist), `prose` (free-text fields — allows ordinary punctuation and multi-line text, rejecting control characters, invisible-format characters, line/paragraph separators, and lone surrogates) or `ip` (an IPv4 or IPv6 address — no zone identifier, no leading zeros in IPv4 octets). The server enforces the rule at submit; the marker advertises it so clients can pre-validate. Arbitrary regex aliases belong in `pattern`.","type":"string","enum":["safeString","prose","ip"]},"minLength":{"description":"Minimum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxLength":{"description":"Maximum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"min":{"description":"Minimum numeric value","type":"number"},"max":{"description":"Maximum numeric value","type":"number"},"minDate":{"description":"Earliest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"1800-01-01","type":"string"},"maxDate":{"description":"Latest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"today","type":"string"},"maxDateTime":{"description":"Latest allowed instant for a datetime field: the literal 'now'. A value up to five minutes ahead of the server clock is accepted to absorb clock skew.","example":"now","type":"string","enum":["now"]},"minAgeYears":{"description":"Minimum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxAgeYears":{"description":"Maximum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"checksum":{"description":"A check digit rule the value must pass beyond `pattern`: `aba` for a US routing number, `iban` for an international bank account number (mod-97).","type":"string","enum":["aba","iban"]}},"additionalProperties":false,"description":"Constraints submit adds while the conditions hold. They narrow the field, never widen it, and they do not replace the field's own `constraints`: `pattern` is a SECOND regex that states the canonical form for this case, applied as well as the field-level `pattern`, and a bound named on both takes whichever value is stricter. As at field level, submit can be more lenient than some of these patterns state. `example` is a value valid under this override. Empty when the override narrows only `allowedValues`."},"allowedValues":{"description":"Allowed values for an enum / enumArray field while the conditions hold: a subset of the field's own `allowedValues`. Submit refuses a value outside it in that case. Omitted when the override does not narrow the values.","example":["SSN"],"type":"array","items":{"type":"string"}}},"required":["conditions","constraints"],"additionalProperties":false}}},"required":["pointer","label","type","required"]},"description":"Scalar fields each person filling this role must submit. Each `pointer` is rooted at the person object (un-prefixed, e.g. `/firstName`, not `/ownership/persons/firstName`). Conditions on these fields default to `scope: 'root'`; per-person conditional applicability uses `scope: 'person'`."},"documents":{"type":"array","items":{"type":"object","properties":{"canonicalType":{"type":"string","enum":["BUSINESS_REGISTRATION","ARTICLES_OF_INCORPORATION","TAX_CERTIFICATE","OPERATING_LICENSE","REGULATORY_LICENSE","SHAREHOLDERS_REGISTRY","DIRECTORS_REGISTRY","AUTHORIZATION_TO_ACT","PROOF_OF_ADDRESS","CERTIFICATE_OF_GOOD_STANDING","FLOW_OF_FUNDS","AUDITED_FINANCIAL_STATEMENT","BANK_STATEMENT","ORG_STRUCTURE_CHART","AML_AUDIT","COMPLIANCE_POLICY","INSTITUTIONAL_INVESTOR_DOCUMENTATION","IRS_W8BEN_E","IRS_W8BEN","IRS_W9","IDENTITY_VERIFICATION","IDENTITY_VERIFICATION_ATTESTATION","EDD_EVIDENCE","BANK_VERIFICATION_LETTER","INVOICE","CONTRACT","PAYROLL_REGISTER","INVESTMENT_AGREEMENT","OTHER","SELFIE"],"description":"Canonical category label for this document slot. Collect a document matching the title or category and upload it with `POST /v2/documents`. Setting that upload's optional `type` to this value records the file against this slot; Conduit still identifies the document itself, and that determination is what applies."},"title":{"type":"string","description":"Human-readable artifact name for UI display","example":"Government-issued photo ID"},"optional":{"description":"True when collection is recommended but not required for submission.","type":"boolean"}},"required":["canonicalType","title"],"additionalProperties":false},"description":"Documents each person in this role must supply. Upload via POST /v2/documents and reference the returned id under `ownership.persons[i].documentIds[]`."}},"required":["role","minCount","fields","documents"]}]},"description":"Per-role count and person-level field + document requirements for ownership.persons[]."}},"required":["schemaVersion","context","country","fields","documents","minDocuments","individualRequirements"]},"OnboardingSubmitDto":{"type":"object","properties":{"subjectType":{"description":"The application subject. `business` (the default when omitted) onboards an entity; `individual` onboards a natural person, whose data goes under `ownership.persons[0]` and `activity`.","type":"string","enum":["business","individual"]},"businessInfo":{"type":"object","description":"Business-level data about the entity. Which leaves are required for a given country comes from `GET /v2/onboarding/requirements`.","properties":{"legalName":{"type":"string","description":"The full legal name of the entity as registered with government authorities (matches its Articles of Incorporation or equivalent formation document). Do not abbreviate.","maxLength":255},"alternateNameDba":{"type":"string","description":"Any trading name, brand name, or 'doing business as' (DBA) the company uses publicly that differs from the legal name. Leave blank if the company only trades under the legal name.","maxLength":255},"businessEntityId":{"type":"string","description":"Business Entity ID","maxLength":255},"taxId":{"type":"string","description":"Tax Identification Number"},"chapter4Status":{"type":"string","description":"The entity's chapter 4 status as stated on line 5 of its Form W-8BEN-E.","enum":["Participating FFI","Reporting Model 1 FFI","Reporting Model 2 FFI","Active NFFE","Passive NFFE"]},"giin":{"type":"string","description":"Global Intermediary Identification Number from the IRS FFI List, line 9a of Form W-8BEN-E; required for an FFI status.","pattern":"^[0-9A-Z]{6}\\.[0-9A-Z]{5}\\.[A-Z]{2}\\.[0-9]{3}$"},"website":{"type":"string","description":"Website","format":"uri","maxLength":500},"companyEmail":{"type":"string","description":"Company Email","format":"email","maxLength":255},"companyPhone":{"type":"string","description":"Company Phone"}},"additionalProperties":{}},"registeredAddress":{"type":"object","description":"Registered business address. `country` accepts ISO 3166-1 alpha-2 or alpha-3. Which leaves are required for a given country comes from `GET /v2/onboarding/requirements`.","properties":{"country":{"type":"string","description":"Country"},"addressLine1":{"type":"string","description":"Street 1","maxLength":500},"addressLine2":{"type":"string","description":"Street 2","maxLength":500},"city":{"type":"string","description":"City","maxLength":255},"state":{"type":"string","description":"State / Province","maxLength":255},"postalCode":{"type":"string","description":"Zip Code","maxLength":20},"poBox":{"type":"string","description":"P.O. Box Number","pattern":"^[0-9]{4,5}$"}},"additionalProperties":{}},"operatingAddress":{"type":"object","description":"Operating address when it differs from the registered one. Same leaves and `country` rules.","properties":{"sameAsRegistered":{"type":"boolean","description":"Is the operating address the same as the registered address?"},"addressLine1":{"type":"string","description":"Street 1"},"addressLine2":{"type":"string","description":"Street 2"},"city":{"type":"string","description":"City"},"state":{"type":"string","description":"State / Province"},"country":{"type":"string","description":"Country"},"postalCode":{"type":"string","description":"Zip Code"}},"additionalProperties":{}},"companyClassification":{"type":"object","description":"Legal-structure and industry classification. `legalStructure` and `primaryIndustry` are jurisdiction-specific; take their accepted values from `GET /v2/onboarding/requirements`.","properties":{"legalStructure":{"type":"string","description":"Legal Structure"},"llcTaxClassification":{"type":"string","description":"How the IRS taxes this US LLC: Partnership, C-Corp or S-Corp. A multi-member LLC that made no election is a Partnership. Applies only to an LLC registered in the USA.","enum":["Partnership","C-Corp","S-Corp"]},"legalStructureOther":{"type":"string","description":"Legal Structure (Other)","pattern":"\\S","maxLength":255},"incorporationDate":{"type":"string","description":"Date of Incorporation","format":"date"},"primaryIndustry":{"type":"string","description":"The single industry that best describes your primary revenue source, chosen from the current policy catalog. If the business spans multiple industries, pick the one generating the most revenue rather than the broadest category.","maxLength":120},"primaryIndustryOther":{"type":"string","description":"Primary Industry (Other)","maxLength":500},"hasDba":{"type":"boolean","description":"Has DBA / Trade Name?"},"isPubliclyListed":{"type":"boolean","description":"Publicly Listed?"},"stockExchange":{"type":"string","description":"Stock Exchange","enum":["NYSE","NASDAQ","LSE","JSE","NSE","B3","BMV","SGX","HKEX","TSX","ASX","Other"]},"stockExchangeOther":{"type":"string","description":"Stock Exchange (Other)"},"tickerSymbol":{"type":"string","description":"Ticker Symbol"}},"additionalProperties":{}},"businessActivity":{"type":"object","description":"Operating-activity descriptors. Which leaves are required for a given country comes from `GET /v2/onboarding/requirements`.","properties":{"businessActivitiesDescription":{"type":"string","description":"Plain-language summary of what the business actually does day-to-day. A paragraph is enough — describe the core economic activity, not the legal form."},"accountPurpose":{"type":"array","description":"Select every USD virtual-account use case that applies, even those that are infrequent. This drives risk-tier categorisation and monitoring thresholds, so being complete is better than picking only the dominant flow.","items":{"type":"string","enum":["Treasury Management","Payroll","Vendor/Supplier Payments","Operating Expenses","Client Collections","Investment","FX Settlement","Escrow","Other"]}},"accountPurposeOther":{"type":"string","description":"Describe the USD VA use case"},"productsServices":{"type":"array","description":"What the business sells to its customers. Internal-use products (HR systems, IT tooling, etc.) are not the target here — focus on what generates revenue. Select all that apply.","items":{"type":"string","enum":["Technology / SaaS Provider","Sale of Goods / Non-Financial Services","Import / Export","Wholesale / Distribution","Investment Advisory","Digital Wallets / Stored Value","Custody","Lending / Credit","Escrow / Settlement Services","Crypto Exchange or Trading","Cross-Border Payments","NFT / DeFi / Web3","Foreign Exchange / Currency Conversion","Card Issuance & Merchant Services","Brokerage / Trading Platform","Asset Management / Fund Services","Precious Metals / High-Value Commodities","Marketplace or Platform Operator","Real Estate / Title / Property Escrow","Crowdfunding / Capital Raising Platforms","Trust and Company Services (TCSP)"]}},"productsServicesOther":{"type":"string","description":"Products / Services (Other)"},"countriesOfActivity":{"type":"array","description":"Countries where the business has customers, counterparties, or operations. Include jurisdictions where the business receives payments, sends payments, or holds assets — not just the country of incorporation.","items":{"type":"string","enum":["AFG","ALB","DZA","ASM","AND","AGO","AIA","ATA","ATG","ARG","ARM","ABW","AUS","AUT","AZE","BHS","BHR","BGD","BRB","BLR","BEL","BLZ","BEN","BMU","BTN","BOL","BES","BIH","BWA","BVT","BRA","IOT","BRN","BGR","BFA","BDI","CPV","KHM","CMR","CAN","CYM","CAF","TCD","CHL","CHN","CXR","CCK","COL","COM","COG","COD","COK","CRI","CIV","HRV","CUB","CUW","CYP","CZE","DNK","DJI","DMA","DOM","ECU","EGY","SLV","GNQ","ERI","EST","SWZ","ETH","FLK","FRO","FJI","FIN","FRA","GUF","PYF","ATF","GAB","GMB","GEO","DEU","GHA","GIB","GRC","GRL","GRD","GLP","GUM","GTM","GGY","GIN","GNB","GUY","HTI","HMD","VAT","HND","HKG","HUN","ISL","IND","IDN","IRN","IRQ","IRL","IMN","ISR","ITA","JAM","JPN","JEY","JOR","KAZ","KEN","KIR","PRK","KOR","KWT","KGZ","LAO","LVA","LBN","LSO","LBR","LBY","LIE","LTU","LUX","MAC","MDG","MWI","MYS","MDV","MLI","MLT","MHL","MTQ","MRT","MUS","MYT","MEX","FSM","MDA","MCO","MNG","MNE","MSR","MAR","MOZ","MMR","NAM","NRU","NPL","NLD","NCL","NZL","NIC","NER","NGA","NIU","NFK","MKD","MNP","NOR","OMN","PAK","PLW","PSE","PAN","PNG","PRY","PER","PHL","PCN","POL","PRT","PRI","QAT","REU","ROU","RUS","RWA","BLM","SHN","KNA","LCA","MAF","SPM","VCT","WSM","SMR","STP","SAU","SEN","SRB","SYC","SLE","SGP","SXM","SVK","SVN","SLB","SOM","ZAF","SGS","SSD","ESP","LKA","SDN","SUR","SJM","SWE","CHE","SYR","TWN","TJK","TZA","THA","TLS","TGO","TKL","TON","TTO","TUN","TUR","TKM","TCA","TUV","UGA","UKR","ARE","GBR","USA","UMI","URY","UZB","VUT","VEN","VNM","VGB","VIR","WLF","ESH","YEM","ZMB","ZWE"]}},"countriesOfActivityOther":{"type":"string","description":"Countries of Activity (Other)"},"avgMonthlyVolume":{"type":"string","description":"Expected average USD value flowing through the business's Conduit virtual account each month, across all in- and out-bound transactions combined.","enum":["VOLUME_LT_10K","VOLUME_10K_50K","VOLUME_50K_250K","VOLUME_250K_1M","VOLUME_GT_1M"]},"estimatedTransactionsPerMonth":{"type":"string","description":"Expected average count of transactions per month through the business's Conduit virtual account, across all flows combined (deposits, withdrawals, conversions).","enum":["<10","10-50","50-200","200-1,000","1,000+"]},"sourceOfFunds":{"type":"array","description":"Where the money the business expects to receive through Conduit originates. Select all that apply (e.g. customer revenue, investor capital, lending proceeds). Use the 'Other' follow-up for sources not on the list.","items":{"type":"string","enum":["Revenue/Sales","VC/PE Investment","Loans/Debt Financing","Government Grant","Personal/Founder Funds","Donations","Other"]}},"sourceOfFundsOther":{"type":"string","description":"Source of Funds (Other)"},"fundFlowDescription":{"type":"string","description":"Describe the typical end-to-end flow of funds through the business: who sends money in, what triggers the inbound flow, and where the money is ultimately paid out. One or two paragraphs."},"isRegulated":{"type":"boolean","description":"Regulated / Financial Services?"},"regulatoryAuthorities":{"type":"array","description":"Regulatory Authorities","items":{"type":"string","enum":["Central Bank of Kenya","FCA","SEC","OCC","FinCEN","SARB","CBN","BdF","BaFin","MAS","Other"]}},"regulatoryAuthorityOther":{"type":"string","description":"Regulatory Authority (Other)"},"licenseNumber":{"type":"string","description":"License / Registration Number"},"isNonbankFinancialInstitution":{"type":"boolean","description":"Yes if the business provides financial services without holding a banking charter — e.g. lending, money transmission or payment services, broker-dealer or investment advisory activity, insurance, currency exchange, or consumer finance. Chartered banks and credit unions answer No."},"operatesOnBehalf":{"type":"boolean","description":"Select Yes if the business receives, holds or sends money that belongs to its own clients or customers. Select No if the business only moves its own money, including payments to its own vendors or suppliers."},"holdsClientFundsInVirtualAccounts":{"type":"boolean","description":"Select Yes if the business holds, receives or sends funds that belong to its clients through virtual accounts opened in its name. Select No if every virtual account holds only the company's own funds."},"usesBlockchainWallets":{"type":"boolean","description":"Uses Blockchain Wallets?"},"onBehalfDescription":{"type":"string","description":"On Behalf Description"},"walletAddresses":{"type":"string","description":"Blockchain Wallet Addresses"},"walletExchanges":{"type":"string","description":"Blockchain Wallet Exchanges"},"isGeneratingRevenue":{"type":"boolean","description":"Currently Generating Revenue?"},"revenueCovers":{"type":"string","description":"What share of the business's monthly operating expenses its revenue currently covers, on average over the trailing three months.","enum":["All operating expenses","Most","Some","Minimal"]},"hasInstitutionalInvestors":{"type":"boolean","description":"Yes if the business has raised capital from venture capital, private equity, hedge funds, family offices, or strategic corporate investors. Friends-and-family or solo-angel equity does not count as institutional."},"financialRunway":{"type":"string","description":"Financial Runway (Months)","enum":["RUNWAY_LT_3M","RUNWAY_3M_6M","RUNWAY_6M_12M","RUNWAY_GT_12M"]},"cashOnHand":{"type":"string","description":"Total liquid funds the business currently holds across all business accounts (cash, money-market, short-dated treasuries). Excludes owners' personal accounts and illiquid or locked-up assets.","enum":["<$50K","$50K-$250K","$250K-$1M","$1M-$5M","$5M-$25M","$25M+"]},"runwayExplanation":{"type":"string","description":"Runway Explanation"},"hasIndependentAmlAudit":{"type":"boolean","description":"Has Independent AML Audit?"},"hasHighRiskIndustries":{"type":"boolean","description":"Answer Yes if the business directly participates in or earns revenue from any of these high-risk industries: Adult Entertainment, Cannabis/Marijuana, Cryptocurrency/Digital Assets, Firearms/Ammunition, Gambling/Online Gaming, Money Services Business, Precious Metals/Stones, Third-Party Payment Processing, Virtual Currency/Digital Tokens, Pawnbroker, Tobacco, Pharmaceutical Sales (Online), Shell Banks, Non-Profit / Charity, Cash-Intensive Retail. If the activity isn't listed but is high-risk, answer Yes and select \"Other\" to describe it."},"highRiskIndustries":{"type":"array","description":"Industries the business directly participates in or earns revenue from. This asks about direct participation, not incidental exposure (e.g. having a customer in a high-risk industry). Select 'Other' if the activity isn't listed, then describe it.","items":{"type":"string","enum":["Adult Entertainment","Cannabis/Marijuana","Cryptocurrency/Digital Assets","Firearms/Ammunition","Gambling/Online Gaming","Money Services Business","Precious Metals/Stones","Third-Party Payment Processing","Virtual Currency/Digital Tokens","Pawnbroker","Tobacco","Pharmaceutical Sales (Online)","Shell Banks","Non-Profit / Charity","Cash-Intensive Retail","Other","None of the Above"]}},"highRiskDetails":{"type":"string","description":"High-Risk Details"},"hasRegulatedOrRestrictedActivities":{"type":"boolean","description":"Answer Yes if the business directly participates in or earns revenue from any activity on the current policy catalog. If the activity isn't listed but is regulated or restricted, answer Yes and select \"Other\" to describe it."},"regulatedOrRestrictedActivities":{"type":"array","description":"Activities the business directly participates in or earns revenue from, chosen from the current policy catalog. This asks about direct participation, not incidental exposure. \"Other\" is composable with named activities — select it alongside any that apply, then describe it below.","items":{"type":"string"}},"otherActivityDescription":{"type":"string","description":"Other Activity Description","maxLength":500}},"additionalProperties":{}},"compliance":{"type":"object","description":"Compliance-programme attestations. Optional on customer onboarding: `GET /v2/onboarding/requirements` never lists these leaves, so send them only if they apply.","properties":{"hasComplianceProgram":{"type":"boolean","description":"Yes if the business has documented BSA/AML or KYC policies, named a compliance owner, and operates ongoing controls (screening, monitoring, periodic reviews). Informal or ad-hoc controls do not qualify as a 'program'."},"complianceManager":{"type":"string","description":"Compliance Manager"},"complianceManagerEmail":{"type":"string","description":"Compliance Manager Email","format":"email"},"sanctionsScreening":{"type":"string","description":"How the business screens customers and counterparties against sanctions lists (OFAC, UN, EU). Pick the primary method: automated vendor (e.g. ComplyAdvantage, LexisNexis, Refinitiv), in-house tooling, manual checks against published lists, or none.","enum":["Chainalysis","Elliptic","ComplyAdvantage","Sardine","TRM Labs","Refinitiv World-Check","Dow Jones Risk & Compliance","LexisNexis","Sanctions.io","Manual OFAC List Checks","No Screening","Other"]},"sanctionsScreeningOther":{"type":"string","description":"Sanctions Screening (Other)"},"cddMethod":{"type":"string","description":"How the business verifies the identity of its customers and their beneficial owners (Customer Due Diligence). Pick the primary approach: third-party KYC vendor, in-house workflow, document-only review at onboarding, or none.","enum":["Jumio","Onfido","Veriff","Sumsub","Persona","Alloy","Trulioo","LexisNexis","Plaid Identity Verification","Manual Document Review","No CDD Process","Other"]},"cddMethodOther":{"type":"string","description":"Customer Due Diligence Method (Other)"},"transactionMonitoring":{"type":"array","description":"How the business flags unusual transaction patterns post-onboarding. Select all that apply: rule-based engines, vendor platforms, manual review against thresholds, periodic file review, etc.","items":{"type":"string","enum":["Chainalysis KYT","Elliptic Lens","ComplyAdvantage","Sardine","TRM Labs","Featurespace","Manual Monitoring","No Transaction Monitoring","Other"]}},"transactionMonitoringOther":{"type":"string","description":"Transaction Monitoring (Other)"},"complianceTraining":{"type":"array","description":"Compliance Training Programs","items":{"type":"string","enum":["Annual AML/KYC Training","Role-Specific Compliance Training","External Compliance Certifications","Ad Hoc Training Only","No Formal Training Program"]}},"hasAmlAudit":{"type":"boolean","description":"Has Independent AML Audit?"},"noAuditExplanation":{"type":"string","description":"No Audit Explanation"},"auditIntention":{"type":"string","description":"Audit Intention"},"leadershipExperience":{"type":"string","description":"Aggregate years of BSA / AML / financial-compliance experience among the leadership responsible for the program — typically the compliance manager or MLRO, plus the CEO if owner-operator.","enum":["Extensive (5+ years in compliance/regulated industry)","Moderate (2-5 years in compliance/regulated industry)","Limited (Less than 2 years or no direct experience)"]}},"additionalProperties":{}},"regulatoryHistory":{"type":"object","description":"Regulatory and adverse-action history. Which leaves are required for a given country comes from `GET /v2/onboarding/requirements`.","properties":{"hasUSBankAccount":{"type":"boolean","description":"Existing US Bank Account?"},"deniedBankAccount":{"type":"boolean","description":"Ever Denied a US Bank Account?"},"deniedBankAccountDetails":{"type":"string","description":"The reason the bank gave for denying the account. Do not enter account or routing numbers."},"subjectToAdverseActions":{"type":"boolean","description":"Yes if the business has ever been subject to regulatory enforcement, consent orders, fines, license revocations, criminal proceedings, or significant civil litigation — past or pending. Use the follow-up field to describe each instance."},"hasPoliticallyExposedPersons":{"type":"boolean","description":"Yes if any owner, director, or senior executive of the business is — or is a close family member or known associate of — a current or former senior government official, head of state, senior politician, judge, or military officer. This is the standard 'Politically Exposed Person' (PEP) definition. Disclose the business's own people, not its customers."},"businessAdverseActions":{"type":"array","description":"Business Adverse Actions","items":{"type":"string","enum":["Sanctions","Regulatory enforcement","Criminal investigation","Civil litigation","Bankruptcy/insolvency","Account closure/termination","Consent order","Seizure/forfeiture","None"]}},"ownersDirectorsAdverseActions":{"type":"array","description":"Adverse-action categories that have affected any current owner, director, or senior executive personally — not the business entity itself. Includes past employer enforcement actions where the individual was named. Select 'None' if none apply.","items":{"type":"string","enum":["Sanctions","Regulatory enforcement","Criminal investigation","Civil litigation","Bankruptcy/insolvency","Account closure/termination","Consent order","Seizure/forfeiture","None"]}},"adverseActionsDetails":{"type":"string","description":"Adverse Actions Details"},"isPoliticallyExposedPerson":{"type":"boolean","description":"Yes if the account holder is — or is a close family member or known associate of — a current or former senior government official, head of state, senior politician, judge, or military officer. This is the standard 'Politically Exposed Person' (PEP) definition."},"adverseActions":{"type":"array","description":"Adverse Actions","items":{"type":"string","enum":["Sanctions","Regulatory enforcement","Criminal investigation","Civil litigation","Bankruptcy/insolvency","Account closure/termination","Consent order","Seizure/forfeiture","None"]}}},"additionalProperties":{}},"ownership":{"type":"object","description":"Beneficial-owner and controlling-person disclosure under `persons[]`. Persons are natural people: disclose a corporate owner under `relatedCompany` and look through it to the individuals behind it. How many persons each role needs, and which per-person leaves they owe, comes from `individualRequirements[]` in `GET /v2/onboarding/requirements`. Each person also carries `roles[]` and `documentIds[]`.","properties":{"persons":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Person Record ID"},"firstName":{"type":"string","description":"First Name","maxLength":255},"lastName":{"type":"string","description":"Last Name","maxLength":255},"middleName":{"type":"string","description":"Middle Name","maxLength":255},"email":{"type":"string","description":"Email","format":"email","maxLength":255},"phoneNumber":{"type":"string","description":"Phone Number"},"birthDate":{"type":"string","description":"Date of Birth","format":"date"},"identityDocumentExpiryDate":{"type":"string","description":"The expiry date of the identity document, as verified by the identity provider. The document must not have expired.","format":"date"},"identityVerificationDate":{"type":"string","description":"The date the identity verification of this person was completed, as shown on the identity verification report. Without it, approval depends on reading the date from the report and can wait for a manual review.","format":"date"},"nationality":{"type":"string","description":"Country of citizenship. For dual nationals, use the citizenship matching the tax ID provided; if asked about additional nationalities elsewhere, disclose them there."},"taxIdType":{"type":"string","description":"An individual may send one of PASSPORT, NATIONAL_ID, DRIVER_LICENSE, RESIDENT_CARD, SSN, ITIN, subject to the nationality rule below. A business owner accepts only SSN, ITIN, NATIONAL_ID. For an individual customer, a US national sends SSN. ITIN is for a US resident of another nationality. For an individual customer, a NATIONAL_ID issued by CAN, NLD, IRL, AUS, JPN is not accepted. For an individual customer, a NATIONAL_ID must be the 13-digit French tax number (numéro fiscal) for FRA, the 16-digit PhilSys card number (PCN) for PHL, a PAN for IND, the 13-digit CNIC for PAK, the 11-digit CPF for BRA, the 18-character CURP for MEX, the 11-digit NIN for NGA, the 10-, 13- or 17-digit NID for BGD, the 11-digit T.C. Kimlik No for TUR. Spaces, dashes, dots, slashes and letter case are ignored. Check digits are verified for FRA, BRA, MEX, TUR. For an individual customer, send a PASSPORT, DRIVER_LICENSE or RESIDENT_CARD instead.","enum":["PASSPORT","NATIONAL_ID","DRIVER_LICENSE","RESIDENT_CARD","SSN","ITIN"]},"taxIdNumber":{"type":"string","description":"For an individual customer, a NATIONAL_ID issued by CAN, NLD, IRL, AUS, JPN is not accepted. For an individual customer, a NATIONAL_ID must be the 13-digit French tax number (numéro fiscal) for FRA, the 16-digit PhilSys card number (PCN) for PHL, a PAN for IND, the 13-digit CNIC for PAK, the 11-digit CPF for BRA, the 18-character CURP for MEX, the 11-digit NIN for NGA, the 10-, 13- or 17-digit NID for BGD, the 11-digit T.C. Kimlik No for TUR. Spaces, dashes, dots, slashes and letter case are ignored. Check digits are verified for FRA, BRA, MEX, TUR. For an individual customer, send a PASSPORT, DRIVER_LICENSE or RESIDENT_CARD instead."},"taxIdCountry":{"type":"string","description":"The country whose tax authority issued the tax identification number (TIN). May differ from the person's nationality or country of residence."},"immigrationStatus":{"type":"string","description":"US immigration status — only relevant for non-US citizens currently living in the United States. Skip if the person is a US citizen or does not live in the US.","enum":["Permanent U.S. Resident","Non-Permanent U.S. Resident","Non-Resident of U.S."]},"taxResidencyCountry":{"type":"string","description":"The country whose tax authority the person files personal income tax with. May differ from nationality (citizenship) or current residence. For multiple tax residencies, list the primary one."},"ownershipPercent":{"type":"number","description":"Direct or indirect ownership share in the business, including ownership held through intermediate entities. For tiered ownership structures, give the effective beneficial share at this entity — not the immediate-parent share.","minimum":0,"maximum":100},"sharesAllocated":{"type":"integer","description":"Shares Allocated","minimum":0},"roles":{"type":"array","description":"Which capacity each person fills. Beneficial Owner: holds ≥25% ownership or otherwise exercises ultimate control. Controlling Person: a senior managing official (CEO / CFO / COO / General Counsel / President or equivalent), regardless of ownership. Legal Representative: authorized to sign on behalf of the entity. Account Holder: the person who opens the account in their own name. Select all that apply.","items":{"type":"string","enum":["BENEFICIAL_OWNER","CONTROLLING_PERSON","LEGAL_REPRESENTATIVE","ACCOUNT_HOLDER"]}},"address":{"type":"object","properties":{"country":{"type":"string","description":"Country"},"addressLine1":{"type":"string","description":"Street 1","maxLength":255},"addressLine2":{"type":"string","description":"Street 2","maxLength":255},"city":{"type":"string","description":"City","maxLength":255},"state":{"type":"string","description":"State / Province","maxLength":255},"postalCode":{"type":"string","description":"Zip Code","maxLength":50}}},"documentIds":{"type":"array","maxItems":100,"items":{"type":"string","minLength":1},"description":"Ids of documents uploaded with `POST /v2/documents` for this person, for example the identity verification attestation."},"identityShare":{"type":"object","description":"Write-only. Only for an organization with KYC reliance. A one-time token that shares this person's verified identity from your identity provider, sent instead of the identity verification attestation and the identity document. Conduit redeems it and runs its own check. See the KYC reliance guide.","properties":{"provider":{"type":"string","enum":["SUMSUB","PERSONA"]},"token":{"type":"string","minLength":1,"maxLength":1024}}}}}}},"additionalProperties":{}},"relatedCompany":{"type":"object","description":"Related-company disclosure for affiliated entities — a parent, subsidiary, sister company or holding entity. Optional on customer onboarding: `GET /v2/onboarding/requirements` never lists these leaves, so send them only if they apply. It does not replace `ownership.persons[]`, which still needs the natural persons behind any corporate owner.","properties":{"hasRelatedCompany":{"type":"boolean","description":"Yes if the business is part of a corporate group: a subsidiary, a parent company, sibling entities under common ownership, or a holding-company structure. Independent companies that merely share investors do not count."},"companies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Related Company Record ID"},"companyName":{"type":"string","description":"Related Company Name"},"description":{"type":"string","description":"Related Company Description"},"role":{"type":"string","description":"How this related entity is connected to the business — parent, subsidiary, sister/affiliate, or a holding entity. Choose the closest match; this drives how the relationship is documented in the group structure chart.","enum":["Ultimate Parent Company","Subsidiary","Affiliate","Holding Company"]},"ownershipPercent":{"type":"string","description":"Related Company Ownership Percent","pattern":"^(100(\\.0+)?|\\d{1,2}(\\.\\d+)?)$"},"email":{"type":"string","description":"Related Company Email","format":"email"},"phone":{"type":"string","description":"Related Company Phone Number"},"formationDate":{"type":"string","description":"Related Company Formation Date","format":"date"}}}}},"additionalProperties":{}},"certification":{"type":"object","description":"Legal certifications the customer must affirm. A `mustEqual: true` marker in `GET /v2/onboarding/requirements` indicates an exact-value gate.","properties":{"authorityToBind":{"type":"boolean","description":"By checking this box and clicking Submit, I hereby swear, affirm, and attest that I have the requisite internal authority to bind the company submitting the information contained herein."},"consentToElectronicSignatures":{"type":"boolean","description":"I, and the company for which I am submitting the information contained herein, acknowledge and agree that by checking this box and clicking Submit we are electronically signing and such electronic signature is legally binding and enforceable in the same manner as a handwritten signature."},"termsAndConditions":{"description":"The customer's acceptance of Conduit's Terms and Conditions. The acceptance record is the current form. `true` is the earlier form. `GET /v2/onboarding/requirements` shows which form the active rules accept.","anyOf":[{"type":"boolean","enum":[true]},{"type":"object","properties":{"accepted":{"type":"boolean","description":"Read the terms at https://conduitpay.com/terms-of-service"},"acceptedAt":{"type":"string","description":"When the customer accepted, not when you submit this form","format":"date-time"},"acceptedByName":{"type":"string","description":"The person who accepted for the customer","maxLength":140},"acceptedByEmail":{"type":"string","description":"Email of the person who accepted","format":"email","maxLength":254},"ipAddress":{"type":"string","description":"The IP address your customer accepted from, as your platform recorded it. Not your own IP address."},"isAuthenticated":{"type":"boolean","description":"Your customer was signed in to your platform when they accepted"},"version":{"type":"string","description":"Terms version","maxLength":64}}}]},"treasuryOnlyCertification":{"type":"boolean","description":"Certify that this entity will use the Conduit account exclusively for its own treasury operations — not on behalf of clients, customers, or third parties. Required to enroll in the treasury-only product configuration."}},"additionalProperties":{}},"activity":{"type":"object","description":"Account holder's activity and due-diligence descriptors on an individual application: occupation, employer, account purpose, source of funds, expected volumes and countries of activity. Individual applications only. The account holder's activity and due-diligence descriptors.","properties":{"occupation":{"type":"string","description":"The account holder's current occupation or profession. Describe the role, not the employer.","maxLength":255},"occupationCategory":{"type":"string","description":"The category that best describes the account holder's occupation or main source of income.","enum":["EMPLOYED_PROFESSIONAL","EMPLOYED_TRADES","GOVERNMENT_PUBLIC_SECTOR","FINANCIAL_LEGAL_ACCOUNTING","RETIRED","STUDENT","UNEMPLOYED_HOMEMAKER","SELF_EMPLOYED","REAL_ESTATE","BUSINESS_OWNER_CASH_INTENSIVE","DIGITAL_ASSETS_TRADING","HIGH_RISK_INDUSTRY","OTHER"]},"employerName":{"type":"string","description":"The name of the account holder's current employer, if any.","maxLength":255},"accountPurpose":{"type":"array","description":"Select every account use case that applies, even those that are infrequent. This drives risk-tier categorisation and monitoring thresholds.","items":{"type":"string","enum":["Receive Salary","Savings","Family Support","Pay Bills","Investment","Business Payments"]}},"sourceOfFunds":{"type":"array","description":"Where the money flowing into the account comes from. Select all that apply. Use the 'Other' follow-up for a source not on the list.","items":{"type":"string","enum":["Salary","Business Income","Savings","Investment","Inheritance","Gift","Sale of Asset","Other"]}},"sourceOfFundsOther":{"type":"string","description":"Source of Funds (Other)"},"sourceOfWealth":{"type":"array","description":"Where the account holder's overall wealth comes from. Select all that apply. Use the 'Other' follow-up for a source not on the list.","items":{"type":"string","enum":["Salary","Business Income","Savings","Investment","Inheritance","Gift","Sale of Asset","Other"]}},"sourceOfWealthOther":{"type":"string","description":"Source of Wealth (Other)"},"expectedMonthlyVolume":{"type":"string","description":"Expected average USD value flowing through the account each month, across all in- and out-bound transactions combined.","enum":["VOLUME_LT_10K","VOLUME_10K_50K","VOLUME_50K_250K","VOLUME_250K_1M","VOLUME_GT_1M"]},"expectedTransactionsPerMonth":{"type":"string","description":"Expected number of transactions through the account each month, in- and out-bound combined.","enum":["<10","10-50","50-200","200-1,000","1,000+"]},"countriesOfActivity":{"type":"array","description":"Countries where the account holder receives payments, sends payments, or holds assets.","items":{"type":"string","enum":["AFG","ALB","DZA","ASM","AND","AGO","AIA","ATA","ATG","ARG","ARM","ABW","AUS","AUT","AZE","BHS","BHR","BGD","BRB","BLR","BEL","BLZ","BEN","BMU","BTN","BOL","BES","BIH","BWA","BVT","BRA","IOT","BRN","BGR","BFA","BDI","CPV","KHM","CMR","CAN","CYM","CAF","TCD","CHL","CHN","CXR","CCK","COL","COM","COG","COD","COK","CRI","CIV","HRV","CUB","CUW","CYP","CZE","DNK","DJI","DMA","DOM","ECU","EGY","SLV","GNQ","ERI","EST","SWZ","ETH","FLK","FRO","FJI","FIN","FRA","GUF","PYF","ATF","GAB","GMB","GEO","DEU","GHA","GIB","GRC","GRL","GRD","GLP","GUM","GTM","GGY","GIN","GNB","GUY","HTI","HMD","VAT","HND","HKG","HUN","ISL","IND","IDN","IRN","IRQ","IRL","IMN","ISR","ITA","JAM","JPN","JEY","JOR","KAZ","KEN","KIR","PRK","KOR","KWT","KGZ","LAO","LVA","LBN","LSO","LBR","LBY","LIE","LTU","LUX","MAC","MDG","MWI","MYS","MDV","MLI","MLT","MHL","MTQ","MRT","MUS","MYT","MEX","FSM","MDA","MCO","MNG","MNE","MSR","MAR","MOZ","MMR","NAM","NRU","NPL","NLD","NCL","NZL","NIC","NER","NGA","NIU","NFK","MKD","MNP","NOR","OMN","PAK","PLW","PSE","PAN","PNG","PRY","PER","PHL","PCN","POL","PRT","PRI","QAT","REU","ROU","RUS","RWA","BLM","SHN","KNA","LCA","MAF","SPM","VCT","WSM","SMR","STP","SAU","SEN","SRB","SYC","SLE","SGP","SXM","SVK","SVN","SLB","SOM","ZAF","SGS","SSD","ESP","LKA","SDN","SUR","SJM","SWE","CHE","SYR","TWN","TJK","TZA","THA","TLS","TGO","TKL","TON","TTO","TUN","TUR","TKM","TCA","TUV","UGA","UKR","ARE","GBR","USA","UMI","URY","UZB","VUT","VEN","VNM","VGB","VIR","WLF","ESH","YEM","ZMB","ZWE"]}}},"additionalProperties":{}},"customAnswers":{"description":"Answers to operator-defined questions, keyed by the key in the field's pointer. `GET /v2/onboarding/requirements` advertises each one as `/customAnswers/<key>` with the question as its label; send only the keys it lists.","type":"object","additionalProperties":{"anyOf":[{"type":"string","pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"},{"type":"number"},{"type":"boolean"},{"maxItems":100,"type":"array","items":{"type":"string","pattern":"^(?:[^\\p{Cc}\\p{Cf}\\p{Cs}\\p{Zl}\\p{Zp}]|[\\n\\r\\t])*$"}},{"type":"object","nullable":true,"enum":[null]}]}},"documentIds":{"description":"Customer-level document IDs from `POST /v2/documents` to attach to this onboarding. Per-person documents go on `ownership.persons[i].documentIds[]`.","example":["doc_2xKjF9mQb7vN4hL1pR3w8t"],"maxItems":100,"type":"array","items":{"type":"string","minLength":1}},"clientReferenceId":{"description":"Optional integrator-supplied identifier echoed back on the application record for cross-system correlation. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces.","example":"ext_customer_8421","type":"string","pattern":"^[A-Za-z0-9_\\-:.]{1,255}$"}},"additionalProperties":false},"PolicySubjectOptionsResponseDto":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["key","label"]}}},"required":["data"]},"ClientMarkupBalancesResponseDto":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code (USDC, USD, etc.)"},"chain":{"description":"Chain when the asset is on-chain; omitted for fiat.","type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc"]},"amount":{"type":"string","description":"Decimal string, asset-precision rounded"}},"required":["code","amount"],"additionalProperties":false},"description":"Accrued client markup per asset, currently unpaid. An asset the organization has never accrued in is absent rather than zero."}},"required":["data"]},"ClientMarkupStatementPageResponseDto":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"period":{"type":"string","description":"Calendar month the statement covers, UTC (YYYY-MM).","example":"2026-08"},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code identifier","example":"USD"},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"description":"Blockchain network. `null`/omitted for fiat assets.","nullable":true}},"required":["code"]},"total":{"type":"string","description":"Total the statement owes: accrued markup plus any amount carried in from a prior period."},"carriedIn":{"type":"string","description":"Amount carried in from a prior period that closed under the minimum payout."},"status":{"type":"string","enum":["open","due","paid","carried_forward"]},"paymentReference":{"description":"Payment reference set when the statement was paid.","type":"string"}},"required":["period","asset","total","carriedIn","status"]}},"meta":{"type":"object","properties":{"mode":{"type":"string","description":"Pagination mode","example":"cursor","enum":["cursor"]},"nextCursor":{"type":"string","description":"Cursor for the page after this one. Use it with `direction=forward`; it is `null` when no more rows follow. A backward page always carries one, so do not loop on it while `direction=backward`.","example":"eyJpZCI6ImN1c18yeFBxTjhSIn0","nullable":true},"previousCursor":{"type":"string","description":"Cursor for the page before this one. Use it with `direction=backward`. It is `null` on the first page of a forward walk and when no earlier rows remain.","example":null,"nullable":true},"total":{"type":"number","description":"Total number of records matching the query","example":42}},"required":["mode","nextCursor","previousCursor","total"]}},"required":["data","meta"]},"ClientMarkupStatementLinePageResponseDto":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"sourceKind":{"type":"string","enum":["order","payout"],"description":"What earned this line: a conversion, or a fiat payout."},"orderId":{"type":"string","description":"Set on a conversion line, null on a payout line.","pattern":"^ord_[0-9A-Za-z]{22}$","nullable":true},"transactionId":{"type":"string","description":"Set on a payout line. Also set on a conversion line that an external provider settled, where it names the deposit of the provider's payout that earned the margin. Null on other conversion lines.","pattern":"^txn_[0-9A-Za-z]{22}$","nullable":true},"clientReferenceId":{"type":"string","description":"Your own reference on the movement, when you sent one.","nullable":true},"period":{"type":"string","description":"Calendar month of the statement this line belongs to, UTC (YYYY-MM). Not always the month the movement executed in — see `late`.","example":"2026-08"},"asset":{"type":"object","properties":{"code":{"type":"string","enum":["USD","EUR","GBP","CHF","JPY","CAD","AUD","NZD","SGD","HKD","CNY","KRW","INR","BRL","MXN","ARS","CLP","COP","PEN","ZAR","NGN","KES","GHS","EGP","AED","SAR","ILS","TRY","PLN","CZK","HUF","SEK","NOK","DKK","THB","IDR","MYR","PHP","VND","TWD","USDC","USDT","DAI","EURC","PYUSD","OUSD","BTC","ETH","SOL","TRX","XLM","POL"],"description":"Asset code identifier","example":"USD"},"chain":{"type":"string","enum":["ethereum","base","solana","polygon","tron","stellar","tempo","arbitrum","optimism","arc",null],"description":"Blockchain network. `null`/omitted for fiat assets.","nullable":true}},"required":["code"]},"amount":{"type":"string","description":"The margin this movement accrued to you. Negative on a reversal: a receiving bank returned the payout, so Conduit no longer holds your customer's money and no longer owes you the margin."},"markupBps":{"type":"string","description":"The percentage you declared on the movement, in basis points. Null when you declared only a flat amount.","nullable":true},"markupFlatAmount":{"type":"string","description":"The flat amount you declared on the movement, in this line's asset. Null when you declared only a percentage, and on a conversion that an external provider settled.","nullable":true},"sourceAmount":{"type":"string","description":"The movement's source amount, in this line's asset. On a conversion that an external provider settled, the provider's payout before the margin."},"customerId":{"type":"string","description":"Customer the movement was for. Null when the movement carries no customer.","pattern":"^cus_[0-9A-Za-z]{22}$","nullable":true},"succeededAt":{"type":"string","format":"date-time","description":"When the movement succeeded: a conversion's execution, or a payout's completion.","example":"2026-01-15T09:30:00.000Z","nullable":true},"late":{"type":"boolean","description":"`succeededAt` falls outside the `period` this line sits in, so the movement is reported on a later statement than its own month."}},"required":["sourceKind","orderId","transactionId","clientReferenceId","period","asset","amount","markupBps","markupFlatAmount","sourceAmount","customerId","succeededAt","late"]}},"meta":{"type":"object","properties":{"mode":{"type":"string","description":"Pagination mode","example":"cursor","enum":["cursor"]},"nextCursor":{"type":"string","description":"Cursor for the page after this one. Use it with `direction=forward`; it is `null` when no more rows follow. A backward page always carries one, so do not loop on it while `direction=backward`.","example":"eyJpZCI6ImN1c18yeFBxTjhSIn0","nullable":true},"previousCursor":{"type":"string","description":"Cursor for the page before this one. Use it with `direction=backward`. It is `null` on the first page of a forward walk and when no earlier rows remain.","example":null,"nullable":true},"total":{"type":"number","description":"Total number of records matching the query","example":42}},"required":["mode","nextCursor","previousCursor","total"]}},"required":["data","meta"]}}},"security":[{"api-key":[]}]}