After a customer is authenticated and KYC-approved, create the customer account, issue a card, and fund the account. The card issuing product is delivered as a whitelabel service, so the partner controls the user experience while xMoney handles account and card infrastructure.
List existing accounts:
curl "https://issuing-stage.xmoney.com/v1/accounts?currency=EUR" \
-H "Authorization: Bearer CUSTOMER_ACCESS_TOKEN"Create an account for the required card currency:
curl -X POST "https://issuing-stage.xmoney.com/v1/accounts" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer CUSTOMER_ACCESS_TOKEN" \
-d '{
"currency": "EUR"
}'Close an account only when it is no longer needed:
curl -X POST "https://issuing-stage.xmoney.com/v1/accounts/ACCOUNT_ID/close" \
-H "Authorization: Bearer CUSTOMER_ACCESS_TOKEN"Use the subscription card product assigned to your program.
curl -X POST "https://issuing-stage.xmoney.com/v1/cards" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer CUSTOMER_ACCESS_TOKEN" \
-d '{
"subscriptionCardId": "123e4567-e89b-12d3-a456-426614174000",
"isVirtual": true,
"currency": "EUR",
"label": "Main card"
}'For physical cards, include the required delivery fields and PIN.
List issued cards:
curl "https://issuing-stage.xmoney.com/v1/cards" \
-H "Authorization: Bearer CUSTOMER_ACCESS_TOKEN"Use these routes to manage card state:
POST /v1/cards/{id}/freezePOST /v1/cards/{id}/unfreezePOST /v1/cards/{id}/reissue/{reason}GET /v1/cards/{id}/secretsPOST /v1/cards/{id}/provisioning/apple-payGET /v1/cards/{id}/provisioning/google-pay
Retrieve sensitive card secrets only when needed, and never log or store PAN, CVV, PIN, or wallet provisioning secrets longer than required for the user action.
Create a fiat topup order:
curl -X POST "https://issuing-stage.xmoney.com/v1/topups/fiat" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer CUSTOMER_ACCESS_TOKEN" \
-d '{
"amount": "100.00",
"currency": "EUR"
}'The response is HTML for the hosted payment processor flow. Present or redirect the customer according to the returned form.
Use the crypto topup routes to list supported assets, check limits, quote rates and fees, then create the topup order.
curl "https://issuing-stage.xmoney.com/v1/topups/crypto/currencies" \
-H "Authorization: Bearer CUSTOMER_ACCESS_TOKEN"Check limits for a specific asset:
curl "https://issuing-stage.xmoney.com/v1/topups/crypto/limits?blockchain=multiversx&identifier=EGLD" \
-H "Authorization: Bearer CUSTOMER_ACCESS_TOKEN"Get an exchange-rate quote:
curl -X POST "https://issuing-stage.xmoney.com/v1/topups/crypto/exchange-rate" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer CUSTOMER_ACCESS_TOKEN" \
-d '{
"fiatCurrency": "EUR",
"cryptoCurrency": "EGLD",
"amount": 10,
"inputType": "fiat",
"blockchain": "multiversx",
"senderAddress": "erd1exampleaddress"
}'Create the topup order with the same quote input shape:
curl -X POST "https://issuing-stage.xmoney.com/v1/topups/crypto" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer CUSTOMER_ACCESS_TOKEN" \
-d '{
"fiatCurrency": "EUR",
"cryptoCurrency": "EGLD",
"amount": 10,
"inputType": "fiat",
"blockchain": "multiversx",
"senderAddress": "erd1exampleaddress"
}'Track topups with:
GET /v1/topups?page=1&size=20GET /v1/topups/{id}GET /v1/topups/limitsGET /v1/topups/usage
GET /v1/topups can also filter by type and status.