Skip to main content

POST /v1/tokens/{tokenId}/transfers

Move supply of a deployed QRC token between participants. The endpoint resolves recipients and senders, applies token-specific compliance checks (allowlist, frozen-account checks, paused-state checks), and routes the transaction through the standard approval and signing flow.
AspectDetail
MethodPOST
Path/v1/tokens/{tokenId}/transfers
AuthenticationBearer API key
Required permissionstokens:transfer
IdempotencyIdempotency-Key header required
Approval policySubject to vault and token-level policy
Blockchain effectContract call to transfer(address,uint256) (or template-equivalent)
Webhook eventstransaction.created, transaction.status_changed, transaction.completed, transaction.failed

Request body

{
  "from": { "type": "vaultAccountId", "vaultAccountId": "vault_123" },
  "to": { "type": "address", "address": "0x9a8e5e21f0c27d2c5c14b6e9bd8e4a0f9c9b4d12" },
  "amount": "100000000000000000000",
  "feeStrategy": "MEDIUM",
  "idempotencyKey": "transfer-2026-04-27-001"
}

Response (202)

{
  "operationId": "op_transfer_789",
  "tokenId": "token_abc123",
  "operationType": "TRANSFER",
  "status": "PENDING_AUTHORIZATION",
  "amount": "100000000000000000000",
  "transactionRequestId": "txreq_004",
  "createdAt": "2026-04-27T10:11:00Z"
}

Errors

CodeTypeMeaning
1703TOKEN_NOT_DEPLOYEDToken has no on-chain contractAddress.
1712TOKEN_INVALID_RECIPIENTRecipient resolution failed.
1713TOKEN_INVALID_AMOUNTAmount is zero or exceeds the sender’s balance.
1714TOKEN_COMPLIANCE_RESTRICTION_FAILEDAllowlist, freeze, or pause check rejected the transfer.
1200POLICY_DENIEDApproval policy denied the transfer.
1201APPROVAL_REQUIREDApproval is required and was not yet granted.
1601IDEMPOTENCY_CONFLICTSame Idempotency-Key reused with different body.

Retry safety

Retries with the same Idempotency-Key are safe and return the original operation.