Developers

Payout Quickstart

This page takes you from an empty project to a confirmed on-chain payout in a few minutes — from GET /v1/vault to a payout.confirmed webhook. Requests run against the sandbox at https://api.stridge.dev or production at https://api.stridge.com.

Limited availability

Vaults are provisioned per tenant in supported regions only and for select clients only. If GET /v1/vault returns an empty list, your tenant isn't vault-enabled yet — reach out to enable payouts for your region. See Vaults for the custody model and the full notice.

Get an API key

Create an account in the Stridge Dashboard and generate an API key. Keep it server-side only — every payout call is authorized with the X-API-Key header.

Pick a vault

List the vaults available to your tenant and note the id of the one that holds the asset you want to send.

curl 'https://api.stridge.com/v1/vault' \
  -H 'X-API-Key: '"$STRIDGE_API_KEY"''
Response
{
  "data": [
    { "id": "550e8400-e29b-41d4-a716-446655440000", "label": "hot" }
  ],
  "message": "operation completed successfully",
  "success": true
}
Create the payout

Send funds to an external address. Identify the vault, asset, and network, give the payout a reference_id you own, and specify either a crypto amount or a usd_amount.

curl -X POST 'https://api.stridge.com/v1/transfer/payout' \
  -H 'X-API-Key: '"$STRIDGE_API_KEY"'' \
  -H 'Content-Type: application/json' \
  -d '{
    "vault_id": "550e8400-e29b-41d4-a716-446655440000",
    "asset": "USDT",
    "network_symbol": "ethereum",
    "to_address": "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B",
    "reference_id": "order-12345",
    "amount": "100.50",
    "remark": "Payment for order #12345"
  }'

A 201 Created returns the tracked payout. It usually starts in queued — Stridge auto-refills gas if the vault is short, then signs and broadcasts.

Response
{
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440001",
    "vault_id": "550e8400-e29b-41d4-a716-446655440000",
    "asset": "USDT",
    "network_symbol": "ethereum",
    "amount": "100.50",
    "usd_amount": "100.50",
    "rate": "1.0001",
    "to_address": "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B",
    "reference_id": "order-12345",
    "status": "queued",
    "tx_id": "",
    "created_at": "2026-01-01T00:00:00Z"
  },
  "message": "operation completed successfully",
  "success": true
}
Track it to confirmation

Subscribe to payout.confirmed (and payout.failed) for push updates, or poll the payout by id. The record carries status, the on-chain tx_id, and confirmed_at once it lands.

curl 'https://api.stridge.com/v1/transfer/payout/550e8400-e29b-41d4-a716-446655440001' \
  -H 'X-API-Key: '"$STRIDGE_API_KEY"''
Tip

Reuse the same reference_id to make creation safely retryable — a duplicate returns 409 Conflict instead of paying twice. Pick an id you already store, like an order or invoice id.

Common errors

StatusMeaningFix
400Validation error or insufficient balanceCheck the asset/network and that the vault holds enough to cover the amount
404Vault not foundConfirm vault_id from GET /v1/vault
409Duplicate reference_idThe payout already exists — fetch it instead of resending

Next

  • Payouts — the full model, lifecycle, and idempotency rules.
  • Vaults — addresses, balances, and the non-custodial custody model.
  • Gas station — how gas is funded automatically for every payout.
  • Payout webhook eventspayout.confirmed, payout.failed, payout.expired.
Was this page helpful?