Creates several cross-ramp transactions from one cross-ramp quote, for a single verified user paying several beneficiaries. The quote’s exchange is executed once, for the total, and each transaction is then funded and paid out on its own.
Bulk cross-ramp is enabled on request. Ask your Capa contact to enable it for your sandbox and production environments; until then this endpoint returns 404.
Retry safely without creating a duplicate bulk: pass an optional Idempotency-Key header (UUIDv4). A retry with the same key and body replays the original response. See the Idempotency Guide for the full contract.
One quote for the total. Create it with Create Cross-Ramp Quote for the sum of all the transactions, with bulkTransactionCount set to the number of transactions. Exactly one side of the quote must be USD: for example MXN→USD (including USD delivered to CN/HK) or USD→MXN. A quote where neither side is USD is rejected.
The quote fixes the currencies and the source route, as on the single endpoint with a quoteId. The body has no sourceCurrency, targetCurrency, premiumSpread or forwardingDays.
Size every transaction on the quote’s non-USD side, using the same field the quote was created with:
quote targets USD (e.g. MXN→USD): create the quote with sourceAmount, and give every transaction a sourceAmount;
quote starts from USD (e.g. USD→MXN): create the quote with targetAmount, and give every transaction a targetAmount.
The amounts must add up exactly to the quote’s amount on that side.
2 to 50 transactions per bulk. Every transaction gives either targetBankAccount or targetBankAccountId.
Beneficiaries may differ. One bulk can pay, for example, US and CN beneficiaries under the same MXN→USD quote. targetCountry, targetRail, invoiceFile and reference work per transaction exactly as on Create Cross-Ramp.
invoiceFile is required for CN and HK beneficiaries. The whole request, every invoice included, must stay under 25 MB.
Each transaction pays the fixed fee of its own USD leg, for its own route (for example a CN SWIFT payout and a US payout differ). The quote already nets one such fee per transaction, priced for the quote’s route, because you set bulkTransactionCount. When every transaction uses that route, their payouts add up exactly to the quote’s targetAmount:
Quote targets USD: the fee comes out of that transaction’s USD payout.
Quote starts from USD: the fee is added to that transaction’s USD deposit.
The fee of the non-USD leg, which runs once for the total, is shared across the transactions in proportion to their amounts. Each transaction in the response shows its own sourceAmount, targetAmount and fees.
Every transaction in the response has its own sourceBankAccount, and is funded with its own deposit for its own sourceAmount.For MXN deposits by SPEI, put the transaction’s sourceBankAccount.message (its id) in the concepto, so each deposit is matched to the right transaction.Nothing is executed with the liquidity provider until every transaction in the bulk is funded. A transaction that is never funded holds the whole bulk; contact Capa support to resolve it.
User must be KYC-verified before creating transactions.
Each transaction is a normal cross-ramp. It has its own id, statuses, webhooks and proof of payment, and it appears in transaction listings like any other cross-ramp. Group them with the bulkId and quoteId returned here.
Amount limits apply to each transaction, including the 10–10,000 USD range for USD delivered to CN/HK.
The quote is consumed by the bulk. It cannot be reused for another bulk or a single cross-ramp.
”Invalid User Input” — the failing rule is in errors[].message, e.g. “Every transaction must set the same one of sourceAmount or targetAmount”, “invoiceFile is required when target bank account country is CN or HK”, or 2–50 transactions, one bank account per transaction, a base64 invoiceFile
400
BAD_REQUEST
”Bulk cross-ramp requires USD on the source or the target side of the quote”
400
BAD_REQUEST
”The quote was priced on {sourceAmount|targetAmount}; size every transaction on the same side”
400
BAD_REQUEST
”Size the quote and every transaction on {sourceAmount|targetAmount}; each transaction’s USD amount absorbs its own fee”
400
BAD_REQUEST
”This quote cannot be used for a bulk; request a new quote”
400
BAD_REQUEST
”This quote was priced for {n} transactions; request a quote with bulkTransactionCount set to {m}“
400
BAD_REQUEST
”Request the quote with bulkTransactionCount set to {m}, the number of transactions”
400
BAD_REQUEST
”The transactions’ {sourceAmount|targetAmount} must add up to the quote’s (expected: {expected}, actual: {actual})“
400
BAD_REQUEST
”Transaction at index {index} is too small to carry a share of the quote”
400
BAD_REQUEST
”Transaction at index {index} has an amount too large to process”
400
BAD_REQUEST
”A transaction’s USD amount does not cover its own payment fee; use a larger amount”
400
BAD_REQUEST
”Provided quoteId is not a CROSS_RAMP quote”
400
BAD_REQUEST
”Cross-ramp requires an OTC quote; request a new quote”
400
QUOTE_EXPIRED
”Quote has expired”
403
FORBIDDEN
”The quote belongs to a different partner.”
A transaction can also fail with any error of Create Cross-Ramp, such as an invalid or foreign bank account. In that case nothing is created and the quote is consumed, so request a new quote before retrying.
Optional. Unique key (UUIDv4 recommended) to safely retry this request without creating a duplicate transaction. A retry with the same key and body replays the original response. See /docs/idempotency.
A cross-ramp quote for the total of all the transactions. Its currencies and source route apply to every transaction. Exactly one side of the quote must be USD.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Capa.fi","colors":{"primary":"#191f14","light":"#fff","dark":"#191f14"},"logo":{"light":"https://mintcdn.com/capa/sdievWamxx2n0U65/logo/logo.svg?fit=max\u0026auto=format\u0026n=sdievWamxx2n0U65\u0026q=85\u0026s=cd1c9b9fcff02ef9bd460d71d7823292","dark":"https://mintcdn.com/capa/sdievWamxx2n0U65/logo/logo.svg?fit=max\u0026auto=format\u0026n=sdievWamxx2n0U65\u0026q=85\u0026s=cd1c9b9fcff02ef9bd460d71d7823292"},"favicon":"https://mintcdn.com/capa/sdievWamxx2n0U65/favicon.svg?fit=max\u0026auto=format\u0026n=sdievWamxx2n0U65\u0026q=85\u0026s=154093ec8e5f8f060d360b5932060b3b","navbar":{"links":[{"href":"https://status.capa.fi","label":"Status"}]},"fonts":{"heading":{"family":"Space Grotesk"},"body":{"family":"Space Grotesk"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"capa","hasAudioNarration":false,"actualSubdomain":"capa","customDomains":["docs.capa.fi"],"gitSource":{"type":"github","owner":"capalabs","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aea7db376177d656da2ee74","collectionId":"64347507-4b98-45ff-969d-a8a41d319a31","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aea7db376177d656da2ee74"},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6aea7db376177d656da2ee74","clientVersion":"0.0.4054","searchFilterCounts":[{"language":"default","tag":"API Reference","count":35},{"language":"default","tag":"Capa Partner API - V2","count":35},{"language":"default","tag":"Guides","count":20},{"language":"default","tag":"Documentation","count":20},{"language":"default","tag":"📣 Webhooks","count":5},{"language":"default","tag":"Users","count":5},{"language":"default","tag":"Cross-Ramp","count":4},{"language":"default","tag":"Wallets","count":4},{"language":"default","tag":"Webhooks · Notifications","count":3},{"language":"default","tag":"Transactions","count":3}]},"assistantConfig":{"deflection":{"enabled":true,"email":"developers@capa.fi","showHelpButton":true}},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":".table td,.table th{text-align:left}ol ol{list-style-type:lower-alpha}ol ol ol{list-style-type:lower-roman}"}],"page":{"pagePath":"reference/crossramppartnerv2controller_createpartnercrossrampbulk","slug":"/reference/crossramppartnerv2controller_createpartnercrossrampbulk","pageMetadata":{"title":"Create Bulk Cross-Ramp","description":"Create several cross-ramps for one user from a single quote, each funded and paid out on its own.","keywords":["bulk cross-ramp","batch payouts","multiple beneficiaries","cross-ramp quote"],"openapi":"reference/openapi/CrossRampPartnerV2Controller_createPartnerCrossRampBulk.json POST /api/partner/v2/cross-ramp/bulk","href":"/reference/crossramppartnerv2controller_createpartnercrossrampbulk"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Create several cross-ramps for one user from a single quote, each funded and paid out on its own.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,hr:`hr`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Note,Step,Steps,Table}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Creates several cross-ramp transactions from `,_jsx(_components.strong,{children:`one`}),` cross-ramp quote, for a single `,_jsx(_components.strong,{children:`verified`}),` user paying several beneficiaries. The quote’s exchange is executed once, for the total, and each transaction is then funded and paid out on its own.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Bulk cross-ramp is `,_jsx(_components.strong,{children:`enabled on request`}),`. Ask your Capa contact to enable it for your sandbox and production environments; until then this endpoint returns `,_jsx(_components.code,{children:`404`}),`.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`idempotency`,children:`Idempotency`}),`\n`,_jsxs(_components.p,{children:[`Retry safely without creating a duplicate bulk: pass an optional `,_jsx(_components.strong,{children:_jsx(_components.code,{children:`Idempotency-Key`})}),` header (UUIDv4). A retry with the same key and body replays the original response. See the `,_jsx(_components.a,{href:`/docs/idempotency`,children:`Idempotency Guide`}),` for the full contract.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`13`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`13`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --request`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --url`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://api.sandbox.capa.fi/api/partner/v2/cross-ramp/bulk`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --header`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'Content-Type: application/json'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --header`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'partner-api-key: \u003cpartner-api-key>'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --header`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --data`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"userId\": \"12a121ad-cbea-4ec4-9e0a-5c861e528bba\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"quoteId\": \"12a121ad-cbea-4ec4-9e0a-5c861e528bbb\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"transactions\": [`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` { \"sourceAmount\": 4000, \"targetBankAccountId\": \"8d1f0c3e-2b7a-4e55-9c1d-6a4f2e9b7c10\" },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` { \"sourceAmount\": 6000, \"targetBankAccountId\": \"c2a9e4b1-5f3d-4a8e-8b6c-1d7e0f9a2b34\", \"reference\": \"INV-2026-114\" }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`field-relationships`,children:`Field Relationships`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`One quote for the total.`}),` Create it with `,_jsx(_components.a,{href:`/reference/crossramppartnerv2controller_createpartnercrossrampquote`,children:`Create Cross-Ramp Quote`}),` for the sum of all the transactions, with `,_jsx(_components.code,{children:`bulkTransactionCount`}),` set to the number of transactions. Exactly one side of the quote must be `,_jsx(_components.strong,{children:`USD`}),`: for example MXN→USD (including USD delivered to CN/HK) or USD→MXN. A quote where neither side is USD is rejected.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`The quote fixes the currencies and the source route`}),`, as on the single endpoint with a `,_jsx(_components.code,{children:`quoteId`}),`. The body has no `,_jsx(_components.code,{children:`sourceCurrency`}),`, `,_jsx(_components.code,{children:`targetCurrency`}),`, `,_jsx(_components.code,{children:`premiumSpread`}),` or `,_jsx(_components.code,{children:`forwardingDays`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Size every transaction on the quote’s non-USD side`}),`, using the same field the quote was created with:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`quote `,_jsx(_components.strong,{children:`targets USD`}),` (e.g. MXN→USD): create the quote with `,_jsx(_components.code,{children:`sourceAmount`}),`, and give every transaction a `,_jsx(_components.code,{children:`sourceAmount`}),`;`]}),`\n`,_jsxs(_components.li,{children:[`quote `,_jsx(_components.strong,{children:`starts from USD`}),` (e.g. USD→MXN): create the quote with `,_jsx(_components.code,{children:`targetAmount`}),`, and give every transaction a `,_jsx(_components.code,{children:`targetAmount`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`The amounts must add up `,_jsx(_components.strong,{children:`exactly`}),` to the quote’s amount on that side.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`2 to 50 transactions`}),` per bulk. Every transaction gives either `,_jsx(_components.code,{children:`targetBankAccount`}),` or `,_jsx(_components.code,{children:`targetBankAccountId`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Beneficiaries may differ.`}),` One bulk can pay, for example, US and CN beneficiaries under the same MXN→USD quote. `,_jsx(_components.code,{children:`targetCountry`}),`, `,_jsx(_components.code,{children:`targetRail`}),`, `,_jsx(_components.code,{children:`invoiceFile`}),` and `,_jsx(_components.code,{children:`reference`}),` work per transaction exactly as on `,_jsx(_components.a,{href:`/reference/crossramppartnerv2controller_createpartnercrossramp#china--hong-kong-destinations`,children:`Create Cross-Ramp`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[_jsx(_components.code,{children:`invoiceFile`}),` is required for CN and HK`]}),` beneficiaries. The whole request, every invoice included, must stay under `,_jsx(_components.strong,{children:`25 MB`}),`.`]}),`\n`]}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`fees`,children:`Fees`}),`\n`,_jsxs(_components.p,{children:[`Each transaction pays the fixed fee of `,_jsx(_components.strong,{children:`its own`}),` USD leg, for its own route (for example a CN SWIFT payout and a US payout differ). The quote already nets one such fee per transaction, priced for the quote’s route, because you set `,_jsx(_components.code,{children:`bulkTransactionCount`}),`. When every transaction uses that route, their payouts add up exactly to the quote’s `,_jsx(_components.code,{children:`targetAmount`}),`:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Quote targets USD:`}),` the fee comes out of that transaction’s USD payout.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Quote starts from USD:`}),` the fee is added to that transaction’s USD deposit.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`The fee of the non-USD leg, which runs once for the total, is shared across the transactions in proportion to their amounts. Each transaction in the response shows its own `,_jsx(_components.code,{children:`sourceAmount`}),`, `,_jsx(_components.code,{children:`targetAmount`}),` and `,_jsx(_components.code,{children:`fees`}),`.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`funding`,children:`Funding`}),`\n`,_jsxs(_components.p,{children:[`Every transaction in the response has its own `,_jsx(_components.code,{children:`sourceBankAccount`}),`, and is funded with `,_jsx(_components.strong,{children:`its own deposit`}),` for its own `,_jsx(_components.code,{children:`sourceAmount`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`For MXN deposits by SPEI, put the transaction’s `,_jsx(_components.code,{children:`sourceBankAccount.message`}),` (its id) in the `,_jsx(_components.strong,{children:`concepto`}),`, so each deposit is matched to the right transaction.`]}),`\n`,_jsxs(_components.p,{children:[`Nothing is executed with the liquidity provider until `,_jsx(_components.strong,{children:`every`}),` transaction in the bulk is funded. A transaction that is never funded holds the whole bulk; contact Capa support to resolve it.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`integration-flow`,children:`Integration Flow`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Create a user and complete KYC`,children:_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/reference/userpartnercontrollerv2_createuser`,children:`POST /api/partner/v2/users`}),`, then `,_jsx(_components.a,{href:`/reference/userpartnercontrollerv2_createverificationlink`,children:`KYC verification`})]})}),_jsx(Step,{title:`Get one cross-ramp quote for the total`,children:_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/reference/crossramppartnerv2controller_createpartnercrossrampquote`,children:`POST /api/partner/v2/cross-ramp/quotes`}),`, priced on the non-USD side, with `,_jsx(_components.code,{children:`bulkTransactionCount`}),` set to the number of transactions`]})}),_jsx(Step,{title:`Create the bulk`,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`POST /api/partner/v2/cross-ramp/bulk`}),` (this endpoint), before the quote expires`]})}),_jsx(Step,{title:`Fund each transaction`,children:_jsxs(_components.p,{children:[`One deposit per transaction to its `,_jsx(_components.code,{children:`sourceBankAccount`}),`. For SPEI, use its `,_jsx(_components.code,{children:`message`}),` as the concepto.`]})}),_jsx(Step,{title:`Track each transaction`,children:_jsxs(_components.p,{children:[`Each transaction moves through the normal `,_jsx(_components.a,{href:`/docs/cross-ramp#transaction-status-progression`,children:`cross-ramp statuses`}),` and sends its own `,_jsx(_components.a,{href:`/docs/transaction-events#cross-ramp-events`,children:`webhooks`}),`.`]})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`important-notes`,children:`Important Notes`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`User must be KYC-verified`}),` before creating transactions.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Each transaction is a normal cross-ramp.`}),` It has its own id, statuses, webhooks and proof of payment, and it appears in transaction listings like any other cross-ramp. Group them with the `,_jsx(_components.code,{children:`bulkId`}),` and `,_jsx(_components.code,{children:`quoteId`}),` returned here.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Amount limits`}),` apply to each transaction, including the 10–10,000 USD range for USD delivered to CN/HK.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The quote is consumed by the bulk.`}),` It cannot be reused for another bulk or a single cross-ramp.`]}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`error-codes`,children:`Error Codes`}),`\n`,_jsx(Heading,{level:`3`,id:`common-errors`,children:`Common Errors`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`HTTP Status`}),_jsx(_components.th,{children:`Code`}),_jsx(_components.th,{children:`Message`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`401`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`UNAUTHORIZED`})}),_jsx(_components.td,{children:`”API Key is missing”`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`401`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`UNAUTHORIZED`})}),_jsx(_components.td,{children:`”Invalid API Key format”`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`401`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`UNAUTHORIZED`})}),_jsx(_components.td,{children:`”Invalid API Key”`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`403`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`INVALID_PARTNER_FLOW`})}),_jsx(_components.td,{children:`”The partner has an invalid flow.”`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`404`}),_jsx(_components.td,{children:`—`}),_jsx(_components.td,{children:`“Not Found” — bulk cross-ramp is not enabled for this environment yet`})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`verified-user-errors`,children:`Verified User Errors`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`HTTP Status`}),_jsx(_components.th,{children:`Code`}),_jsx(_components.th,{children:`Message`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`REQUIRED_USER_ID_ERROR`})}),_jsx(_components.td,{children:`”This endpoint requires a user id to be provided”`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`403`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`USER_NOT_VERIFIED_ERROR`})}),_jsx(_components.td,{children:`”User is not allowed to perform the operations because has not completed the KYC verification.”`})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`endpoint-specific-errors`,children:`Endpoint-Specific Errors`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`HTTP Status`}),_jsx(_components.th,{children:`Code`}),_jsx(_components.th,{children:`Message`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`INVALID_USER_INPUT_ERROR`})}),_jsxs(_components.td,{children:[`”Invalid User Input” — the failing rule is in `,_jsx(_components.code,{children:`errors[].message`}),`, e.g. “Every transaction must set the same one of sourceAmount or targetAmount”, “invoiceFile is required when target bank account country is CN or HK”, or 2–50 transactions, one bank account per transaction, a base64 `,_jsx(_components.code,{children:`invoiceFile`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`BAD_REQUEST`})}),_jsx(_components.td,{children:`”Bulk cross-ramp requires USD on the source or the target side of the quote”`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`BAD_REQUEST`})}),_jsx(_components.td,{children:`”The quote was priced on {sourceAmount|targetAmount}; size every transaction on the same side”`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`BAD_REQUEST`})}),_jsx(_components.td,{children:`”Size the quote and every transaction on {sourceAmount|targetAmount}; each transaction’s USD amount absorbs its own fee”`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`BAD_REQUEST`})}),_jsx(_components.td,{children:`”This quote cannot be used for a bulk; request a new quote”`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`BAD_REQUEST`})}),_jsx(_components.td,{children:`”This quote was priced for {n} transactions; request a quote with bulkTransactionCount set to {m}“`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`BAD_REQUEST`})}),_jsx(_components.td,{children:`”Request the quote with bulkTransactionCount set to {m}, the number of transactions”`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`BAD_REQUEST`})}),_jsx(_components.td,{children:`”The transactions’ {sourceAmount|targetAmount} must add up to the quote’s (expected: {expected}, actual: {actual})“`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`BAD_REQUEST`})}),_jsx(_components.td,{children:`”Transaction at index {index} is too small to carry a share of the quote”`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`BAD_REQUEST`})}),_jsx(_components.td,{children:`”Transaction at index {index} has an amount too large to process”`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`BAD_REQUEST`})}),_jsx(_components.td,{children:`”A transaction’s USD amount does not cover its own payment fee; use a larger amount”`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`BAD_REQUEST`})}),_jsx(_components.td,{children:`”Provided quoteId is not a CROSS_RAMP quote”`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`BAD_REQUEST`})}),_jsx(_components.td,{children:`”Cross-ramp requires an OTC quote; request a new quote”`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`QUOTE_EXPIRED`})}),_jsx(_components.td,{children:`”Quote has expired”`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`403`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`FORBIDDEN`})}),_jsx(_components.td,{children:`”The quote belongs to a different partner.”`})]})]})]}),`\n`,_jsxs(_components.p,{children:[`A transaction can also fail with any error of `,_jsx(_components.a,{href:`/reference/crossramppartnerv2controller_createpartnercrossramp#error-codes`,children:`Create Cross-Ramp`}),`, such as an invalid or foreign bank account. In that case nothing is created and the quote is consumed, so request a new quote before retrying.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Create Bulk Cross-Ramp","description":"Create several cross-ramps for one user from a single quote, each funded and paid out on its own.","keywords":["bulk cross-ramp","batch payouts","multiple beneficiaries","cross-ramp quote"],"openapi":"reference/openapi/CrossRampPartnerV2Controller_createPartnerCrossRampBulk.json POST /api/partner/v2/cross-ramp/bulk","href":"/reference/crossramppartnerv2controller_createpartnercrossrampbulk"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Idempotency","slug":"idempotency","depth":2,"children":[]},{"title":"Field Relationships","slug":"field-relationships","depth":2,"children":[]},{"title":"Fees","slug":"fees","depth":2,"children":[]},{"title":"Funding","slug":"funding","depth":2,"children":[]},{"title":"Integration Flow","slug":"integration-flow","depth":2,"children":[]},{"title":"Important Notes","slug":"important-notes","depth":2,"children":[]},{"title":"Error Codes","slug":"error-codes","depth":2,"children":[{"title":"Common Errors","slug":"common-errors","depth":3,"children":[]},{"title":"Verified User Errors","slug":"verified-user-errors","depth":3,"children":[]},{"title":"Endpoint-Specific Errors","slug":"endpoint-specific-errors","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"CrossRampPartnerV2Controller_createPartnerCrossRampBulk","parameters":["138abfd4-e4d6-485d-87d3-ab063c2603cf"],"requestBody":"b57b6ce8-e262-416d-9492-697d057515c5","responses":{"201":"99ed8ed8-3d04-4876-a8c4-7e0ee6e75998","400":"7aa5df38-a51f-44b1-bfc8-306a46e9df08","401":"5f94263c-78db-4980-8f43-7f267b3a508f","403":"fe0820bb-ac9e-4244-b04a-686df061fcee","404":"0c55680b-56c1-4adb-83a3-cc355f88637e","409":"6d06df33-0c89-4bd4-8b0e-0eb8621748f7","422":"95f625ce-f065-451e-a763-8883a937b2d3","500":"9aca4cd7-f967-48d2-8884-e11e464c0252"},"tags":["cross-ramp"],"security":["6875f2ec-eb9a-4e5a-9712-10450ddedb7d"],"method":"post","type":"path","servers":["5686a20f-d362-468b-8ea3-da78d912bdf5","0f7022e6-7441-4afa-92a9-3a98284174f7"],"path":"/api/partner/v2/cross-ramp/bulk","baseUrlOptions":["https://api.sandbox.capa.fi","https://api.capa.fi"],"title":"","description":"Create several cross-ramps for one user from a single quote, each funded and paid out on its own.","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"138abfd4-e4d6-485d-87d3-ab063c2603cf":{"name":"Idempotency-Key","in":"header","description":"Optional. Unique key (UUIDv4 recommended) to safely retry this request without creating a duplicate transaction. A retry with the same key and body replays the original response. See /docs/idempotency.","required":false,"schema":{"type":"string","minLength":16,"maxLength":128,"example":"550e8400-e29b-41d4-a716-446655440000","isRequired":false,"description":"Optional. Unique key (UUIDv4 recommended) to safely retry this request without creating a duplicate transaction. A retry with the same key and body replays the original response. See /docs/idempotency.","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["userId","quoteId","transactions"],"properties":{"userId":{"type":"string","description":"User's identifier","example":"12a121ad-cbea-4ec4-9e0a-5c861e528bba","isRequired":true,"uniqueKey":"userId","typeLabel":"string"},"quoteId":{"type":"string","description":"A cross-ramp quote for the total of all the transactions. Its currencies and source route apply to every transaction. Exactly one side of the quote must be USD.","example":"12a121ad-cbea-4ec4-9e0a-5c861e528bbb","isRequired":true,"uniqueKey":"quoteId","typeLabel":"string"},"transactions":{"type":"array","minItems":2,"maxItems":50,"description":"One entry per beneficiary. Each becomes its own cross-ramp, funded and paid out separately.","items":{"type":"object","properties":{"sourceAmount":{"type":"number","description":"This transaction's amount in the source currency. Use it when the quote targets USD (e.g. MXN→USD). Every transaction must use the same field, and the amounts must add up exactly to the quote's sourceAmount.","example":4000,"uniqueKey":"transactions.items.[INDEX].sourceAmount","typeLabel":"number"},"targetAmount":{"type":"number","description":"This transaction's amount in the target currency. Use it when the quote starts from USD (e.g. USD→MXN). Every transaction must use the same field, and the amounts must add up exactly to the quote's targetAmount.","example":200,"uniqueKey":"transactions.items.[INDEX].targetAmount","typeLabel":"number"},"targetBankAccount":{"type":"object","description":"Beneficiary bank account, same shape as the single Create Cross-Ramp endpoint. Provide this or targetBankAccountId.","properties":{"accountIdentifier":{"type":"string","description":"Always required. MX: CLABE. DO/US: account number. EU/SEPA: IBAN. For US (ACH), also provide routingNumber.","uniqueKey":"transactions.items.[INDEX].targetBankAccount.accountIdentifier","typeLabel":"string"},"routingNumber":{"type":"string","description":"Required only for US","uniqueKey":"transactions.items.[INDEX].targetBankAccount.routingNumber","typeLabel":"string"},"bic":{"type":"string","description":"Required only for SEPA countries","uniqueKey":"transactions.items.[INDEX].targetBankAccount.bic","typeLabel":"string"},"country":{"type":"string","enum":["MX","DO","US","AT","BE","BG","HR","CY","CZ","DK","EE","FI","FR","DE","GR","HU","IE","IT","LV","LT","LU","MT","NL","PL","PT","RO","SK","SI","ES","SE","IS","LI","NO","CH","GB","MC","SM","AD","VA","CN","HK"],"description":"Required. Determines validation rules. CN (China) and HK (Hong Kong) are cross-ramp destinations only (USD delivery).","uniqueKey":"transactions.items.[INDEX].targetBankAccount.country","typeLabel":"enum\u003cstring>"},"accountType":{"type":"string","enum":["SAVINGS","CHECKING"],"description":"Required only for DO and US","uniqueKey":"transactions.items.[INDEX].targetBankAccount.accountType","typeLabel":"enum\u003cstring>"},"bankName":{"type":"string","description":"Required only for DO and US","uniqueKey":"transactions.items.[INDEX].targetBankAccount.bankName","typeLabel":"string"},"documentIdentifier":{"type":"string","description":"Required only for DO and US","uniqueKey":"transactions.items.[INDEX].targetBankAccount.documentIdentifier","typeLabel":"string"},"documentType":{"type":"string","enum":["PASSPORT","CEDULA","RNC"],"description":"Required for DO","uniqueKey":"transactions.items.[INDEX].targetBankAccount.documentType","typeLabel":"enum\u003cstring>"},"accountHolder":{"type":"object","description":"Required for SEPA countries and US","properties":{"type":{"type":"string","enum":["INDIVIDUAL","BUSINESS"],"uniqueKey":"transactions.items.[INDEX].targetBankAccount.accountHolder.type","typeLabel":"enum\u003cstring>"},"businessName":{"type":"string","description":"Required when type=BUSINESS","uniqueKey":"transactions.items.[INDEX].targetBankAccount.accountHolder.businessName","typeLabel":"string"},"firstName":{"type":"string","description":"Required when type=INDIVIDUAL","uniqueKey":"transactions.items.[INDEX].targetBankAccount.accountHolder.firstName","typeLabel":"string"},"lastName":{"type":"string","description":"Required when type=INDIVIDUAL","uniqueKey":"transactions.items.[INDEX].targetBankAccount.accountHolder.lastName","typeLabel":"string"}},"uniqueKey":"transactions.items.[INDEX].targetBankAccount.accountHolder","typeLabel":"object"},"address":{"type":"object","description":"Required only for US","properties":{"streetLine1":{"type":"string","description":"Required","uniqueKey":"transactions.items.[INDEX].targetBankAccount.address.streetLine1","typeLabel":"string"},"streetLine2":{"type":"string","description":"Optional","uniqueKey":"transactions.items.[INDEX].targetBankAccount.address.streetLine2","typeLabel":"string"},"city":{"type":"string","description":"Required","uniqueKey":"transactions.items.[INDEX].targetBankAccount.address.city","typeLabel":"string"},"state":{"type":"string","description":"Optional","uniqueKey":"transactions.items.[INDEX].targetBankAccount.address.state","typeLabel":"string"},"postalCode":{"type":"string","description":"Required","uniqueKey":"transactions.items.[INDEX].targetBankAccount.address.postalCode","typeLabel":"string"},"country":{"type":"string","description":"Required. Must be US","enum":["US"],"uniqueKey":"transactions.items.[INDEX].targetBankAccount.address.country","typeLabel":"enum\u003cstring>"}},"uniqueKey":"transactions.items.[INDEX].targetBankAccount.address","typeLabel":"object"}},"uniqueKey":"transactions.items.[INDEX].targetBankAccount","typeLabel":"object"},"targetBankAccountId":{"type":"string","description":"ID of an existing bank account to pay out to. Provide this or targetBankAccount.","uniqueKey":"transactions.items.[INDEX].targetBankAccountId","typeLabel":"string"},"receiverId":{"type":"string","description":"Optional identifier of an existing receiver to associate with this transaction.","uniqueKey":"transactions.items.[INDEX].receiverId","typeLabel":"string"},"invoiceFile":{"type":"string","description":"Base64-encoded PDF invoice. Required when the target bank account country is CN or HK. The whole request, every invoice included, must stay under 25 MB.","uniqueKey":"transactions.items.[INDEX].invoiceFile","typeLabel":"string"},"reference":{"type":"string","maxLength":140,"description":"Free-text remittance reference / memo (max 140 chars) forwarded to the payment provider. Supported across all currencies.","uniqueKey":"transactions.items.[INDEX].reference","typeLabel":"string"},"targetCountry":{"type":"string","enum":["MX","DO","US","AT","BE","BG","HR","CY","CZ","DK","EE","FI","FR","DE","GR","HU","IE","IT","LV","LT","LU","MT","NL","PL","PT","RO","SK","SI","ES","SE","IS","LI","NO","CH","GB","MC","SM","AD","VA","CN","HK"],"description":"Target country. Required to route USD to China (CN) or Hong Kong (HK), since USD otherwise defaults to the US. Resolved from the target bank account country when omitted.","uniqueKey":"transactions.items.[INDEX].targetCountry","typeLabel":"enum\u003cstring>"},"targetRail":{"type":"string","enum":["LOCAL","SWIFT"],"description":"Target payment rail for CN/HK destinations. Defaults to LOCAL; use SWIFT for an international wire.","uniqueKey":"transactions.items.[INDEX].targetRail","typeLabel":"enum\u003cstring>"}},"uniqueKey":"transactions.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"transactions","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"userId":"12a121ad-cbea-4ec4-9e0a-5c861e528bba","quoteId":"12a121ad-cbea-4ec4-9e0a-5c861e528bbb","transactions":[{"sourceAmount":4000,"targetAmount":200,"targetBankAccount":{"accountIdentifier":"\u003cstring>","routingNumber":"\u003cstring>","bic":"\u003cstring>","bankName":"\u003cstring>","documentIdentifier":"\u003cstring>","accountHolder":{"businessName":"\u003cstring>","firstName":"\u003cstring>","lastName":"\u003cstring>"},"address":{"streetLine1":"\u003cstring>","streetLine2":"\u003cstring>","city":"\u003cstring>","state":"\u003cstring>","postalCode":"\u003cstring>","country":"US"}},"targetBankAccountId":"\u003cstring>","receiverId":"\u003cstring>","invoiceFile":"\u003cstring>","reference":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"99ed8ed8-3d04-4876-a8c4-7e0ee6e75998":{"description":"Bulk created. Returns one cross-ramp per requested transaction, in request order, each funded through its own sourceBankAccount.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":true,"uniqueKey":"success","typeLabel":"boolean"},"data":{"type":"object","properties":{"bulkId":{"type":"string","description":"Bulk identifier, shared by every transaction it created","example":"3f6c1e0a-6d0b-4d4e-9a52-1b2f7d6e8c11","uniqueKey":"data.bulkId","typeLabel":"string"},"quoteId":{"type":"string","description":"The quote every transaction in the bulk was priced with","example":"12a121ad-cbea-4ec4-9e0a-5c861e528bbb","uniqueKey":"data.quoteId","typeLabel":"string"},"transactions":{"type":"array","description":"One cross-ramp per requested transaction, in request order. Same shape as the Create Cross-Ramp response.","items":{"type":"object","properties":{"id":{"type":"string","description":"Transaction ID","example":"12a121ad-cbea-4ec4-9e0a-5c861e528bba","isRequired":true,"uniqueKey":"data.transactions.items.[INDEX].id","typeLabel":"string"},"userId":{"type":"string","description":"User ID","example":"12a121ad-cbea-4ec4-9e0a-5c861e528bba","isRequired":true,"uniqueKey":"data.transactions.items.[INDEX].userId","typeLabel":"string"},"status":{"description":"Transaction status","example":"PENDING_FUNDS","enum":["FAILED","COMPLETED","PENDING","PENDING_PAYMENT","FIAT_PAYMENT_RECEIVED","FIAT_RECEIVED","CRYPTO_RECEIVED","CRYPTO_NOT_RECEIVED","COMPLETED_CRYPTO_RECEIVAL","CANCELLED","IN_PROGRESS","BANK_TRANSFER_PENDING","READY_BANK_TRANSFER","AWAITING_MANUAL_CRYPTO_TRANSFER","AWAITING_MANUAL_FIAT_TRANSFER","PENDING_FUNDS","FUNDS_RECEIVED","AWAITING_FUND_TRANSFER"],"type":"string","isRequired":true,"uniqueKey":"data.transactions.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"exchangeRate":{"type":"number","description":"Exchange rate from source to target fiat","example":0.95,"isRequired":true,"uniqueKey":"data.transactions.items.[INDEX].exchangeRate","typeLabel":"number"},"sourceBankAccount":{"type":"object","description":"Bank account information for source fiat","required":["country","accountIdentifier","isVerified"],"x-readme-ref-name":"CrossRampSourceBankAccountResponse","properties":{"country":{"type":"string","description":"The country of the bank account","example":"MX","isRequired":true,"uniqueKey":"data.transactions.items.[INDEX].sourceBankAccount.country","typeLabel":"string"},"accountIdentifier":{"type":"string","description":"The account identifier for the bank account (CLABE in MX, account number elsewhere)","example":"014680260346007120","isRequired":true,"uniqueKey":"data.transactions.items.[INDEX].sourceBankAccount.accountIdentifier","typeLabel":"string"},"isVerified":{"type":"boolean","description":"Whether the account is verified","example":true,"isRequired":true,"uniqueKey":"data.transactions.items.[INDEX].sourceBankAccount.isVerified","typeLabel":"boolean"},"accountHolder":{"type":"object","description":"Beneficiary name of the bank account","required":["type","name"],"x-readme-ref-name":"AccountHolderResponse","example":{"type":"BUSINESS","name":"Capa.fi"},"properties":{"type":{"description":"Type of the account holder","example":"BUSINESS","enum":["INDIVIDUAL","BUSINESS"],"type":"string","isRequired":true,"uniqueKey":"data.transactions.items.[INDEX].sourceBankAccount.accountHolder.type","typeLabel":"enum\u003cstring>"},"name":{"type":"string","description":"Business name of the account holder","example":"Capa.fi","isRequired":true,"uniqueKey":"data.transactions.items.[INDEX].sourceBankAccount.accountHolder.name","typeLabel":"string"}},"uniqueKey":"data.transactions.items.[INDEX].sourceBankAccount.accountHolder","typeLabel":"object"},"bic":{"type":"string","description":"BIC of the bank account (SEPA countries)","example":"DEUTDEFF","uniqueKey":"data.transactions.items.[INDEX].sourceBankAccount.bic","typeLabel":"string"},"routingNumber":{"type":"string","description":"Routing number of the bank account (US)","example":"021000021","uniqueKey":"data.transactions.items.[INDEX].sourceBankAccount.routingNumber","typeLabel":"string"},"address":{"type":"object","description":"Address of the bank account","required":["streetLine1","city","state","postalCode","country"],"x-readme-ref-name":"BankAccountAddressResponse","example":{"streetLine1":"123 Main St","city":"New York","state":"NY","postalCode":"10001","country":"US"},"properties":{"streetLine1":{"type":"string","description":"Street line 1","example":"123 Main St","isRequired":true,"uniqueKey":"data.transactions.items.[INDEX].sourceBankAccount.address.streetLine1","typeLabel":"string"},"city":{"type":"string","description":"City","example":"New York","isRequired":true,"uniqueKey":"data.transactions.items.[INDEX].sourceBankAccount.address.city","typeLabel":"string"},"state":{"type":"string","description":"State/Province","example":"NY","isRequired":true,"uniqueKey":"data.transactions.items.[INDEX].sourceBankAccount.address.state","typeLabel":"string"},"postalCode":{"type":"string","description":"Postal/ZIP code","example":"10001","isRequired":true,"uniqueKey":"data.transactions.items.[INDEX].sourceBankAccount.address.postalCode","typeLabel":"string"},"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code","example":"US","isRequired":true,"uniqueKey":"data.transactions.items.[INDEX].sourceBankAccount.address.country","typeLabel":"string"}},"uniqueKey":"data.transactions.items.[INDEX].sourceBankAccount.address","typeLabel":"object"},"message":{"type":"string","description":"Message should be included in the deposit intent, so we can track the deposit in the bank","example":"RANDOM_MESSAGE","uniqueKey":"data.transactions.items.[INDEX].sourceBankAccount.message","typeLabel":"string"},"bankName":{"type":"string","description":"The name of the bank","example":"Santander","uniqueKey":"data.transactions.items.[INDEX].sourceBankAccount.bankName","typeLabel":"string"},"accountType":{"type":"string","description":"The type of the account","example":"SAVINGS","uniqueKey":"data.transactions.items.[INDEX].sourceBankAccount.accountType","typeLabel":"string"},"documentIdentifier":{"type":"string","description":"The document identifier used for verification (e.g. national tax / ID number)","example":"123abc","uniqueKey":"data.transactions.items.[INDEX].sourceBankAccount.documentIdentifier","typeLabel":"string"},"documentType":{"type":"string","description":"Type of the document bound to the account (country specific)","example":"RNC","uniqueKey":"data.transactions.items.[INDEX].sourceBankAccount.documentType","typeLabel":"string"},"iban":{"type":"string","description":"International Bank Account Number (SEPA / EU accounts)","example":"DE89370400440532013000","uniqueKey":"data.transactions.items.[INDEX].sourceBankAccount.iban","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.transactions.items.[INDEX].sourceBankAccount","typeLabel":"object"},"targetBankAccount":{"type":"object","description":"Bank account information for target fiat","required":["country","accountIdentifier","isVerified"],"x-readme-ref-name":"CrossRampSourceBankAccountResponse","properties":{"country":{"type":"string","description":"The country of the bank account","example":"MX","isRequired":true,"uniqueKey":"data.transactions.items.[INDEX].targetBankAccount.country","typeLabel":"string"},"accountIdentifier":{"type":"string","description":"The account identifier for the bank account (CLABE in MX, account number elsewhere)","example":"014680260346007120","isRequired":true,"uniqueKey":"data.transactions.items.[INDEX].targetBankAccount.accountIdentifier","typeLabel":"string"},"isVerified":{"type":"boolean","description":"Whether the account is verified","example":true,"isRequired":true,"uniqueKey":"data.transactions.items.[INDEX].targetBankAccount.isVerified","typeLabel":"boolean"},"accountHolder":{"type":"object","description":"Beneficiary name of the bank account","required":["type","name"],"x-readme-ref-name":"AccountHolderResponse","example":{"type":"BUSINESS","name":"Capa.fi"},"properties":{"type":{"description":"Type of the account holder","example":"BUSINESS","enum":["INDIVIDUAL","BUSINESS"],"type":"string","isRequired":true,"uniqueKey":"data.transactions.items.[INDEX].targetBankAccount.accountHolder.type","typeLabel":"enum\u003cstring>"},"name":{"type":"string","description":"Business name of the account holder","example":"Capa.fi","isRequired":true,"uniqueKey":"data.transactions.items.[INDEX].targetBankAccount.accountHolder.name","typeLabel":"string"}},"uniqueKey":"data.transactions.items.[INDEX].targetBankAccount.accountHolder","typeLabel":"object"},"bic":{"type":"string","description":"BIC of the bank account (SEPA countries)","example":"DEUTDEFF","uniqueKey":"data.transactions.items.[INDEX].targetBankAccount.bic","typeLabel":"string"},"routingNumber":{"type":"string","description":"Routing number of the bank account (US)","example":"021000021","uniqueKey":"data.transactions.items.[INDEX].targetBankAccount.routingNumber","typeLabel":"string"},"address":{"type":"object","description":"Address of the bank account","required":["streetLine1","city","state","postalCode","country"],"x-readme-ref-name":"BankAccountAddressResponse","example":{"streetLine1":"123 Main St","city":"New York","state":"NY","postalCode":"10001","country":"US"},"properties":{"streetLine1":{"type":"string","description":"Street line 1","example":"123 Main St","isRequired":true,"uniqueKey":"data.transactions.items.[INDEX].targetBankAccount.address.streetLine1","typeLabel":"string"},"city":{"type":"string","description":"City","example":"New York","isRequired":true,"uniqueKey":"data.transactions.items.[INDEX].targetBankAccount.address.city","typeLabel":"string"},"state":{"type":"string","description":"State/Province","example":"NY","isRequired":true,"uniqueKey":"data.transactions.items.[INDEX].targetBankAccount.address.state","typeLabel":"string"},"postalCode":{"type":"string","description":"Postal/ZIP code","example":"10001","isRequired":true,"uniqueKey":"data.transactions.items.[INDEX].targetBankAccount.address.postalCode","typeLabel":"string"},"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code","example":"US","isRequired":true,"uniqueKey":"data.transactions.items.[INDEX].targetBankAccount.address.country","typeLabel":"string"}},"uniqueKey":"data.transactions.items.[INDEX].targetBankAccount.address","typeLabel":"object"},"message":{"type":"string","description":"Message should be included in the deposit intent, so we can track the deposit in the bank","example":"RANDOM_MESSAGE","uniqueKey":"data.transactions.items.[INDEX].targetBankAccount.message","typeLabel":"string"},"bankName":{"type":"string","description":"The name of the bank","example":"Santander","uniqueKey":"data.transactions.items.[INDEX].targetBankAccount.bankName","typeLabel":"string"},"accountType":{"type":"string","description":"The type of the account","example":"SAVINGS","uniqueKey":"data.transactions.items.[INDEX].targetBankAccount.accountType","typeLabel":"string"},"documentIdentifier":{"type":"string","description":"The document identifier used for verification (e.g. national tax / ID number)","example":"123abc","uniqueKey":"data.transactions.items.[INDEX].targetBankAccount.documentIdentifier","typeLabel":"string"},"documentType":{"type":"string","description":"Type of the document bound to the account (country specific)","example":"RNC","uniqueKey":"data.transactions.items.[INDEX].targetBankAccount.documentType","typeLabel":"string"},"iban":{"type":"string","description":"International Bank Account Number (SEPA / EU accounts)","example":"DE89370400440532013000","uniqueKey":"data.transactions.items.[INDEX].targetBankAccount.iban","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.transactions.items.[INDEX].targetBankAccount","typeLabel":"object"},"createdAt":{"type":"string","description":"Transaction creation date","example":"2024-01-01T12:00:00Z","isRequired":true,"uniqueKey":"data.transactions.items.[INDEX].createdAt","typeLabel":"string"},"sourceCurrency":{"description":"Source currency symbol","example":"MXN","enum":["MXN","DOP","USD","EUR"],"type":"string","uniqueKey":"data.transactions.items.[INDEX].sourceCurrency","typeLabel":"enum\u003cstring>"},"targetCurrency":{"description":"Target currency symbol","example":"DOP","enum":["MXN","DOP","USD","EUR"],"type":"string","uniqueKey":"data.transactions.items.[INDEX].targetCurrency","typeLabel":"enum\u003cstring>"},"sourceAmount":{"type":"number","description":"Source amount","example":1000,"uniqueKey":"data.transactions.items.[INDEX].sourceAmount","typeLabel":"number"},"targetAmount":{"type":"number","description":"Target amount that will be delivered","example":950,"uniqueKey":"data.transactions.items.[INDEX].targetAmount","typeLabel":"number"},"premiumSpread":{"type":"number","description":"Premium spread applied","example":0.01,"uniqueKey":"data.transactions.items.[INDEX].premiumSpread","typeLabel":"number"},"completedAt":{"type":"string","description":"Transaction completion date (null if not completed)","uniqueKey":"data.transactions.items.[INDEX].completedAt","typeLabel":"string"}},"required":["id","userId","status","exchangeRate","sourceBankAccount","targetBankAccount","createdAt"],"x-readme-ref-name":"CrossRampPartnerV2Response","uniqueKey":"data.transactions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.transactions","typeLabel":"object[]"}},"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"success":true,"data":{"id":"12a121ad-cbea-4ec4-9e0a-5c861e528bba","userId":"12a121ad-cbea-4ec4-9e0a-5c861e528bba","status":"PENDING_FUNDS","sourceCurrency":"MXN","targetCurrency":"DOP","sourceAmount":1000,"targetAmount":950,"exchangeRate":0.95,"sourceBankAccount":{"country":"MX","accountIdentifier":"014680260346007120","bankName":"Santander","isVerified":true,"message":"12a121ad-cbea-4ec4-9e0a-5c861e528bba"},"targetBankAccount":{"country":"DO","accountIdentifier":"0123456789012345678","bankName":"Banco Popular Dominicano","isVerified":true},"createdAt":"2024-01-01T12:00:00Z","premiumSpread":0.01}},"examples":{"Example":{"title":"Example","value":{"success":true,"data":{"id":"12a121ad-cbea-4ec4-9e0a-5c861e528bba","userId":"12a121ad-cbea-4ec4-9e0a-5c861e528bba","status":"PENDING_FUNDS","sourceCurrency":"MXN","targetCurrency":"DOP","sourceAmount":1000,"targetAmount":950,"exchangeRate":0.95,"sourceBankAccount":{"country":"MX","accountIdentifier":"014680260346007120","bankName":"Santander","isVerified":true,"message":"12a121ad-cbea-4ec4-9e0a-5c861e528bba"},"targetBankAccount":{"country":"DO","accountIdentifier":"0123456789012345678","bankName":"Banco Popular Dominicano","isVerified":true},"createdAt":"2024-01-01T12:00:00Z","premiumSpread":0.01}}}},"exampleType":"examples"}},"exampleType":"examples"},"7aa5df38-a51f-44b1-bfc8-306a46e9df08":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"code":{"type":"string","description":"Machine-readable error code.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"errors":{"type":"array","description":"Optional per-field validation details.","items":{"type":"object","properties":{"field":{"type":"string","uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"required":["success","code","message"],"uniqueKey":"","typeLabel":"object"},"examples":{"REQUIRED_USER_ID_ERROR":{"title":"REQUIRED_USER_ID_ERROR","value":{"success":false,"code":"REQUIRED_USER_ID_ERROR","message":"This endpoint requires a user id to be provided"}},"INVALID_USER_INPUT_ERROR":{"title":"INVALID_USER_INPUT_ERROR","value":{"success":false,"code":"INVALID_USER_INPUT_ERROR","message":"Invalid User Input"}},"BAD_REQUEST":{"title":"BAD_REQUEST","value":{"success":false,"code":"BAD_REQUEST","message":"Either targetBankAccount or targetBankAccountId must be provided"}},"BAD_REQUEST_2":{"title":"BAD_REQUEST_2","value":{"success":false,"code":"BAD_REQUEST","message":"Unsupported country for cross-ramp: {country}"}},"BAD_REQUEST_3":{"title":"BAD_REQUEST_3","value":{"success":false,"code":"BAD_REQUEST","message":"Target currency must match target bank account currency (expected: {expected}, actual: {actual})"}},"BAD_REQUEST_INVOICE_FILE":{"title":"BAD_REQUEST_INVOICE_FILE","value":{"success":false,"code":"BAD_REQUEST","message":"invoiceFile is required when target bank account country is CN"}},"BAD_REQUEST_4":{"title":"BAD_REQUEST_4","value":{"success":false,"code":"BAD_REQUEST","message":"Provided quoteId is not a CROSS_RAMP quote"}},"BAD_REQUEST_5":{"title":"BAD_REQUEST_5","value":{"success":false,"code":"BAD_REQUEST","message":"Quote currency mismatch (expected: {expected}, actual: {actual})"}},"BAD_REQUEST_6":{"title":"BAD_REQUEST_6","value":{"success":false,"code":"BAD_REQUEST","message":"Source and target currencies must differ"}},"BAD_REQUEST_7":{"title":"BAD_REQUEST_7","value":{"success":false,"code":"BAD_REQUEST","message":"Requested fiat currency is invalid or inactive"}},"BAD_REQUEST_8":{"title":"BAD_REQUEST_8","value":{"success":false,"code":"BAD_REQUEST","message":"This blockchain and token combination is disabled or does not exist"}},"BAD_REQUEST_9":{"title":"BAD_REQUEST_9","value":{"success":false,"code":"BAD_REQUEST","message":"Cannot create transaction: No supported banks configured for user with id: {userId}"}},"QUOTE_EXPIRED":{"title":"QUOTE_EXPIRED","value":{"success":false,"code":"QUOTE_EXPIRED","message":"Quote has expired"}}},"exampleType":"examples"}},"exampleType":"examples"},"5f94263c-78db-4980-8f43-7f267b3a508f":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"code":{"type":"string","description":"Machine-readable error code.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"errors":{"type":"array","description":"Optional per-field validation details.","items":{"type":"object","properties":{"field":{"type":"string","uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"required":["success","code","message"],"uniqueKey":"","typeLabel":"object"},"examples":{"UNAUTHORIZED":{"title":"UNAUTHORIZED","value":{"success":false,"code":"UNAUTHORIZED","message":"API Key is missing"}},"UNAUTHORIZED_2":{"title":"UNAUTHORIZED_2","value":{"success":false,"code":"UNAUTHORIZED","message":"Invalid API Key format"}},"UNAUTHORIZED_3":{"title":"UNAUTHORIZED_3","value":{"success":false,"code":"UNAUTHORIZED","message":"Invalid API Key"}}},"exampleType":"examples"}},"exampleType":"examples"},"fe0820bb-ac9e-4244-b04a-686df061fcee":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"code":{"type":"string","description":"Machine-readable error code.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"errors":{"type":"array","description":"Optional per-field validation details.","items":{"type":"object","properties":{"field":{"type":"string","uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"required":["success","code","message"],"uniqueKey":"","typeLabel":"object"},"examples":{"USER_NOT_VERIFIED_ERROR":{"title":"USER_NOT_VERIFIED_ERROR","value":{"success":false,"code":"USER_NOT_VERIFIED_ERROR","message":"User is not allowed to perform the operations because has not completed the KYC verification."}},"USER_BANK_INFO_ACCESS_DENIED":{"title":"USER_BANK_INFO_ACCESS_DENIED","value":{"success":false,"code":"USER_BANK_INFO_ACCESS_DENIED","message":"The bank information does not belong to the specified user."}}},"exampleType":"examples"}},"exampleType":"examples"},"0c55680b-56c1-4adb-83a3-cc355f88637e":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"code":{"type":"string","description":"Machine-readable error code.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"errors":{"type":"array","description":"Optional per-field validation details.","items":{"type":"object","properties":{"field":{"type":"string","uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"required":["success","code","message"],"uniqueKey":"","typeLabel":"object"},"examples":{"USER_BANK_INFO_NOT_FOUND":{"title":"USER_BANK_INFO_NOT_FOUND","value":{"success":false,"code":"USER_BANK_INFO_NOT_FOUND","message":"User bank information not found."}},"NOT_FOUND_ERROR":{"title":"NOT_FOUND_ERROR","value":{"success":false,"code":"NOT_FOUND_ERROR","message":"Requested resource was not found"}}},"exampleType":"examples"}},"exampleType":"examples"},"6d06df33-0c89-4bd4-8b0e-0eb8621748f7":{"description":"Conflict","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"code":{"type":"string","description":"Machine-readable error code.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"errors":{"type":"array","description":"Optional per-field validation details.","items":{"type":"object","properties":{"field":{"type":"string","uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"required":["success","code","message"],"uniqueKey":"","typeLabel":"object"},"example":{"success":false,"code":"CONFLICT","message":"A request with this idempotency key is currently being processed"},"examples":{"Example":{"title":"Example","value":{"success":false,"code":"CONFLICT","message":"A request with this idempotency key is currently being processed"}}},"exampleType":"examples"}},"exampleType":"examples"},"95f625ce-f065-451e-a763-8883a937b2d3":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"code":{"type":"string","description":"Machine-readable error code.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"errors":{"type":"array","description":"Optional per-field validation details.","items":{"type":"object","properties":{"field":{"type":"string","uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"required":["success","code","message"],"uniqueKey":"","typeLabel":"object"},"example":{"success":false,"code":"INVALID_USER_INPUT_ERROR","message":"Idempotency-Key was already used with a different request body"},"examples":{"Example":{"title":"Example","value":{"success":false,"code":"INVALID_USER_INPUT_ERROR","message":"Idempotency-Key was already used with a different request body"}}},"exampleType":"examples"}},"exampleType":"examples"},"9aca4cd7-f967-48d2-8884-e11e464c0252":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"code":{"type":"string","description":"Machine-readable error code.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"errors":{"type":"array","description":"Optional per-field validation details.","items":{"type":"object","properties":{"field":{"type":"string","uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"required":["success","code","message"],"uniqueKey":"","typeLabel":"object"},"example":{"success":false,"code":"INTERNAL_SERVER_ERROR","message":"Internal server error"},"examples":{"Example":{"title":"Example","value":{"success":false,"code":"INTERNAL_SERVER_ERROR","message":"Internal server error"}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"6875f2ec-eb9a-4e5a-9712-10450ddedb7d":{"PartnerApiKey":{"type":"apiKey","in":"header","name":"partner-api-key","description":"API key for the affiliated partner performing the request.","scopes":[],"schemeName":"PartnerApiKey"}}},"servers":{"5686a20f-d362-468b-8ea3-da78d912bdf5":{"url":"https://api.sandbox.capa.fi"},"0f7022e6-7441-4afa-92a9-3a98284174f7":{"url":"https://api.capa.fi"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"partner-api-key","description":"API key for the affiliated partner performing the request.","scopes":[],"schemeName":"PartnerApiKey"},"schema":{"title":"partner-api-key","type":"string","description":"API key for the affiliated partner performing the request.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"PartnerApiKey","name":"partner-api-key"}],"title":"PartnerApiKey"}]},"originalFileLocation":"reference/openapi/CrossRampPartnerV2Controller_createPartnerCrossRampBulk.json"},"subdomain":"capa","siteName":"Capa.fi","title":"Create Bulk Cross-Ramp - Capa.fi","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-04T00:35:26.945Z","originalFileLocation":"reference/crossramppartnerv2controller_createpartnercrossrampbulk.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Create several cross-ramps for one user from a single quote, each funded and paid out on its own.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Capa.fi\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/capa/Gj5tlmaKVowjgoAW/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/capa/Gj5tlmaKVowjgoAW/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/capa/Gj5tlmaKVowjgoAW/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/capa/Gj5tlmaKVowjgoAW/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/capa/Gj5tlmaKVowjgoAW/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/capa/Gj5tlmaKVowjgoAW/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/capa/Gj5tlmaKVowjgoAW/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/capa/Gj5tlmaKVowjgoAW/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/capa/Gj5tlmaKVowjgoAW/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create Bulk Cross-Ramp - Capa.fi\">\u003cmeta data-mint-head property=\"og:description\" content=\"Create several cross-ramps for one user from a single quote, each funded and paid out on its own.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Capa.fi\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.capa.fi/reference/crossramppartnerv2controller_createpartnercrossrampbulk\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://capa.mintlify.app/_mintlify/api/og/v2?division=Cross-Ramp\u0026amp;title=Create+Bulk+Cross-Ramp\u0026amp;description=Create+several+cross-ramps+for+one+user+from+a+single+quote%2C+each+funded+and+paid+out+on+its+own.\u0026amp;theme=8042dca758d2679cfe40adac\u0026amp;signature=3571055596c40d63a729d52dc75642aac5ed17e68e2080de735839a539f6e2d7\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Create Bulk Cross-Ramp - Capa.fi\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Create several cross-ramps for one user from a single quote, each funded and paid out on its own.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://capa.mintlify.app/_mintlify/api/og/v2?division=Cross-Ramp\u0026amp;title=Create+Bulk+Cross-Ramp\u0026amp;description=Create+several+cross-ramps+for+one+user+from+a+single+quote%2C+each+funded+and+paid+out+on+its+own.\u0026amp;theme=8042dca758d2679cfe40adac\u0026amp;signature=3571055596c40d63a729d52dc75642aac5ed17e68e2080de735839a539f6e2d7\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/capa/Gj5tlmaKVowjgoAW/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Capa.fi\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#191f14\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.capa.fi/reference/crossramppartnerv2controller_createpartnercrossrampbulk\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/reference/crossramppartnerv2controller_createpartnercrossrampbulk.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.capa.fi/#organization\",\"name\":\"Capa.fi\",\"url\":\"https://docs.capa.fi\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/capa/sdievWamxx2n0U65/logo/logo.svg?fit=max\u0026auto=format\u0026n=sdievWamxx2n0U65\u0026q=85\u0026s=cd1c9b9fcff02ef9bd460d71d7823292\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.capa.fi#website\",\"name\":\"Capa.fi\",\"url\":\"https://docs.capa.fi\",\"publisher\":{\"@id\":\"https://docs.capa.fi/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.capa.fi/reference/crossramppartnerv2controller_createpartnercrossrampbulk#webpage\",\"url\":\"https://docs.capa.fi/reference/crossramppartnerv2controller_createpartnercrossrampbulk\",\"name\":\"Create Bulk Cross-Ramp\",\"description\":\"Create several cross-ramps for one user from a single quote, each funded and paid out on its own.\",\"dateModified\":\"2026-11-04T00:35:26.945Z\",\"isPartOf\":{\"@id\":\"https://docs.capa.fi#website\"},\"breadcrumb\":{\"@id\":\"https://docs.capa.fi/reference/crossramppartnerv2controller_createpartnercrossrampbulk#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.capa.fi/reference/crossramppartnerv2controller_createpartnercrossrampbulk#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Capa Partner API - V2\",\"item\":\"https://docs.capa.fi/reference/userpartnercontrollerv2_createuser\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Cross-Ramp\",\"item\":\"https://docs.capa.fi/reference/crossramppartnerv2controller_createpartnercrossramp\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Create Bulk Cross-Ramp\",\"item\":\"https://docs.capa.fi/reference/crossramppartnerv2controller_createpartnercrossrampbulk\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.capa.fi/reference/crossramppartnerv2controller_createpartnercrossrampbulk#apireference\",\"headline\":\"Create Bulk Cross-Ramp\",\"name\":\"Create Bulk Cross-Ramp\",\"description\":\"Create several cross-ramps for one user from a single quote, each funded and paid out on its own.\",\"url\":\"https://docs.capa.fi/reference/crossramppartnerv2controller_createpartnercrossrampbulk\",\"mainEntityOfPage\":{\"@id\":\"https://docs.capa.fi/reference/crossramppartnerv2controller_createpartnercrossrampbulk#webpage\"},\"dateModified\":\"2026-11-04T00:35:26.945Z\",\"keywords\":\"bulk cross-ramp, batch payouts, multiple beneficiaries, cross-ramp quote\",\"publisher\":{\"@id\":\"https://docs.capa.fi/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.capa.fi#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Capa.fi\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Capa.fi","nav":{"global":null,"tabs":[{"tab":"Guides","icon":"book-open","pages":[{"title":"Guides","href":"/docs/getting-started"}]},{"tab":"API Reference","icon":"Code","pages":[{"group":"Capa Partner API - V2","pages":[{"group":"Users","pages":[{"title":"Create User","openapi":"reference/openapi/UserPartnerControllerV2_createUser.json POST /api/partner/v2/users","href":"/reference/userpartnercontrollerv2_createuser"},{"title":"Start KYC","openapi":"reference/openapi/UserPartnerControllerV2_createUserKYC.json POST /api/partner/v2/users/{userId}/kyc","href":"/reference/userpartnercontrollerv2_createuserkyc"},{"title":"Create KYC Link","openapi":"reference/openapi/UserPartnerControllerV2_createVerificationLink.json POST /api/partner/v2/users/{userId}/kyc/verification-link","href":"/reference/userpartnercontrollerv2_createverificationlink"},{"title":"Create KYB Link","openapi":"reference/openapi/UserPartnerControllerV2_generateKYBVerificationLink.json POST /api/partner/v2/users/{userId}/kyb/verification-link","href":"/reference/userpartnercontrollerv2_generatekybverificationlink"},{"title":"Request Signature","openapi":"reference/openapi/UserPartnerControllerV2_requestDocumentSignature.json POST /api/partner/v2/users/{userId}/documents/sign","href":"/reference/userpartnercontrollerv2_requestdocumentsignature"}]},{"group":"KYC","pages":[{"title":"Get KYC Details","openapi":"reference/openapi/KYCPartnerControllerV2_getUserVerificationDetails.json GET /api/partner/v2/kyc/details","href":"/reference/kycpartnercontrollerv2_getuserverificationdetails"}]},{"group":"KYB","pages":[{"title":"Submit Business Profile","openapi":"reference/openapi/KYBPartnerControllerV2_submitBusinessProfile.json POST /api/partner/v2/kyb","href":"/reference/kybpartnercontrollerv2_submitbusinessprofile"},{"title":"Get KYB Details","openapi":"reference/openapi/KYBPartnerControllerV2_getUserKYBDetails.json GET /api/partner/v2/kyb/details","href":"/reference/kybpartnercontrollerv2_getuserkybdetails"}]},{"group":"Quotes","pages":[{"title":"Create Quote","openapi":"reference/openapi/QuotePartnerV2Controller_createPartnerQuote.json POST /api/partner/v2/quotes","href":"/reference/quotepartnerv2controller_createpartnerquote"},{"title":"Get Quote Rate","openapi":"reference/openapi/QuotePartnerV2Controller_getPartnerQuoteRate.json GET /api/partner/v2/quotes","href":"/reference/quotepartnerv2controller_getpartnerquoterate"}]},{"group":"On-Ramp","pages":[{"title":"Create On-Ramp","openapi":"reference/openapi/OnRampPartnerV2Controller_createPartnerOnRamp.json POST /api/partner/v2/on-ramp","href":"/reference/onramppartnerv2controller_createpartneronramp"}]},{"group":"Off-Ramp","pages":[{"title":"Create Off-Ramp","openapi":"reference/openapi/OffRampPartnerV2Controller_createPartnerOffRamp.json POST /api/partner/v2/off-ramp","href":"/reference/offramppartnerv2controller_createpartnerofframp"},{"title":"Execute Off-Ramp","openapi":"reference/openapi/OffRampPartnerV2Controller_executeOffRamp.json POST /api/partner/v2/off-ramp/execute","href":"/reference/offramppartnerv2controller_executeofframp"}]},{"group":"Cross-Ramp","pages":[{"title":"Create Cross-Ramp","openapi":"reference/openapi/CrossRampPartnerV2Controller_createPartnerCrossRamp.json POST /api/partner/v2/cross-ramp","description":null,"href":"/reference/crossramppartnerv2controller_createpartnercrossramp"},{"title":"Create Bulk Cross-Ramp","openapi":"reference/openapi/CrossRampPartnerV2Controller_createPartnerCrossRampBulk.json POST /api/partner/v2/cross-ramp/bulk","href":"/reference/crossramppartnerv2controller_createpartnercrossrampbulk"},{"title":"Create Cross-Ramp Quote","openapi":"reference/openapi/CrossRampPartnerV2Controller_createPartnerCrossRampQuote.json POST /api/partner/v2/cross-ramp/quotes","description":null,"href":"/reference/crossramppartnerv2controller_createpartnercrossrampquote"},{"title":"Get Cross-Ramp Rate","openapi":"reference/openapi/CrossRampPartnerV2Controller_getPartnerCrossRampQuoteRate.json GET /api/partner/v2/cross-ramp/quotes","href":"/reference/crossramppartnerv2controller_getpartnercrossrampquoterate"}]},{"group":"Associated Person Signatures","pages":[{"title":"Request Beneficial Owner Signatures","openapi":"reference/openapi/AssociatedPersonPartnerControllerV2_requestUboFormSignatures.json POST /api/partner/v2/users/{userId}/associated-persons/signatures","href":"/reference/associatedpersonpartnercontrollerv2_requestuboformsignatures"},{"title":"Get Beneficial Owner Signature Status","openapi":"reference/openapi/AssociatedPersonPartnerControllerV2_listUboFormSignatures.json GET /api/partner/v2/users/{userId}/associated-persons/signatures","href":"/reference/associatedpersonpartnercontrollerv2_listuboformsignatures"}]},{"group":"Transactions","pages":[{"title":"Cancel Transaction","openapi":"reference/openapi/TransactionPartnerV2Controller_cancelPartnerTransaction.json PUT /api/partner/v2/transactions/{id}/cancel","href":"/reference/transactionpartnerv2controller_cancelpartnertransaction"},{"title":"List Transactions","openapi":"reference/openapi/TransactionPartnerV2Controller_listPartnerUserTransactions.json GET /api/partner/v2/transactions","href":"/reference/transactionpartnerv2controller_listpartnerusertransactions"},{"title":"Mock Testing Guide","openapi":"reference/openapi/TransactionPartnerV2Controller_getMockTestingGuide.json GET /api/partner/v2/transactions/mock-testing-guide","href":"/reference/transactionpartnerv2controller_getmocktestingguide"}]},{"group":"Bank Accounts","pages":[{"title":"List Bank Accounts (User)","openapi":"reference/openapi/UserBankInfoPartnerV2Controller_getUserBankInfosByUserId.json GET /api/partner/v2/banks/users/{userId}/accounts","href":"/reference/userbankinfopartnerv2controller_getuserbankinfosbyuserid"},{"title":"Add Bank Account (User)","openapi":"reference/openapi/UserBankInfoPartnerV2Controller_createUserBankInfoByUserId.json POST /api/partner/v2/banks/users/{userId}/accounts","href":"/reference/userbankinfopartnerv2controller_createuserbankinfobyuserid"},{"title":"Delete Bank Account (User)","openapi":"reference/openapi/UserBankInfoPartnerV2Controller_deleteUserBankInfoByUserId.json DELETE /api/partner/v2/banks/users/{userId}/accounts/{userBankInfoId}","href":"/reference/userbankinfopartnerv2controller_deleteuserbankinfobyuserid"}]},{"group":"Virtual Accounts","pages":[{"title":"Get Virtual Account Status (User)","openapi":"reference/openapi/BankingOnboardingPartnerV2Controller_getOnboardingStatus.json GET /api/partner/v2/banks/users/{userId}/banking-onboarding","href":"/reference/bankingonboardingpartnerv2controller_getonboardingstatus"},{"title":"Request Virtual Account (User)","openapi":"reference/openapi/BankingOnboardingPartnerV2Controller_requestOnboarding.json POST /api/partner/v2/banks/users/{userId}/banking-onboarding","href":"/reference/bankingonboardingpartnerv2controller_requestonboarding"}]},{"group":"Wallets","pages":[{"title":"List Wallets","openapi":"reference/openapi/WalletAddressPartnerV2Controller_listUserWallets.json GET /api/partner/v2/users/{userId}/wallets","href":"/reference/walletaddresspartnerv2controller_listuserwallets"},{"title":"Create Wallet","openapi":"reference/openapi/WalletAddressPartnerV2Controller_createUserWallet.json POST /api/partner/v2/users/{userId}/wallets","href":"/reference/walletaddresspartnerv2controller_createuserwallet"},{"title":"Delete Wallet","openapi":"reference/openapi/WalletAddressPartnerV2Controller_deleteUserWallet.json DELETE /api/partner/v2/users/{userId}/wallets/{walletId}","href":"/reference/walletaddresspartnerv2controller_deleteuserwallet"},{"title":"Get Wallet Balances","openapi":"reference/openapi/UserBalancePartnerV2Controller_getUserWalletBalances.json GET /api/partner/v2/users/{userId}/wallets/balance","href":"/reference/userbalancepartnerv2controller_getuserwalletbalances"}]},{"group":"Webhooks · Settings","pages":[{"title":"Update Webhook Settings","openapi":"reference/openapi/PartnerWebhookSettingsV2Controller_update.json PUT /api/partner/v2/webhook-settings","href":"/reference/partnerwebhooksettingsv2controller_update"}]},{"group":"Webhooks · Notifications","pages":[{"title":"List Webhooks","openapi":"reference/openapi/PartnerWebhookNotificationV2Controller_listWebhookNotifications.json GET /api/partner/v2/webhook-notifications","href":"/reference/partnerwebhooknotificationv2controller_listwebhooknotifications"},{"title":"Get Webhook","openapi":"reference/openapi/PartnerWebhookNotificationV2Controller_getWebhookNotificationDetail.json GET /api/partner/v2/webhook-notifications/{id}","href":"/reference/partnerwebhooknotificationv2controller_getwebhooknotificationdetail"},{"title":"Retry Webhook","openapi":"reference/openapi/PartnerWebhookNotificationV2Controller_retry.json POST /api/partner/v2/webhook-notifications/{id}/retry","href":"/reference/partnerwebhooknotificationv2controller_retry"}]}]}]},{"tab":"Changelog","icon":"megaphone","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Create Bulk Cross-Ramp - Capa.fi","buildId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","deploymentId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C8RPHPxo.js","utils-0BK-9q6z.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DfjzsUJT.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B4v9psJ4.js","snippetPresets-CpTQv-Ez.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-BNP-Fvr0.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BSgu6h1D.js","shallow-Biv1i9Gs.js","getApiPlaygroundDisplay-BoGOXhtF.js","CodeSnippet-DvQoT18_.js","CodeSnippets-Dnpa15xT.js","Page-Buji1S4J.js","getPastedJson-xAIyhUFE.js","icon-S6FBih11.js","MethodPill-SaYeUZyk.js","DuplicateIcon-Cs-p3v2Q.js","createIcon-DjCFEoHq.js","DynamicMarkdown-BcnBltEQ.js","SectionHeading-BUBl0eEF.js","axios-vUo_bRtp.js","Markdown-h4cOoD8d.js","clsx-B2v50t8t.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-DJnKvr0g.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BHrrjR1K.js"]}