Skip to content

Stablecoin to Fiat

This guide walks you through how to initiate a stablecoin-to-fiat wire using FSCO. These transfers are typically used to off-ramp users from blockchain-based stablecoins into traditional bank accounts.

This flow typically completes in minutes to hours depending on network confirmation and fiat payout speed.

  • You must have a verified FSCO wallet (walletId) with sufficient stablecoin balance.
  • Your organisation must be KYC/AML-approved with supported off-ramp providers.
  • You must have a connected account set up to receive fiat.
  • Your API key must include wire:write and wallet:read permissions.
create-wire.sh
curl -X POST https://api.fsco.io/v2/wires \
-H "Authorization: Bearer $FSCO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sourceType": "stablecoin",
"sourceCurrency": "PHPX",
"sourceAmount": "10000",
"sourceDetails": {
"walletId": "123e4567-e89b-12d3-a456-426614174000"
},
"destinationType": "fiat",
"destinationCurrency": "PHP",
"destinationDetails": {
"connectedAccountId": "acc_abc123"
}
}'

Response:

response.json
{
"id": "e5d12f10-9c3a-4b2b-a987-55ff9d982b3a",
"status": "pending",
"type": "off-ramp",
"sourceType": "stablecoin",
"sourceCurrency": "PHPX",
"sourceAmount": "10000",
"sourceDetails": {
"walletId": "123e4567-e89b-12d3-a456-426614174000"
},
"destinationType": "fiat",
"destinationCurrency": "PHP",
"destinationAmount": null,
"destinationDetails": {
"connectedAccountId": "acc_abc123"
},
"createdAt": "2025-05-05T12:34:56.000Z",
"updatedAt": null,
"completedAt": null,
"txHashes": [],
"externalReferences": {
"transferRequestId": "REQ-987654321"
},
"reference": null,
"notes": null
}

This creates the wire. The user must now approve a stablecoin transfer from their wallet to FSCO.

Once the stablecoins are received, FSCO will initiate the fiat payout.

2. Wait for Transfer and Provider Notification

Section titled “2. Wait for Transfer and Provider Notification”

After the user authorises the stablecoin transfer:

  • FSCO receives the stablecoins into its smart contract or custody wallet.
  • FSCO matches the transfer to the correct wire.
  • The stablecoins are converted to the destination fiat currency.
  • FSCO initiates the fiat transfer to the connected account.
  • The wire status is updated and a wire.completed webhook is emitted (if configured).

To check the wire status at any time:

create-wire.sh
curl -X GET https://api.fsco.io/v2/wires/<wireId> \
-H "Authorization: Bearer $FSCO_API_KEY"

Response:

response.json
{
"id": "e5d12f10-9c3a-4b2b-a987-55ff9d982b3a",
"status": "pending",
"type": "off-ramp",
"sourceType": "stablecoin",
"sourceCurrency": "PHPX",
"sourceAmount": "10000",
"sourceDetails": {
"walletId": "123e4567-e89b-12d3-a456-426614174000"
},
"destinationType": "fiat",
"destinationCurrency": "PHP",
"destinationAmount": null,
"destinationDetails": {
"connectedAccountId": "acc_abc123"
},
"createdAt": "2025-05-05T12:34:56.000Z",
"updatedAt": null,
"completedAt": null,
"txHashes": [],
"externalReferences": {
"transferRequestId": "REQ-987654321"
},
"reference": null,
"notes": null
}

The status will reflect the current state (e.g. processing, completed, failed).

Once confirmed and processed, the funds will arrive in the connected account.

  • The wire is marked as completed.
  • A wire.completed webhook is triggered with full transaction details.
  • The user receives fiat in their connected bank account or payout method.
  • Use the wireId returned from creation to fetch status, generate receipts, or view history.
  • Stablecoin transfers must be approved and submitted from a compatible wallet.
  • Connected accounts must be verified and support the selected fiat currency.
  • Use webhooks for real-time updates, or poll the status endpoint if needed.