Skip to main content
POST
Schedule a payment directly (ALPHA)

Authorizations

x-api-key
string
header
required

Headers

x-idempotency-key
string<uuid>
required

Unique key to ensure request idempotency. If the same key is used within a certain time window, the original response will be returned instead of executing the request again.

Body

application/json

Direct (signer-first) schedule create. The signer + funding wallet are the caller's choice; the schedule is explicit dates, or count × interval_seconds from start_at. Name the payee EITHER with destination_id (an existing crypto destination of the wallet's customer) OR with a direct address + network_id (a raw crypto address, no recipient — matched on the address at fire time, like a mandate address target) — exactly one of the two.

signer_id
string
required

The signer the payments bind to; its hosted agent signs at fire time.

wallet_id
string
required

The funding wallet these payments spend from. Required — the signer must be permitted to spend on it, and its chain family must match the payment network.

amount
string
required

Decimal string, at the destination asset.

asset
string
required
destination_id
string

An existing crypto destination of the wallet's customer to pay. Omit to pay a direct address (address + network_id).

address
string

A direct crypto address to pay — an alternative to destination_id (no recipient). Requires network_id; the wallet's chain family must match.

network_id
string

The network for a direct-address payment (required together with address).

dates
integer<int64>[]

Explicit per-payment unix times (one payment each). Win over count × interval_seconds.

Maximum array length: 366
count
integer

Number of payments when using count × interval_seconds (default 1).

Required range: x <= 366
interval_seconds
integer<int64>

Cadence in seconds between payments when using count.

start_at
integer<int64>

First due time (0 ⇒ now).

Response

The scheduled payments that were created (one row per date)

id
string
signer_id
string

The signer (hosted agent) this payment fires under.

wallet_id
string

The funding wallet this payment spends from (the customer's choice at acceptance).

mandate_id
string

AUDIT — the mandate that covered this payment at fire time. Absent until the payment executes (coverage is decided at fire time, not bound at rest).

mandate_version
integer

AUDIT — WHICH version of that mandate authorized this payment. A mandate's rule can be amended (new versions are appended), so mandate_id alone no longer identifies the caps the payment was judged against; this does, and it stays true after later amendments. Look the rule up at GET /mandates/{mandate_id}/versions. Always accompanies mandate_id — when the covering mandate could not be determined, both are absent rather than one being guessed.

wallet_transaction_id
string

AUDIT — the money-path transaction created when this payment fired. Absent until the payment executes.

amount
string

What LEAVES the funding wallet, denominated in asset on network_id. For a DIRECT payment that is also what the payee receives. For a CONVERTED payment (the payee settles on a different asset or chain) it is the DEPOSIT into the conversion account, grossed up so the payee nets the requested figure — so it is LARGER than the payout and in a DIFFERENT asset. Never render it against output_asset.

asset
string

The asset amount is denominated in — the asset that LEAVES the wallet. For a converted payment this is the deposit asset, not the one the payee receives (see output_asset).

failure_reason
string

Why the payment failed (e.g. the mandate gate's denied dimensions); absent unless status is failed.

recipient_id
string

The recipient this payment pays, when it was created from a destination. Absent for a direct-address payment (which carries no recipient).

destination_id
string

The REAL destination this payment settles to — a bank (for an offramp) or a crypto destination. For an auto-account (convert-and-forward) payment, address is the crypto DEPOSIT actually paid while this names the bank/crypto target, so a client can show which account the scheduled payment is for. Absent for a direct-address payment.

destination_type
enum<string>

The kind of the REAL destination (see destination_id). bank marks an offramp (the payment converts crypto to fiat and forwards via a bank rail); crypto a direct or cross-family crypto payout. Absent for a direct-address payment with no destination.

Available options:
bank,
crypto
destination_label
string

A human label for the real destination — e.g. "Chase ••••5432" for a bank, or a shortened address for crypto — so a client can show which account the payment settles to without a second lookup. Absent when unresolved.

destination_rail
string

For a bank destination, the payout rail (e.g. ach, fedwire, swift). Absent for crypto.

output_asset
string

The asset the recipient ULTIMATELY receives. For an offramp this is the fiat currency (e.g. USD) the deposit converts to; for a direct crypto payment it equals asset. DO NOT PAIR THIS WITH amount: for a converted payment amount is the DEPOSIT — what leaves the wallet, in the deposit's own asset — and it is grossed up so the payee nets the requested figure, so a real payment reads amount 0.211112 and pays out 0.19. The rate is 1:1; the fee is not. This response carries no output amount, so a converted payment's payout figure is not available here.

output_network
string

For a crypto destination, the network the recipient ULTIMATELY receives on — for a cross-family swap this differs from network_id (the DEPOSIT network the wallet pays), e.g. output_network solana-devnet while network_id is base-sepolia. Equals network_id for a direct crypto payment; absent for a bank offramp (fiat has no network).

address
string
network_id
string
status
enum<string>
Available options:
scheduled,
cancelled,
executed,
failed
executed_at
integer<int64>
scheduled_at
integer<int64>