CROSSFX API · TRANSFER CONFIRMATION
Turn an approved quote into a transfer.
Confirm the quoted terms, submit the sender's identity for screening, and create the transfer ready for funding.
The quote's cbtx_tracking_id remains the transfer identifier. A successful confirmation creates the transfer in pending_deposit.
Redeem quoteSender screeningCreate transferpending_deposit
How confirmation works#
Confirmation is the point at which the sender commits to the quoted terms and CrossFX creates the transfer record.01
Use quote
cbtx_tracking_id
02
Submit sender
Identity details
03
Screen sender
Sanctions screening
04
Create transfer
pending_deposit
Redeems the quote
Lock the quoted termsConfirmation turns the priced quote into a transfer at the rate that was quoted.
Screens the sender
Before funds moveSanctions screening runs on the sender before the transfer is created.
Creates the transfer
Starts in pending_depositA successful response is the created transfer, ready to be funded.
Duplicate protection
Tracking ID controls creationA confirmed quote cannot be used to create a second transfer with the same tracking ID.
Before you start#
Authentication
Use a valid bearer tokenUnexpired quote
Use the quote tracking IDYou need an unexpired `cbtx_tracking_id` from [Generate Quote](/36246950e0).
Sender identity
Collect the required fieldsProvide the sender's `first_name`, `last_name`, and `entity_type`.
Confirm the transfer#
Confirm Transfer
Create the transfer from the quote`POST /api/v1/transfers/confirm`
Open the API Reference for the full request and response schemas and an interactive console.
REQUEST & RESPONSE
Send the quote's cbtx_tracking_id, the beneficiary and the sender's details.
A successful response returns the created transfer with status set to pending_deposit.
Quote lifecycle#
A quote must still be valid and unused when you confirm it.VALID + UNUSED
Confirm the quote
The priced terms are converted into a transfer and the quote is consumed.
EXPIRED
Generate a new quote
If expires_at has passed, confirmation is rejected with 400 BAD_REQUEST.
ALREADY CONFIRMED
409 CONFLICT
A transfer with the tracking ID already exists. Treat the existing transfer as authoritative rather than attempting to create another.
SINGLE USE
Confirmation consumes the quote.
Do not treat a quote as a reusable transfer template. Once it has been confirmed, use the resulting transfer record as the authoritative transaction.
Sender screening#
Sanctions screening runs as part of Confirm Transfer, before the transfer is created.SCREENING PASSES
Transfer is created
The transfer is returned in pending_deposit and can proceed to funding.
SANCTIONS HIT
No transfer is created
A high-confidence match returns 422 SANCTIONS_HIT. No funds move and there is no transfer record to continue.
Sanctions Screening Guide
Understand screening behaviourSee the identity fields used for screening, the sanctions-hit response and how to test screening outcomes in Sandbox.
Initial transfer state#
A successful confirmation creates the transfer in pending_deposit.TRANSFER CREATED→pending_deposit→Fund the transfer
The transfer does not advance automatically from this state. Funding must happen before the transaction can move toward payout.Transaction legs at confirmation#
The associated settlement legs do not exist yet.deposit_id
null
Filled when the deposit leg is created.
payout_id
null
Filled when the payout leg is created.
refund_id
null
Filled only if a refund leg is created.
reference, purpose, and note are fields for your own transaction context.reference
Your correlation ID
Use your own transaction or order identifier so your team and CrossFX support can match records more easily.
purpose
Transaction context
Use the field for the transaction purpose relevant to your own workflow.
note
Additional context
Store any transaction note your integration needs to carry with the record.
Put your own correlation ID in reference. This gives support a direct way to match your transaction records to the corresponding CrossFX transfer.
Business rules#
QUOTE
Single-use
Once confirmed, the quote is consumed. A repeated confirmation does not create another transfer.
EXPIRY
Confirm before expires_at
An expired quote cannot be confirmed. Generate a new quote instead.
STATE
pending_deposit
A new transfer waits for funding and does not advance on its own.
SCREENING
Before creation
A high-confidence sender match means no transfer record is created and no funds move.
Errors#
Every error below returns the CrossFX platform error envelope, with error first and error_id last.SUPPORT IDENTIFIER
Keep the error_id
Quote the returned error_id when contacting CrossFX support. Include the cbtx_tracking_id so the transfer attempt can be identified quickly.
| HTTP | code | Trigger | What you do |
|---|
| 422 | VALIDATION_FAILED | A required field is missing, null, or the wrong type | Read error.json for the field. entity_type must be individual or entity. |
| 422 | VALIDATION_FAILED | The body carries a field the endpoint does not accept | Read error.json for the field name and remove it. |
| 422 | VALIDATION_FAILED | date_of_birth is not YYYY-MM-DD | Reformat the date. |
| 404 | NOT_FOUND | The quote is unknown, already consumed, or belongs to another client | Generate a new quote. |
| 400 | BAD_REQUEST | The quote has expired | Generate a new quote. |
| 409 | CONFLICT | A transfer with this tracking ID already exists | Treat the existing transfer as authoritative. The body names the clashing field. |
| 422 | SANCTIONS_HIT | Sender screening returned a high-confidence match | Send to compliance review. Do not retry the same identity. |
| 503 | SCREENING_UNAVAILABLE | Screening could not be reached | Retry with backoff. |
| 401 | — | The Authorization header is missing, malformed, or the token has expired | Request a new token and retry. The body is { "message": "Unauthorized" }. |
Initiate Deposit Guide
Fund the transferCreate the funding leg once the confirmed transfer is in `pending_deposit`.
Sanctions Screening Guide
Understand sender screeningSee what a sanctions match returns and how screening failures should be handled.