Swap money between two wallets owned by your business. The wallets must exist, belong to the same business, and use different currencies. This endpoint is available only when your business is allowed to perform API-services swaps. Required scope: swap:create.
Authorization
oauth2ClientCredentials swap:createUse your OAuth client credentials to obtain a short-lived Bearer token from POST /oauth/token.
In: header
Scope: swap:create
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
curl --request POST \ --url 'https://example.com/api/external/swap' \ --header 'Content-Type: application/json' \ --data '{ "from_business_wallet_id": "1bc6b6f9-f795-4b78-b8cb-5f4de267c301", "to_business_wallet_id": "8fbf7dc8-2082-4486-8ef0-44d5bb758a8c", "amount": 100, "amount_type": "from"}'{ "message": "Money swap successful!", "business_swap_transaction": { "id": "d275cd12-e679-43ee-90ce-c8df363624f8", "business_id": "business_123", "business_user_id": "business_user_123", "business_transaction_id": "txn_123456789", "from_business_wallet_id": "1bc6b6f9-f795-4b78-b8cb-5f4de267c301", "from_currency": "USD", "from_currency_id": 2, "from_amount": 100, "from_amount_minus_fees": 99, "to_currency": "NGN", "to_currency_id": 1, "to_amount": 160000, "from_exchange_rate": 1600, "custom_exchange_rate": null, "to_business_wallet_id": "8fbf7dc8-2082-4486-8ef0-44d5bb758a8c", "reference": "swap_ref_001", "comments": null, "status": "SUCCESSFUL", "amount_type": "from", "created_at": "2026-03-13T09:15:00.000000Z", "updated_at": "2026-03-13T09:15:00.000000Z" }}GETGet a refund
Retrieve a refund by its refund ID. Only refunds of collections that you created through the API are returned. Required scope: `refund:read`.
POSTRequest file upload URL
**Individual customers only.** Request a pre-signed URL to upload a legacy 4-slot KYC file for an individual customer. **For `type=business` customers, do not use this endpoint.** Use the dedicated KYB upload endpoints — `POST /api/external/customer/{customer}/owner/{owner}/file/presigned-url` for owner ID files and `POST /api/external/customer/{customer}/document/presigned-url` for KYB documents. See the [Business customer KYB guide](/docs/guides/kyb/overview). Upload process: 1. Make a PUT request to the `upload_url`. 2. Include the headers from the response. 3. Send the file as binary data in the request body. 4. Once uploaded, use the `file_id` to attach the file to the customer record via `POST /api/external/customer/{id}/files`. IMPORTANT — Accepted identity documents: Only a Driver's License, Passport, or Resident Permit is accepted. ID cards (National Identity Cards) are NOT accepted. IMPORTANT — Document quality: All uploaded documents must be clear, legible, and authentic. Blurry, cropped, obscured, or unclear images will not be reviewed and will be rejected. Fraudulent or falsified documents will not be tolerated — repeated attempts will result in the customer being permanently blacklisted from the platform. There are no exceptions or compromises. Required scope: `file:upload`.