Wirex BaaS Money Transfers
This skill covers all money transfer capabilities in the Wirex Banking-as-a-Service platform: SEPA transfers (EUR), ACH transfers (USD), Push-to-Card via Visa/Mastercard OCT rails, and recipient management.
Core Pattern: Estimate then Execute
All transfer types in Wirex BaaS follow the estimate-then-execute pattern:
- Estimate: Submit transfer details to get a cost estimate. The response includes an
id(estimation ID) andexpires_attimestamp. - Execute: Submit the transfer using the
estimation_idfrom step 1 (or specify theamountdirectly). The estimation locks in exchange rates and fees.
This two-step process ensures the user sees exact costs before committing to the transfer.
SEPA Transfers (EUR)
SEPA (Single Euro Payments Area) enables EUR bank transfers across 28 European countries.
Prerequisites
- Account must have the SepaAccount capability enabled.
- For third-party transfers: SepaOut3rdParty capability.
- For first-party transfers: SepaOut1stParty capability.
Flow
- Check capability: Verify the account has
SepaAccount(statusActive) in its capabilities list. SEPA bank accounts are auto-provisioned upon user verification — no activation call needed. - Retrieve bank details: Get the IBAN and BIC for the account.
GET /api/v1/bank/accounts - Estimate transfer: Calculate fees and exchange rates.
POST /api/v2/bank/transfer/estimate - Execute transfer: Send the payment.
POST /api/v1/bank/transfer
See references/BANKING.md for full request/response formats.
ACH Transfers (USD)
WARNING: ACH recipients require a
legal_addressfield; SEPA does not.
ACH (Automated Clearing House) enables USD bank transfers across 34+ countries.
Prerequisites
- Account must have the AchAccount capability enabled.
- For third-party transfers: AchOut3rdParty capability.
- For first-party transfers: AchOut1stParty capability.
Flow
- Check capability: Verify the account has
AchAccountin its capabilities list. - Activate ACH bank details: Create ACH bank account credentials for the user.
POST /api/v1/bank/accounts Body: { "account_type": "Ach" } - Retrieve bank details: Get the account number and routing number.
GET /api/v1/bank/accounts - Estimate transfer: Calculate fees and exchange rates.
POST /api/v2/bank/transfer/estimate - Execute transfer: Send the payment.
POST /api/v1/bank/transfer
See references/BANKING.md for full request/response formats.
Push-to-Card Transfers
Push-to-Card allows sending funds directly to a Visa or Mastercard debit card via OCT (Original Credit Transaction) rails.
Prerequisites
- Account must have the CardTransfer capability enabled.
Flow
- Tokenize card: Submit the card details to the PCI-compliant endpoint to receive a token. Requires user-scoped token (not S2S).
ThePOST {pci_url}/b2b/cards/oct?user_id={user_id} Body: { card_number, cardholder_name, card_label, is_saved, is_third_party }user_idis obtained fromGET /api/v2/userresponse. - Create recipient: Register the card as a recipient.
POST /api/v2/recipients Body: { type: "Card", card: { card_id: token, card_pan_last } } - Estimate transfer: Calculate fees and amounts.
POST /api/v1/cards/transfer/estimate - Execute transfer: Send the payment.
POST /api/v1/cards/transfer
Card validations: Luhn check, Visa/Mastercard only, expiration date verification.
See references/PUSH-TO-CARD.md for full details including PCI environment URLs.
Recipients
Wirex BaaS supports 6 recipient types for outgoing transfers:
| Type | Use Case | Key Fields |
|---|---|---|
| Card | Push-to-Card transfers | card_id (token), card_pan_last |
| Sepa | SEPA EUR bank transfers | iban, bic |
| Ach | ACH USD bank transfers | routing_number, account_number, legal_address |
| Crypto | Crypto withdrawals | address, network |
| FasterPayment | UK Faster Payments (GBP) | account_number, sort_code |
| Swift | International wire transfers | iban, bic, legal_address |
Recipient CRUD Operations
| Operation | Endpoint |
|---|---|
| List all recipients | GET /api/v1/recipients |
| Get by ID | GET /api/v1/recipients/{recipient_id} |
| Filter by type | GET /api/v1/recipients/filter/type?type=Card |
| Create recipient | POST /api/v2/recipients |
| Update personal info | PUT /api/v1/recipients/{recipient_id} |
| Delete recipient | DELETE /api/v1/recipients/{recipient_id} |
See references/RECIPIENTS.md for full CRUD reference with all fields and payment type details.
Activity Steps
All transfers progress through a series of activity steps. The exact steps vary by transfer type.
SEPA/ACH: Initiated → CryptoOut → Review → BankOut → Completed
Push-to-Card: Initiated → CryptoOut → Review → CardOut → Completed
Step Descriptions
| Step | Description |
|---|---|
| Initiated | Transfer request received and validated |
| CryptoOut | WUSD/WEUR burned from the user's wallet |
| Review | Compliance and risk checks in progress |
| BankOut | Funds sent via SEPA/ACH to recipient bank |
| CardOut | Funds sent via OCT to recipient card |
| Completed | Transfer successfully delivered |
A transfer can also reach Failed or Cancelled status at any step.
Required Capabilities Summary
| Transfer Type | Required Capabilities |
|---|---|
| SEPA account setup | SepaAccount |
| SEPA 1st-party send | SepaOut1stParty |
| SEPA 3rd-party send | SepaOut3rdParty |
| ACH account setup | AchAccount |
| ACH 1st-party send | AchOut1stParty |
| ACH 3rd-party send | AchOut3rdParty |
| Push-to-Card | CardTransfer |
Webhooks
Transfer activity is reported via webhooks:
| Webhook Endpoint | Purpose |
|---|---|
| /v2/webhooks/activities | Transfer activity step updates |
| /v2/webhooks/recipients | Recipient creation/update events |
See individual reference files for webhook payload examples.