Partner API

Deposits and withdrawals

Correct assets, exact amounts and durable transfer state.

All paths below begin /v1/accounts/{externalUserId}. Require a ready account and appropriate scopes. Do not accept a browser-selected external ID without checking your own session.

Deposit overview

GET /wallet/funding returns balance, deposit instructions/supported assets and withdrawal-source availability. GET /wallet/deposit-instructions returns current Bridge addresses and supported assets separately. Render only assets supported on the selected network; never reuse an address from another user or network.

Balance uses exact baseUnit and six-decimal formatted pUSD values. A partial RPC outage can return 200 with balance: null, balanceStatus: "temporarily_unavailable" and withdrawals disabled. Keep usable deposit instructions visible, show balance unavailable, and offer retry—not zero.

Quote and originate the source transfer

POST /wallet/deposit-quote
{
  "fromAmountBaseUnit": "25000000",
  "fromChainId": "1",
  "fromTokenAddress": "0xA0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"
}

Choose a currently supported asset. The amount is source-token base units, not universally six decimals. CRISP fixes the quote recipient to the managed account. The quote itself does not move money. The user signs the source-chain transaction in their connected wallet or transfers to the appropriate returned instructions. Show token, network, amount, recipient and quote fees before signing. Revalidate wallet/account changes; never silently send from a different connected wallet.

GET /wallet/transfers?limit=50&cursor=… reports Bridge status for that account, not arbitrary addresses. Empty history is valid; distinguish pending bridge delivery from credited trading cash. Refresh funding after confirmed delivery.

Withdrawal intent

Requires explicit wallet:write and environment enablement; it is not a default permission. Your authenticated user must approve the exact recipient. Provisioned contact wallet data does not authorize a withdrawal.

Quote via POST /wallet/withdrawal-quote, then submit the same destination fields to POST /withdrawals with an Idempotency-Key:

{
  "amountBaseUnit": "25000000",
  "recipientAddress": "0x1111111111111111111111111111111111111111",
  "toChainId": "1",
  "toTokenAddress": "0xA0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"
}

This placeholder recipient must be replaced by the user's approved destination. Amount is source Polygon pUSD, six decimals. CRISP creates the Bridge destination and signs from the managed wallet. A balance/quote is not a reservation; unsettled fee obligations or changed funds can block a request.

Poll GET /withdrawals/{withdrawalId}; list via GET /withdrawals.

StateMeaning
queuedDurable request accepted
submittingWorker preparing/signing; do not replace
submittedRelayer accepted; chain confirmation pending
confirmedSource pUSD transfer confirmed; use transfers endpoint for final Bridge destination
failedFailed before accepted submission; inspect safe failure code before a new intent
manual_reviewUncertain transfer outcome; contact CRISP, do not resubmit
CRISP Partner Developer Documentation