Transfers

Approve or decline an agent payment

Changed on

Decide on an agent's draft that went over its spend limits. Only agents created with overLimitAction: REQUEST_APPROVAL produce these: the agent's submit returns 403 agent_approval_required and the draft waits with agentApprovalStatus: PENDING (list them with GET /v1/transfers?agentApprovalStatus=PENDING).

  • APPROVE submits the draft. Only the spend limits are skipped; a paused or revoked agent, a currency mismatch, or a payee no longer on the agent's allowlist still refuse it. The payment counts toward the agent's spend.
  • DECLINE cancels the draft.

Requires a console session or an unrestricted organization key — agent keys cannot approve their own payments.

post/v1/transfers/{id}/agent-approval

Request

Path parameters

idstring required
Example:tfr_abc123

Transfer ID

Headers

X-API-Keystring

API key

Request body

decision'APPROVE' | 'DECLINE' required

APPROVE submits the draft, skipping only the agent spend limits (pause, revoke, currency, and the payee allowlist still apply). DECLINE cancels the draft.

reasonstring

Why the payment was declined; stored on the cancellation

Response

APPROVE: the submitted transfer. DECLINE: the cancelled transfer.

idstring required

Transfer ID (tfr_xxx)

organizationIdstring required

Organization ID

clientReferenceIdstring nullable

Client's internal reference ID

sourceCustomerIdstring required

Source customer ID

counterpartyIdstring nullable

Counterparty ID for third-party recipient transfers

agentIdstring nullable

Agent whose key created or submitted this transfer. Null when the transfer was not made by an agent key.

agentApprovalStatus'PENDING' | 'APPROVED' | 'DECLINED'
flow'CRYPTO_TO_CRYPTO' | 'CRYPTO_TO_FIAT' | 'FIAT_TO_CRYPTO' | 'FIAT_TO_FIAT' | 'FIAT_TO_CRYPTO_TO_FIAT' | 'FX' | 'INTERNAL' | 'FEE_CRYPTO' | 'REFUND_CRYPTO' | 'REFUND_FIAT' required

Transfer flow type describing the asset conversion

status'DRAFT' | 'PENDING_AUTHORIZATION' | 'IN_REVIEW' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'CANCELLED' | 'REVERSED' required

Transfer status

quoteIdstring nullable

Quote ID if transfer was created from a quote

exchangeRatestring nullable

Exchange rate applied to the currency conversion, inclusive of all fees. Expressed on minor-unit amounts: destinationAmount = sourceAmount * exchangeRate. Populated for FX trades.

referenceRatestring

Independent reference rate used to price this transfer, expressed as destination major units per source major unit. Present for benchmark-priced FX transfers.

referenceRateAsOfstring

Timestamp of the independent reference rate used to price this transfer (ISO 8601).

referenceProvider'XE'

Independent market that published referenceRate. Present when referenceRate is present.

developerFeeFixedstring nullable

Fixed developer fee in minor units of source currency. Prefer the developerFee object, which also carries the collected amount and payout hash.

developerFeePercentnumber nullable

Variable developer fee as decimal percentage (e.g., 0.005 = 0.5%). Prefer the developerFee object, which also carries the collected amount and payout hash.

createdAtstring date-time required

Transfer creation date

updatedAtstring date-time required

Transfer last update date

returnedToAccountIdstring nullable

Account credited when a settled payout is returned. Null unless the return is attributed to one account on this transfer.

returnedAtstring date-time nullable

When the payout return was recorded. Account history uses this time for returned credits.

currentLegIndexnumber nullable

Index of the current active leg in the legs array (0-indexed). Null if all legs are done.

fundingNeededboolean required

Whether the transfer is waiting for the customer to send funds (deposit)

isThirdPartyboolean

Whether this is a third-party payment (destination account belongs to someone other than the customer)

remarksstring nullable

Free-form remarks or notes about the transfer

internalRemarksstring nullable

Internal remarks visible only within your organization. Never forwarded to payment rails or counterparties.

uetrstring nullable

SWIFT UETR (Universal End-to-End Transaction Reference)

imadstring nullable

Wire IMAD (Input Message Accountability Data)

omadstring nullable

Wire OMAD (Output Message Accountability Data)

achTraceNumberstring nullable

ACH trace number from the payment network

txHashstring nullable

Blockchain transaction hash

systemRemarkstring nullable

System-generated status note with important transfer context for the customer

metadataobject

Additional non-contractual transfer metadata for UI display

estimatedSettlementAtstring date-time nullable

Estimated time the recipient will receive funds. Best-effort projection — fiat rails account for bank cutoff times, weekends, and US Federal Reserve holidays; crypto conversions project from recently observed processing times for the route. Not a guarantee.

nextCutoffAtstring date-time nullable

Next time the customer can submit and still settle same business day. Past this time, transfers settle next business day.

cutoffTimezonestring nullable

IANA timezone for the cutoff time, e.g. "America/New_York".

Example response

{
  "id": "tfr_1234567890abcdef",
  "organizationId": "org_abc123",
  "clientReferenceId": "order_abc123",
  "sourceCustomerId": "cus_abc123",
  "counterpartyId": "cp_abc123",
  "agentId": "agt_abc123",
  "flow": "CRYPTO_TO_FIAT",
  "status": "COMPLETED",
  "source": {
    "currency": "usd",
    "fundingCurrency": "usdc",
    "paymentRail": "ACH",
    "direction": "CREDIT",
    "accountId": "vba_abc123",
    "accountType": "VIRTUAL_BANK",
    "externalAccountId": "ext_bank_456",
    "fromAddress": "0x1234567890abcdef1234567890abcdef12345678",
    "refundAccountId": "inw_abc123",
    "accountName": "Acme Corporation",
    "originator": {
      "name": "Acme Suppliers LLC",
      "bankName": "Example National Bank",
      "routingNumber": "021000021",
      "accountNumber": "987654321",
      "swiftBic": "CHASUS33",
      "bankCountry": "US",
      "paymentReference": "INV-2025-001"
    }
  },
  "destination": {
    "currency": "USDC",
    "paymentRail": "ETHEREUM",
    "accountId": "vwa_def456",
    "accountType": "EXTERNAL_BANK",
    "externalAccountId": "ext_bank_789",
    "toAddress": "0x1234567890abcdef1234567890abcdef12345678",
    "accountName": "Acme Corporation",
    "bankName": "JPMorgan Chase Bank",
    "bankCountryCode": "US",
    "wireMessage": "Payment for invoice INV-2026-001",
    "achReference": "ORDER123",
    "swiftReference": "Payment for invoice INV-2026-001",
    "rtpReference": "Payment for invoice INV-2026-001",
    "payoutReference": "INV2026"
  },
  "sourceAmount": {
    "currency": "USD",
    "exponent": 2,
    "value": "12345",
    "displayValue": "123.45"
  },
  "destinationAmount": {
    "currency": "USD",
    "exponent": 2,
    "value": "12345",
    "displayValue": "123.45"
  },
  "deliveredAmount": {
    "currency": "USD",
    "exponent": 2,
    "value": "12345",
    "displayValue": "123.45"
  },
  "providerFee": {
    "currency": "USD",
    "exponent": 2,
    "value": "12345",
    "displayValue": "123.45"
  },
  "refund": {
    "status": "COMPLETED",
    "reason": "Fees exceed deposit amount",
    "amount": {
      "currency": "USD",
      "exponent": 2,
      "value": "12345",
      "displayValue": "123.45"
    },
    "address": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
    "txHash": "0x1234567890abcdef..."
  },
  "quoteId": "quote_abc123",
  "exchangeRate": "0.99985",
  "referenceRate": "1.158691536019208779",
  "referenceRateAsOf": "2026-09-02T18:30:04.000Z",
  "referenceProvider": "XE",
  "developerFeeFixed": "100",
  "developerFeePercent": 0.005,
  "developerFee": {
    "amount": {
      "currency": "USD",
      "exponent": 2,
      "value": "12345",
      "displayValue": "123.45"
    },
    "fixed": "100",
    "percent": 0.005,
    "txHash": "0x1234567890abcdef..."
  },
  "depositInstructions": {
    "type": "crypto",
    "paymentRail": "ETHEREUM",
    "toAddress": "0x1234567890abcdef1234567890abcdef12345678",
    "amount": {
      "currency": "USD",
      "exponent": 2,
      "value": "12345",
      "displayValue": "123.45"
    },
    "accountId": "acc_abc123"
  },
  "createdAt": "2026-09-15T10:00:00.000Z",
  "updatedAt": "2026-09-15T10:00:00.000Z",
  "returnedToAccountId": "acc_123",
  "returnedAt": "2026-09-15T10:00:00.000Z",
  "legs": [
    {
      "id": "tleg_abc123",
      "type": "DEPOSIT_CRYPTO",
      "inputCurrency": "USDC",
      "outputCurrency": "USD",
      "inputRail": "ETHEREUM",
      "outputRail": "ACH",
      "status": "PENDING",
      "uetr": "9b6f37f2-21f0-4b2b-b03c-1893364782ce",
      "imad": "20260309EREBBANK000002",
      "omad": "20260309MMQFMP0B012345",
      "achTraceNumber": "021000021234567",
      "txHash": "0x1234567890abcdef...",
      "developerFee": {
        "currency": "USD",
        "exponent": 2,
        "value": "12345",
        "displayValue": "123.45"
      },
      "feeTxHash": "0x1234567890abcdef..."
    }
  ],
  "remarks": "Partial payment - remaining balance to be paid next month",
  "uetr": "9b6f37f2-21f0-4b2b-b03c-1893364782ce",
  "imad": "20260309EREBBANK000002",
  "omad": "20260309MMQFMP0B012345",
  "achTraceNumber": "021000021234567",
  "wireTracking": {
    "uetr": "9b6f37f2-21f0-4b2b-b03c-1893364782ce",
    "imad": "20260309EREBBANK000002",
    "omad": "20260309MMQFMP0B012345",
    "achTraceNumber": "021000021234567"
  },
  "statusDetail": {
    "reason": "The transfer could not be completed.",
    "code": "INSUFFICIENT_FUNDS"
  },
  "originatingAccount": {
    "routingNumber": "044016018",
    "accountNumber": "37216498313366"
  },
  "txHash": "0x1234567890abcdef...",
  "systemRemark": "Tracking is unavailable for this SWIFT transfer. We will auto-complete it after 24 hours and mark it with an asterisk because settlement is assumed rather than confirmed.",
  "metadata": {
    "swiftRouting": {
      "source": "GPI_ROUTE",
      "senderBic": "CHASUS33",
      "receiverBic": "CLRBGB22",
      "checkedAt": "2026-05-10T16:34:42.597Z",
      "steps": [
        {
          "label": "Sender bank",
          "bic": "CHASUS33",
          "bankName": "JP Morgan Chase",
          "status": "Confirmed Active"
        }
      ]
    }
  },
  "estimatedSettlementAt": "2026-05-26T13:00:00.000Z",
  "nextCutoffAt": "2026-05-19T19:00:00.000Z",
  "cutoffTimezone": "America/New_York",
  "counterparty": {
    "id": "cp_abc123",
    "name": "Jane Doe",
    "beneficiaryType": "INDIVIDUAL",
    "address": {
      "addressLine1": "123 Main Street",
      "addressLine2": "Apt 4B",
      "city": "San Francisco",
      "state": "CA",
      "postalCode": "94102",
      "country": "US",
      "transliterated": {
        "addressLine1": "123 Main Street",
        "addressLine2": "Apt 4B",
        "city": "Beijing",
        "state": "Hebei"
      }
    }
  }
}

Changes

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status