Skip to main content

Overview

The Transfers API moves an asset from one PWS account to another account in the authenticated caller’s program. The source and destination must be distinct accounts. The accounts may belong to the same user or to different users, but both must be in the authenticated caller’s program. Only account-to-account transfers are supported. Email, username-tag, and other recipient types are not supported.

Prerequisites

  • Payward Services API credentials (see the Authentication guide)
  • A source account with a sufficient available balance
  • A destination account in the same program

Create a transfer

Send POST /v1/transfers with the source account, destination account, asset symbol, and decimal amount.

Make retries idempotent

Generate one UUIDv4 for each intended transfer. Reuse that same key only when retrying the identical request.
  • The same key and request prevent a second transfer execution. The retry returns the transfer’s current recorded outcome.
  • The same key with different, otherwise valid transfer parameters returns 409 Conflict with code idempotency_conflict.
  • A keyed retry does not replay the original HTTP status and body. The response does not include Idempotent-Replayed.
  • A request rejected before it is recorded may leave the key available for another request.
  • A recorded key remains reserved beyond 24 hours. Never reuse it for a new transfer.
If you omit Idempotency-Key, transfer creation is not idempotent. Do not automatically retry a timeout or another unknown outcome. Reconcile the source account through Portfolio or contact Payward Services support first.

Response

A successful request returns HTTP 201:
transfer_id is an opaque originating reference. It is distinct from the Portfolio transaction ID.

Reconcile through Portfolio

Transfer creation and Portfolio visibility are asynchronous. A create response with status: complete does not guarantee that the Portfolio transaction is visible yet. Poll GET /v1/accounts/{account_id}/portfolio/transactions using:
  • the request’s from account as account_id
  • types=transfer
  • a time range that includes the create request
  • no statuses filter, or a filter that includes in_progress
Portfolio transactions are account-relative. The from account response contains spend, while the to account response contains receive. The example below queries the from account, so it shows only spend. When the transaction appears, its reference links it to the create response:
Use the reference for deterministic later lookups:
Reference entries use OR semantics with each other. They combine with types and other filters using AND semantics. Keep these identifiers distinct:

Error handling