Skip to content
Seismic Orchestration

POST /transfers

Request: minimal

{
  "on_behalf_of": "cust_01HZ…",
  "amount": "75.00",
  "source": {
    "currency": "usd",
    "payment_rail": "ach_push",
    "external_account_id": "ea_01HZ…"
  },
  "destination": {
    "currency": "usdc",
    "payment_rail": "base",
    "to_address": "0x71C7656EC7ab88b098defB751B7401B5f6d8976F"
  }
}

Request: every option

Same shape with every optional field set, so you can see exactly where each one lives in the body. dry_run: true returns the priced response without creating the transfer, perfect for a "review" screen before the user confirms.

{
  "on_behalf_of": "cust_01HZ…",
  "amount": "75.00",
  "developer_fee": "0.50",
  "client_reference_id": "order_9af2",
  "dry_run": true,
  "source": {
    "currency": "usd",
    "payment_rail": "ach_push",
    "external_account_id": "ea_01HZ…"
  },
  "destination": {
    "currency": "usdc",
    "payment_rail": "base",
    "to_address": "0x71C7656EC7ab88b098defB751B7401B5f6d8976F",
    "wire_message": "SEISMIC-TX-01HZ"
  },
  "features": {
    "flexible_amount": false,
    "static_template": false,
    "allow_any_from_address": false
  },
  "return_instructions": {
    "address": "0x71C7656EC7ab88b098defB751B7401B5f6d8976F",
    "memo": "refund-tx-01HZ"
  }
}

Flexible amount: pin the output instead of the input

Set features.flexible_amount: true, drop the top-level amount, and put the target amount on destination.amount. The transfer prices backwards from output to input, so the source_deposit_instructions.amount is what the customer ends up funding.

{
  "on_behalf_of": "cust_01HZ…",
  "source": {
    "currency": "usd",
    "payment_rail": "ach_push",
    "external_account_id": "ea_01HZ…"
  },
  "destination": {
    "currency": "usdc",
    "payment_rail": "base",
    "to_address": "0x71C7656EC7ab88b098defB751B7401B5f6d8976F",
    "amount": "74.45"
  },
  "features": {
    "flexible_amount": true
  }
}

amount (top-level, source-pinned) and destination.amount (output-pinned) are mutually exclusive. Pick one.

Top-level fields

FieldTypeRequiredNotes
on_behalf_ofstringyesCustomer id.
amountstringyesSource-currency denominated. String to avoid float drift.
sourceobjectyesSee below.
destinationobjectyesSee below.
developer_feestringnoFlat fee you take, in the source currency. Deducted from out.amount.
client_reference_idstringnoYour id, echoed on the response and all webhooks.
dry_runbooleannoReturns a quote without creating the transfer. Useful for pricing UI.
featuresobjectnoflexible_amount, static_template, allow_any_from_address.
return_instructionsobjectno{ address, memo? }: where funds go on irrecoverable failures.

source / destination

FieldTypeNotes
currencystringSee supported currencies.
payment_railstringSee rails. Required on at least one side.
external_account_idstringBank-side: id from External Accounts.
from_addressstringCrypto-side: funding wallet.
to_addressstringCrypto-side: destination wallet.
amountstringDestination-only: pins the output amount (Bridge: "flexible amount" transfers).
wire_messagestringDestination-only: memo on the payout.

Response (201)

{
  "id": "tx_01HZ…",
  "client_reference_id": "order_9af2",
  "amount": "75.00",
  "currency": "usd",
  "on_behalf_of": "cust_01HZ…",
  "developer_fee": "0.50",
  "state": "awaiting_funds",
  "source": {
    "currency": "usd",
    "payment_rail": "ach_push",
    "external_account_id": "ea_01HZ…"
  },
  "destination": {
    "currency": "usdc",
    "payment_rail": "base",
    "to_address": "0x71C7656EC7ab88b098defB751B7401B5f6d8976F",
    "amount": "74.45"
  },
  "source_deposit_instructions": {
    "payment_rail": "ach_push",
    "amount": "75.00",
    "currency": "usd",
    "bank_name": "Cross River Bank",
    "bank_routing_number": "021214891",
    "bank_account_number": "7438291011",
    "bank_beneficiary_name": "…",
    "deposit_message": "SEISMIC-TX-01HZ"
  },
  "receipt": {
    "initial_amount": "75.00",
    "developer_fee": "0.50",
    "exchange_fee": "0.05",
    "subtotal_amount": "74.45",
    "gas_fee": "0.00",
    "final_amount": "74.45",
    "exchange_rate": "1.00"
  },
  "created_at": "2026-04-24T12:00:00Z",
  "updated_at": "2026-04-24T12:00:00Z"
}
curl -X POST "$BASE_URL/transfers" \
  -H "Api-Key: $SEISMIC_ORCHESTRATION_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "on_behalf_of": "cust_01HZ…",
    "amount": "75.00",
    "source": {
      "currency": "usd",
      "payment_rail": "ach_push",
      "external_account_id": "ea_01HZ…"
    },
    "destination": {
      "currency": "usdc",
      "payment_rail": "base",
      "to_address": "0x71C7656EC7ab88b098defB751B7401B5f6d8976F"
    }
  }'

Follow source_deposit_instructions in the response to fund the transfer, then poll GET /transfers/{id} for state transitions.