Create a Blockchain Payment
Creates a blockchain payment for fiat or cross-border payments.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Idempotency key
5 - 255Body
Creates a payment to a fiat or cross-border creditor.
Only fiat-to-fiat transfers are currently accepted: a wallet_address
debtor and the blockchain creditor rails (solana, base, ethereum)
are advertised in the enums but rejected at creation.
The debtor's available balance is checked at creation: insufficient funds
are normally rejected synchronously with HTTP 400 and no payment is
created. When the balance service is temporarily unavailable the check is
deferred to asynchronous processing, so a successful create response is not
an absolute guarantee of settlement.
The source of funds for the transfer.
Common creditor fields shared by every payment rail. This is the base of
the rail-specific creditor variants; integrations reference
BlockchainPaymentCreditor, which selects the correct variant from
payment_rail.
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
- Option 7
- Option 8
- Option 9
- Option 10
- Option 11
- Option 12
The transfer amounts and currency codes.
The purpose of the transfer.
Details of the receiving financial institution. Required when
creditor.payment_rail is not a blockchain network (solana, base,
ethereum). When creditor.payment_rail is swift, address is also
required.
An optional reference message for the transfer, passed on to the recipient on rails that carry a reference.
Formatting requirements depend on creditor.payment_rail. The reference
is stored and delivered exactly as submitted — it is never shortened,
stripped, or otherwise altered. A reference that does not meet its
rail's requirements is rejected when the payment is created, with HTTP
422 and an invalid_parameters entry for reference.
payment_rail | Length | Allowed characters |
|---|---|---|
ach | 1–10 | letters, digits, spaces |
wire | 1–140 | any character (line-formatted, see below) |
iban | 6–140 | letters, digits, spaces, and & - . / |
clabe | 1–40 | letters, digits, spaces |
swift | 1–190 | letters, digits, spaces, and / - ? : ( ) . , ' + (line-formatted, see below) |
pix_key | 1–100 | letters, digits, spaces |
pix_br_code | 1–100 | letters, digits, spaces |
fps | 1–18 | letters, digits, spaces |
Additional rules:
wireandswiftreferences are formatted into at most 4 lines of 35 characters. Words are kept whole and wrapped at spaces; include your own line breaks (\n) to control the layout. A single word longer than 35 characters, or text that cannot fit within 4 lines, is rejected.ibanrequires a minimum of 6 characters. If you omit the reference on anibanpayment, one is generated for you and returned on the created payment object.bre_b,ethereum,base, andsolanado not carry a reference; supplying one is rejected.- Omitting the field, or sending an empty string, is allowed on every
rail except
ibanand results in no reference being sent.
"INV2024001"
Response
Successful response
A blockchain payment object representing a fiat or cross-border payment.
The ID of the Blockchain Payment object.
^blockchain_payment_\w+$"blockchain_payment_xyz123"
The source of funds for the transfer, with enriched entity data.
Common creditor fields shared by every payment rail. This is the base of
the rail-specific creditor variants; integrations reference
BlockchainPaymentCreditor, which selects the correct variant from
payment_rail.
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
- Option 7
- Option 8
- Option 9
- Option 10
- Option 11
- Option 12
Details of the receiving financial institution. Required when
creditor.payment_rail is not a blockchain network (solana, base,
ethereum). When creditor.payment_rail is swift, address is also
required.
The transfer amounts, currency codes, and settlement details.
The purpose of the transfer.
The reference message for the transfer. For iban payments created
without a reference, this is a value generated automatically at
creation, of the form Payment via Lead <payment id> (the payment's
public ID with underscores replaced by hyphens, e.g.
Payment via Lead blockchain-payment-2x7abc...). See reference on the
create request for the per-rail formatting rules.
"INV2024001"
The current status of the blockchain payment.
created, under_review, awaiting_funds, submitted, posted, rejected, canceled "created"
Reason the transfer was rejected. Present only if status is rejected.
On account-validated rails (currently pix and spei), name
validation against the receiving account produces the following
reasons. Distinguish retryable from terminal so you build the
right resubmit logic:
name in request and name on account do not match— terminal. The creditor name did not match the legal name on the validated receiving account. Do not resubmit unchanged; correct the creditor name to match the account.name could not be validated— retryable. The receiving account's name was not validated in time. Resubmit the same payment; it reuses the held account and succeeds once validation completes.account closed— terminal. The receiving account is closed and a resubmit cannot succeed.
Other reasons may be returned as plain text.
"name in request and name on account do not match"
Reason the transfer was canceled. Present only if status is canceled.
"Requested by customer"
ISO 8601 format timestamp representing when the blockchain payment was created.
"2024-06-27T11:22:33Z"
ISO 8601 format timestamp representing when the blockchain payment was last updated.
"2024-06-27T11:22:33Z"

