Make your first payout
This quickstart sends USD from a partner-owned Axiym account and delivers PHP to a business bank account in the Philippines on behalf of a client. The client is represented by the complete sender, receiver, and transaction payload.
Prerequisites
- Sandbox OAuth credentials with the
PAYMENTscope. - An allowlisted public egress address.
- A funded active USD Axiym account.
- An available
USD → PH / PHP / BANKcorridor. - Complete sender, receiver, transaction, and supporting-document test data.
The account must already contain the required balance. Account funding takes place outside this quickstart and outside the Payment API.
Set the sandbox base URL:
export AXIYM_BASE_URL="https://partner-api.sandbox.axiym.io/api/v1"1. Request an access token
curl --request POST "$AXIYM_BASE_URL/oauth/token" \
--header "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "client_id=$AXIYM_CLIENT_ID" \
--data-urlencode "client_secret=$AXIYM_CLIENT_SECRET" \
--data-urlencode "grant_type=client_credentials" \
--data-urlencode "scope=PAYMENT"2. Find the funding account
curl "$AXIYM_BASE_URL/accounts?currency=USD&status=ACTIVE" \
--header "Authorization: Bearer $AXIYM_ACCESS_TOKEN"Store the returned accountId.
3. Retrieve corridor requirements
curl "$AXIYM_BASE_URL/corridors/details?sellCurrency=USD&destinationCountry=PH&buyCurrency=PHP&payoutMethod=BANK" \
--header "Authorization: Bearer $AXIYM_ACCESS_TOKEN"Confirm availability is AVAILABLE, the amount is within the returned
limits, and your payout data meets every corridor-specific requirement.
4. Test the payout data
Before requesting a quote, validate representative data against the same destination context:
curl --request POST "$AXIYM_BASE_URL/payouts/tests" \
--header "Authorization: Bearer $AXIYM_ACCESS_TOKEN" \
--header "Content-Type: application/json" \
--data @payout-test.jsonConfirm valid is true. Review normalizedData, every entry in
normalizations, and any warnings. Add partyDataMapId to the test when your
sender and receiver use a stored custom structure.
Payout Test creates no quote or payout and does not check the amount, rate, or funding balance. See Prepare and test payout data.
5. Request a quote
curl --request POST "$AXIYM_BASE_URL/quotes" \
--header "Authorization: Bearer $AXIYM_ACCESS_TOKEN" \
--header "Content-Type: application/json" \
--header "Idempotency-Key: quote-payout-2026-001" \
--data '{
"accountId": "d96b90c1-b69e-4f5d-8154-46ecfcad8d0a",
"buyCurrency": "PHP",
"destinationCountry": "PH",
"payoutMethod": "BANK",
"amount": "56500.00",
"amountBasis": "buy"
}'Store quoteId and make sure the prepared payout is confirmed before
expiresAt.
6. Create the payout
curl --request POST "$AXIYM_BASE_URL/payouts" \
--header "Authorization: Bearer $AXIYM_ACCESS_TOKEN" \
--header "Content-Type: application/json" \
--header "Idempotency-Key: payout-2026-001" \
--data @payout.jsonThe complete payout.json shape is documented in
Create and confirm a payout.
Store the returned payoutId and confirmationExpiresAt. Verify the returned
financial terms and final normalized paymentData. The payout has status
PENDING_CONFIRMATION; processing has not started and no funds have moved.
7. Confirm the payout
curl --request POST "$AXIYM_BASE_URL/payouts/$PAYOUT_ID/confirm" \
--header "Authorization: Bearer $AXIYM_ACCESS_TOKEN" \
--header "Idempotency-Key: confirm-payout-2026-001"Confirm before confirmationExpiresAt. Store the returned status and
confirmedAt. An accepted confirmation reserves totalPayable in the funding
account and starts processing. It does not mean the receiver has been paid.
8. Track the payout
curl "$AXIYM_BASE_URL/payouts/$PAYOUT_ID" \
--header "Authorization: Bearer $AXIYM_ACCESS_TOKEN"Continue until the payout reaches a terminal outcome. In a full integration, use signed webhooks for timely updates and polling for authoritative current state.
Success criteria
- The payout references the expected quote and
clientReference. - Sell and buy amounts match the quote.
- The reviewed normalized
paymentDatamatches the intended instruction. - Confirmation reserves the expected
totalPayable. - Webhook events are verified and de-duplicated.
- The terminal payout outcome is stored.
- The account statement contains the corresponding settlement movement.