Download OpenAPI specification:Download
Mercuryo Spend Card API is a solution which allows to issue a Mercuryo virtual payment card for end-user. Once the Spend card is issued, it can be used when selling crypto for fiat money and withdrawing funds, as well as in POS and e-commerce transactions.
Before using the Sandbox environment, prepare these:
The Sandbox environment works with the following networks:
| Testnet | Address | Supported Cryptocurrency |
|---|---|---|
| BTC Testnet | msBE6aCaAesegu4VzbQW3L5xWBL8vi15Q7 |
Bitcoin |
| ETH Sepolia | 0xbBC8f6B710359dbcdF02f9eb50Ade391890A6021 |
Ethereum (ETH) and USDT |
Contact your integration manager. You will get the Sdk-Partner-Token to sign up user registration and authorization endpoints to access API.
All the requests must contain:
application/jsonapplication/jsonSandbox URL
https://sandbox-api.mrcr.io.For the purpose of authentication and authorization each submitted request must contain one of two tokens:
Sdk-Partner-Token - a token issued for a merchant and used when end-user is not yet authenticated (for sign-in requests).
Sdk-User-Token - a token received as a result of sign-in process and used for all user-specific requrests.
The Sdk-User-Token expires in 24 hours for the Production environment. You can authorize the user again or refresh the token after that. The Sdk-User-Token doesn’t expire in the Sandbox environment.
Spend Cards API endpoints accept the B2B-User-Ip header, and it is mandatory when Sdk-User-Token is used for authorization. It must contain the real IP address of end-user.
For authentication of new and existing users, the same API and authorization processes are used. In case when a user with specified email does not exist yet, their account will be created. Thus, here and below only sign-in process is described.
The user must accept the Terms of Service before signing up. You have to ask the user to agree to the Terms of Service on your front end. You will send user’s consent in the accept parameter of POST /sdk-partner/user/sign-in-no-verify or POST /sdk-partner/user/sign-in.
For Sign-In request, Sdk-Partner-Token header must be included. Mercuryo uses the header to identify the merchant/user context.
There are two scenarios for user sign-in. For both of them, user's email is used as an identifier. Please check with your integration manager which scenario you can use.
This scenario assumes that a merchant validates user's email and identity, and no additional authentication is required to access Spend Card API.
Sdk-Partner-Token, which is required for the following authentication endpoints.POST /sdk-partner/user/sign-in-no-verify to sign-in a user without OTP email verification.GET /sdk-partner/user/refresh-token to refresh the Sdk-User-Token, if needed.After user's successful authentication, 1) KYC verification and then 2) phone number specifying are required.
In the following scenario, a user must enter OTP submitted to their email.
The user must accept the Terms of Service before signing up. You have to ask the user to agree to the Terms of Service on your front end. You will send user’s consent in the accept parameter of POST /sdk-partner/user/sign-in.
Sdk-Partner-Token, which is required for the following authentication endpoints.POST /sdk-partner/user/sign-in to start authentication process, providing user's email. As the result, OTP will be sent to the user in case of success.POST /sdk-partner/user/sign-in/verify to submit OTP, entered by the user.POST /sdk-partner/user/sign-in/verify/resend.GET /sdk-partner/user/refresh-token to refresh the Sdk-User-Token, if needed.After user's successful authentication, 1) KYC verification and then 2) phone number specifying are required.
POST /sdk-partner/user/sign-out to sign-out a user.Sdk-User-Token is deactivated. After signing out, authorization does not work with the same Sdk-User-Token.
Know Your Customer (KYC) procedures are indispensable for financial institutions to verify their clients and keep business on the safe side.
KYC procedures help Mercuryo fight financial crime. Therefore, it prevents mixing your users’ funds with illegal funds of bad actors and perpetrators of any sort. Identity verification is a legal obligation to be compliant with AML/CFT laws. Mercuryo is strongly committed to the highest industry standards of clients' security, which requires protecting the integrity of the entire financial system.
SumSub is the major KYC procedure provider of Mercuryo.
Note: Please be aware that there must be only one email address per user. That is, if the existing user (who is already registered and passed the KYC procedure with one email address) registers with another email address and provides the same documents to pass the KYC procedure, this user will receive the KYC refusal under the new email. Thus, email address used in user registration must be wisely chosen.
The list of required documents depends on the end-user's country of citizenship.
These documents can be acceptable identity verification:
The document must have:
Meet these requirements:
We do not accept bank statements from neobanks.
These documents can be acceptable proof of address:
The document must have:
Meet these requirements:
There are two options of how KYC procedure can be implemented:
Contact your integration manager if you have any questions regarding KYC procedures.
This KYC integration option is used to let a user upload documents for verification to SumSub directly.
If you don’t implement any KYC procedures, we provide the SumSub interface to do KYC verification directly in Mercuryo.
URL example: https://sandbox-payments.mrcr.io/kyc?access_token=your_token&success_url=url&failure_url=url&scheme=your_scheme&lang=lang_code.
| Parameter | Description | Type |
|---|---|---|
| access_token | Get the access token using GET /sdk-partner/kyc/access-token. |
Required |
| success_url | URL-encoded JSON. Example: https://mercuryo.success.com. | Required |
| failure_url | URL-encoded JSON. Example: https://mercuryo.failure.com. | Required |
| scheme | Light or Dark appearance. | Optional |
| lang | The language is English by default. Supported languages: English, Chinese, Russian, French, Hindi, Indonesian, Japanese, Korean, Portuguese, Spanish, Turkish, Vietnamese. | Optional |
If redirect parameters are missing, the user won’t be redirected. status and msg parameters will be appended to failure_url.
status: back - if user clicks the back button.
status: fail - if you get an error.
GET /sdk-partner/user/kyc-status to get the KYC status. We can identify a user whom you registered by the email if we already have it:features, the necessary feature is complete, then that’s it.GET /sdk-partner/kyc/access-token to get the KYC access token.Production environment URL example: https://payments.mercuryo.io/kyc?access_token=your_token8&success_url=url&failure_url=url&scheme=your_scheme&lang=lang_code.Sandbox environment URL example: https://sandbox-payments.mrcr.io/kyc?access_token=your_token&success_url=url&failure_url=url&scheme=your_scheme&lang=lang_code.Sandbox, upload the documents and contact Mercuryo to approve the documents.Sandbox mode, you don't want to wait for us to manually confirm the KYC review, use the test documents for which automatic processing is set up on the SumSub's side: Verification Document Templates.GET /sdk-partner/user/kyc-status to get the status for the necessary feature.complete: KYC procedures are successfully complete.incomplete: not enough documents have been provided; SumSub hasn’t started the verification.failed_attempt: the first attempt to pass the verification failed. Try again.failed: the verification failed; the user isn’t allowed to open a Spend card. Contact Mercuryo Support.under_review: SumSub is verifying the documents. Appears only after the user has finished uploading and submitting all required documents and the verification process has started on SumSub’s side.incomplete or failed_attempt, re-take KYC. GET /sdk-partner/kyc/access-token to get the KYC access token.Production environment URL example: https://payments.mercuryo.io/kyc?access_token=your_token8&success_url=url&failure_url=url&scheme=your_scheme&lang=lang_code.Sandbox environment URL example: https://sandbox-payments.mrcr.io/kyc?access_token=your_token&success_url=url&failure_url=url&scheme=your_scheme&lang=lang_code.Sandbox, upload the documents and contact Mercuryo to approve the documents.Sandbox mode, you don't want to wait for us to manually confirm the KYC review, use the test documents for which automatic processing is set up on the SumSub's side: Verification Document Templates.GET /sdk-partner/kyc/access-token endpoint) so they can re-upload their document. However, this is optional — card support is not suspended when documents expire. The document just needs to be valid at the time it was originally submitted.This scenario assumes that a merchant validates user's phone number, and no additional validation is required.
POST /sdk-partner/user/set-phone-no-verify to submit user's phone number.Opening a Spend card with an empty balance.
The end-user must 1) be signed in, 2) successfully complete KYC procedures (valid KYC), 3) have a mobile phone number specified, and 4) complete the SPEND_EEA questionnaire.
If something is not verified, you need to restart the authorization flow, or use GET /sdk-partner/user/contacts to check whether a user has a phone set. If needed, use GET /sdk-partner/user/kyc-status to check user’s verification. Please note that these endpoints are needed only if you want to check everything in advance before the transaction. You can try to open a card without doing these checks and focus on errors in the response of the POST /sdk-partner/spend/cards/open endpoint.
There can be only one Spend card per end-user (within all partners or within one partner depending on the pricing model).
Currently, only EUR can be used as currency.
POST /sdk-partner/questionnaire/spend-eea to submit the SPEND_EEA questionnaire before opening the Spend card. This questionnaire collects information about the user's employment status, income, source of funds and intended card usage for compliance purposes. card feature. If not, the endpoint will return error 400251 with next: "verify-kyc". OTHER option require additional other_* fields to be filled. POST /sdk-partner/spend/cards/open to open a Spend card with an empty balance. card_id parameter. 403106 will be returned. The user must complete the questionnaire first using POST /sdk-partner/questionnaire/spend-eea.GET /sdk-partner/spend/cards/status to check the status of card. Mercuryo initially issues the card with a new status. Once the user has been verified by the vendor, a callback is triggered to update the card’s status to active. It’s important to distinguish between KYC verification and vendor verification: after a user completes KYC, we send their documents to the vendor for verification, but the vendor may still reject them.GET /sdk-partner/spend/cards/transactions to get the list of card transactions.GET /sdk-partner/spend/cards/balance to get card balance.POST /sdk-partner/spend/cards/iframe/init and display response of that URL in an iFrame.Once the Mercuryo Spend card is issued, it can be used when selling crypto for fiat money and withdrawing funds, as well as in POS and e-commerce transactions.
Opening a Spend card with instant topup by selling crypto for fiat money.
Note: This scenario is currently unavailable.
The end-user must 1) be signed in, 2) successfully complete KYC procedures (valid KYC), and 3) have a mobile phone number specified.
If something is not verified, you need to restart the authorization flow, or use GET /sdk-partner/user/contacts to check whether a user has a phone set. If needed, use GET /sdk-partner/user/kyc-status to check user’s verification. Please note that these endpoints are needed only if you want to check everything in advance before the transaction. You can try to open a card without doing these checks and focus on errors in the response of the POST /sdk-partner/spend/cards/open-off-ramp endpoint.
There can be only one Spend card per end-user (within all partners or within one partner depending on the pricing model).
Currently, only EUR can be used as currency.
If needed, you can check user limits before the transaction. Mercuryo won’t complete the transaction when beyond the limit. Use GET /sdk-partner/user/limits/spend, if you want to get limit details separately.
GET /sdk-partner/spend/cards/rates/open to get rates.trx_token.trx_token expires in one hour.POST /sdk-partner/spend/cards/open-off-ramp to start a transaction so that the user can confirm it and perform transfer in order to open a Spend card with instant topup.new status after receiving crypto. Moments later, a callback will update the card’s status to active.GET /sdk-partner/spend/cards/sell-request/{id}/status to check the status of created sell request. failed_reason field indicating the reason for failure (e.g., spend_cards_limits_error when the card has reached its top-up limit).GET /sdk-partner/spend/cards/status to check the status of card.GET /sdk-partner/spend/cards/transactions to get the list of card transactions.GET /sdk-partner/spend/cards/balance to get card balance.POST /sdk-partner/spend/cards/iframe/init and display response of that URL in an iFrame.Once the Mercuryo Spend card is issued, it can be used when selling crypto for fiat money and withdrawing funds, as well as in POS and e-commerce transactions.
Replenishing a Spend card.
Replenishing a card without an open card is not possible. The end-user must have an open card before replenishing it.
If needed, you can check user limits before the transaction. Mercuryo won’t complete the transaction when beyond the limit. Use GET /sdk-partner/user/limits/spend, if you want to get limit details separately.
GET /sdk-partner/spend/cards/rates/crypto-topup to get rates.trx_token.trx_token expires in one hour.POST /sdk-partner/spend/cards/crypto-topup to replenish a Spend card.GET /sdk-partner/spend/cards/sell-request/{id}/status to check the status of created sell request.failed_reason field indicating the reason for failure (e.g., spend_cards_limits_error when the card has reached its top-up limit).GET /sdk-partner/spend/cards/transactions to get the list of card transactions.GET /sdk-partner/spend/cards/balance to get card balance.Viewing card's details.
GET /sdk-partner/spend/cards/status to check the status of card.GET /sdk-partner/spend/cards/masked to get masked card data.GET /sdk-partner/spend/cards/balance to get card balance.GET /sdk-partner/spend/cards/transactions to get the list of card transactions.POST /sdk-partner/spend/cards/iframe/init and display response of that URL in an iFrame.Freezing a card.
POST /sdk-partner/spend/cards/lock to lock the card.When the card is locked, you can still perform the following actions: unlock the card, reissue a new card, and view the transaction history.
Unlocking a card.
POST /sdk-partner/spend/cards/unlock to unlock the card.Once the card is unlocked, the funds will be transferred to it.
Replacing the card with a new one.
To reissue a card, you must first block the current card. The remaining balance on the blocked card will be saved and transferred to a new card. The new card will have different card details from the blocked one.
POST /sdk-partner/spend/cards/replace to replace the card with a new one.Mercuryo sends callbacks when the transaction status changes. Set up a callback URL to receive callbacks.
Callback URL field.Go to Widget Callbacks to browse callbacks, resend a callback, and send a test callback.
{
"data":{
"id":"0ab3f70c72c0f5056",
"fee":"11.80",
"card":{
"number":"1111"
},
"rate":"25756.99",
"type":"buy",
"user":{
"email":"sf@mercuryo.io",
"phone":"+3570000000",
"uuid4":"b5086805-4b83-4415-8a00-5c1ad43210b6",
"country_code":"de"
},
"amount":"0.00148310",
"status":"paid",
"currency":"BTC",
"created_at":"2023-09-07 07:32:33",
"updated_at":"2023-09-07 07:32:46",
"fiat_amount":"50.00",
"partner_fee":"0.00",
"created_at_ts":1694071953,
"fiat_currency":"USD",
"updated_at_ts":1694071966,
"payment_method":"card",
"card_masked_pan":null,
"merchant_transaction_id":"123"
}
}
Mercuryo sends callbacks for Spend card events:
To set up a callback URL to receive callbacks for Spend card events, contact your integration manager.
{
"event_id": "80b5ab73-897c-4ec5-aab5-48cc3d0acca8", // unique event identifier, the same for all retries of the same event
"event_name": "card_status",
"card_id": "0c379cbae24f62922",
"user": {
"uuid": "b19ea88b-ed9f-46ad-bfd9-62ddf63ffe66",
}
"status": "active",
"created_at": "2024-06-27 08:26:35",
"updated_at": "2024-06-27 08:26:41",
}
If the callback service returns a 500 error, the system will retry the request using exponential backoff, up to a maximum of 10 attempts.
{
"event_id": "80b5ab73-897c-4ec5-aab5-48cc3d0acca8",
"event_name": "crypto_top_up",
"card_id": "0c379cbae24f62922",
"user": {
"uuid": "b19ea88b-ed9f-46ad-bfd9-62ddf63ffe66"
},
"sell_request": {
"id": "0daa380ba39596745",
"merchant_transaction_id": "00357ec76de855485",
"status": "new|pending|succeeded|failed",
"fiat_amount": "130.34",
"fiat_currency": "EUR",
"fee": "2",
"crypto_amount": "0.02",
"crypto_currency": "BTC"
},
"refund_address": "0xc83935B7295FEC64E32B62C33C24dFdfE04092A9",
"address": "0xc83935B7295FEC64E32B62C33C24dFdfE04092A9",
"sender_address": ["0xc83935B7295FEC64E32B62C33C24dFdfE04092A9"],
"card_balance": "130|null",
"created_at": "2024-06-27 08:26:35",
"updated_at": "2024-06-27 08:26:41"
}
{
"event_id": "80b5ab73-897c-4ec5-aab5-48cc3d0acca8",
"event_name": "card_transaction",
"card_id": "0c379cbae24f62922",
"user": {
"uuid": "b19ea88b-ed9f-46ad-bfd9-62ddf63ffe66"
},
"transaction": {
"id": "0daa380ba39596745",
"type": "PURCHASE",
"status":"AUTHORIZED|CLEARED|DECLINED|REVERSED|INVALID",
"decline_reason": null|"",
"local_amount":"123",
"local_currency":"EUR",
"amount": "123",
"currency": "EUR",
"fx_rate": null,
"mcc": "288",
"counterparty_name": "Some Name"
},
"created_at": "2024-06-27 08:26:35",
"updated_at": "2024-06-27 08:26:41"
}
The sign key is used for checking the callback signature. When the transaction status changes, the merchant receives a request with transaction data from Mercuryo. If you use callbacks, you can set up the signature check.
You can check the signature by generating a hash with the HMAC sha256 algorithm and a key from the Sign Key field in the Dashboard. Check the X-Signature HTTP header against the generated hash.
All enum keys are case-sensitive and must match the API contract. Do not send custom values beyond the enums.
Note on selection type: Multi-select is not supported. Each enum field accepts a single enum value (a single string), not an array. If more than one option applies, choose the value that best represents the primary purpose. If none of the predefined values fits, set the enum to OTHER and provide a descriptive value in the corresponding other_* field.
If an enum field contains an OTHER option, the corresponding other_* text field must be provided. Example:
"purpose_of_wallet_usage": "OTHER",
"other_purpose_of_wallet_usage": "Collecting payments for a private nonprofit"
purpose_of_wallet_usage / other_purpose_of_wallet_usage| Enum | Label |
|---|---|
PERSONAL_SPENDING |
Personal spending |
ONLINE_SHOPPING |
Online shopping |
SUBSCRIPTIONS_SERVICES |
Subscriptions / services |
FAMILY_FRIENDS |
Family / friends |
SALARY_INCOME |
Salary / income |
SAVINGS |
Savings |
INVESTMENTS_TRADING |
Investments / trading |
BILL_PAYMENTS |
Bill payments |
TRAVEL_EXPENSES |
Travel expenses |
GAMING_BETTING |
Gaming / betting |
OTHER |
Other — provide other_purpose_of_wallet_usage |
other_purpose_of_wallet_usage — free-text, required when purpose_of_wallet_usage = OTHER.
employment_status / other_employment_status| Enum | Label |
|---|---|
PRIVATE_EMPLOYEE |
Private employee |
GOVERNMENT_EMPLOYEE |
Government employee |
SELF_EMPLOYED |
Self-employed |
BUSINESS_OWNER |
Business owner |
STUDENT |
Student |
RETIRED |
Retired |
UNEMPLOYED |
Unemployed |
OTHER |
Other — provide other_employment_status |
other_employment_status — free-text, required when employment_status = OTHER.
occupation_position| Enum | Label |
|---|---|
MANAGER |
Manager |
PROFESSIONAL |
Professional |
TECHNICIAN_ASSOCIATE |
Technician / Associate |
CLERICAL_SUPPORT |
Clerical support |
SERVICE_SALES |
Service / Sales |
AGRICULTURAL_FORESTRY_FISHERY |
Agricultural / Forestry / Fishery |
CRAFT_TRADES |
Craft trades |
MACHINE_OPERATOR |
Machine operator |
ELEMENTARY |
Elementary |
NOT_APPLICABLE |
Not applicable |
occupation| Enum | Label |
|---|---|
ACCOUNTING_AUDIT |
Accounting / Audit |
PAYMENTS_EMONEY |
Payments / e-money |
CURRENCY_EXCHANGE |
Currency exchange |
BANKING_LENDING |
Banking / Lending |
CONSULTANCY_LEGAL |
Consultancy / Legal |
PUBLIC_ADMINISTRATION |
Public administration |
HEALTH_CARE_MEDICAL |
Health care / Medical |
EDUCATION |
Education |
INFORMATIONAL_TECHNOLOGIES |
Information technologies |
CONSTRUCTION_REPAIR |
Construction / Repair |
REAL_ESTATE |
Real estate |
MANUFACTURING |
Manufacturing |
PR_MARKETING |
PR / Marketing |
TRADE_FOOD_PRODUCTS |
Trade — food products |
WHOLESALE |
Wholesale |
REPAIR_MOTOR_VEHICLES |
Motor vehicle repair |
TRANSPORTATION_LOGISTICS |
Transport / Logistics |
COURIER_POST |
Courier / Post |
HOSPITALITY_LEISURE |
Hospitality / Leisure |
SOCIAL_WORK |
Social work |
FREELANCE |
Freelance |
ADMINISTRATIVE_OFFICE |
Administrative office |
OTHER_TRADE_SALES |
Other trade / sales |
INVESTMENTS_TRADING |
Investments / Trading |
SECURITIES_TRADING_OTC |
Securities trading (OTC) |
HIGH_VALUE_ASSETS |
High-value assets |
CRYPTOCURRENCIES |
Cryptocurrencies |
PRECIOUS_METALS_STONES |
Precious metals / stones |
PAWNSHOPS |
Pawnbrokers |
CROSS_BORDER_CASH_METALS |
Cross-border cash & metals |
MINING_EXTRACTIVE |
Mining / extractive |
ENERGY |
Energy |
TRADE_PETROL |
Trade — petrol |
TRADE_MEDICINES |
Trade — medicines |
NON_PROFIT_ENTITIES |
Non-profit entities |
GAMING_ONLINE |
Gaming — online |
GAMBLING_ONLINE |
Gambling — online |
EU_FUNDS |
EU funds |
ADULT |
Adult industry |
INSURANCE_SECURITY |
Insurance / Security |
UTILITIES_INFRASTRUCTURE |
Utilities / Infrastructure |
AUTO_AVIATION |
Auto / Aviation |
AGRICULTURE_FORESTRY |
Agriculture / Forestry |
TRAVEL_TOURISM |
Travel / Tourism |
INFORMATION_COMMUNICATION |
Information & Communication |
ART_ENTERTAINMENT_SPORT |
Art / Entertainment / Sport |
SCIENTIFIC_TECHNICAL |
Scientific / Technical |
OTHER |
Other — provide other_occupation |
other_occupation — free-text, required when occupation = OTHER.
client_monthly_net_income| Enum | Label |
|---|---|
LESS_THAN_1000_EUR |
< €1,000 |
BETWEEN_1001_AND_5000_EUR |
€1,001–€5,000 |
BETWEEN_5001_AND_10000_EUR |
€5,001–€10,000 |
BETWEEN_10001_AND_15000_EUR |
€10,001–€15,000 |
MORE_THAN_15000_EUR |
> €15,000 |
type_of_incoming_funds| Enum | Label |
|---|---|
DOMESTIC |
Domestic |
INTRA_EU_EEA |
Within EU / EEA |
CROSS_BORDER |
Cross-border (outside EU / EEA) |
expected_incoming_monthly_eur / expected_outgoing_monthly_eur| Enum | Label |
|---|---|
LESS_THAN_1000_EUR |
< €1,000 |
BETWEEN_1001_AND_5000_EUR |
€1,001–€5,000 |
BETWEEN_5001_AND_10000_EUR |
€5,001–€10,000 |
BETWEEN_10001_AND_15000_EUR |
€10,001–€15,000 |
MORE_THAN_15000_EUR |
> €15,000 |
expected_monthly_frequency_incoming_transfer| Enum | Label |
|---|---|
LESS_THAN_2_TIMES |
< 2 times / month |
BETWEEN_3_5_TIMES |
3–5 times / month |
MORE_THAN_6_TIMES |
> 6 times / month |
source_of_funds| Enum | Label |
|---|---|
PERSONAL_SAVINGS |
Personal savings |
FAMILY_SAVINGS |
Family savings |
LABOR_CONTRACT |
Labor contract |
CIVIL_CONTRACT |
Civil contract |
DIVIDENDS |
Dividends |
INHERITANCE |
Inheritance |
LOAN_FINANCIAL_INSTITUTION |
Loan — financial institution |
LOAN_NON_FINANCIAL |
Loan — non-financial |
ORDINARY_BUSINESS_ACTIVITY |
Ordinary business activity |
RENT |
Rent |
SALE_COMPANY_SHARES |
Sale — company shares |
SALE_MOVABLE_ASSETS |
Sale — movable assets |
SALE_REAL_ESTATE |
Sale — real estate |
SALE_FINANCIAL_INSTRUMENTS |
Sale — financial instruments |
SALE_SERVICES |
Sale — services |
SALE_CRYPTOCURRENCIES |
Sale — cryptocurrencies |
SALE_IP_RIGHTS |
Sale — IP rights |
FREELANCER_INCOMES |
Freelancer incomes |
INVESTMENTS_FUNDS |
Investment funds |
COPYRIGHT_LICENSES |
Copyright / license |
GAMBLING_WINNINGS |
Gambling winnings |
INTEREST_REVENUE |
Interest revenue |
PENSIONS_SOCIAL_ASSISTANCE |
Pensions / social assistance |
OTHER |
Other — provide other_source_of_funds |
other_source_of_funds — free-text, required when source_of_funds = OTHER.
Below is an example of the questionnaire definition used by the UI (the "spend_questions_eea" payload).
Note: the UI option values in this JSON are lower_snake_case (for example "personal_spending"). The API enums in this Appendix are UPPER_SNAKE_CASE (for example PERSONAL_SPENDING). When sending data to the API, use the API enum keys as described above — map UI values to API enum keys if necessary (or use the server-side mapping implemented by the backend).
{
"id": "spend_questions_eea",
"title": "A few questions before we continue",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "A few questions before we continue"
}
]
},
"desc": "We will ask a few quick questions to make sure your card works as expected.",
"localizedDesc": {
"values": [
{
"lang": "en",
"value": "We will ask a few quick questions to make sure your card works as expected."
}
]
},
"modifiable": true,
"sections": [
{
"id": "purposeOfWalletUsage",
"title": "How do you plan to use your card?",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "How do you plan to use your card?"
}
]
},
"desc": "We use this to make sure everything works smoothly for you.",
"localizedDesc": {
"values": [
{
"lang": "en",
"value": "We use this to make sure everything works smoothly for you."
}
]
},
"condition": null,
"showCondition": null,
"items": [
{
"id": "purpose_of_wallet_usage",
"title": "",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": ""
}
]
},
"desc": "",
"localizedDesc": {
"values": [
{
"lang": "en",
"value": ""
}
]
},
"type": "select",
"required": true,
"format": null,
"condition": null,
"showCondition": null,
"placeholder": "",
"localizedPlaceholder": {
"values": [
{
"lang": "en",
"value": ""
}
]
},
"options": [
{
"value": "personal_spending",
"title": "Personal spending",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Personal spending"
}
]
},
"score": null
},
{
"value": "online_shopping",
"title": "Online shopping",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Online shopping"
}
]
},
"score": null
},
{
"value": "paying_for_subscription",
"title": "Paying for subscriptions/services",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Paying for subscriptions/services"
}
]
},
"score": null
},
{
"value": "sending_money_to_family",
"title": "Sending money to family/friends",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Sending money to family/friends"
}
]
},
"score": null
},
{
"value": "receiving_salary",
"title": "Receiving salary/income",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Receiving salary/income"
}
]
},
"score": null
},
{
"value": "savings_funds",
"title": "Savings",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Savings"
}
]
},
"score": null
},
{
"value": "investments_trading",
"title": "Investments/Trading",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Investments/Trading"
}
]
},
"score": null
},
{
"value": "bill_payments",
"title": "Bill payments (utilities, rent, etc.)",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Bill payments (utilities, rent, etc.)"
}
]
},
"score": null
},
{
"value": "travel_expenses",
"title": "Travel expenses (flights, hotels, etc.)",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Travel expenses (flights, hotels, etc.)"
}
]
},
"score": null
},
{
"value": "online_gaming",
"title": "Online gaming or betting",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Online gaming or betting"
}
]
},
"score": null
},
{
"value": "other",
"title": "Other",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Other"
}
]
},
"score": null
}
],
"arbitraryDocType": null
},
{
"id": "other_purpose_of_wallet_usage",
"title": "Please describe how you will use the card",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Please describe how you will use the card"
}
]
},
"desc": "",
"localizedDesc": {
"values": [
{
"lang": "en",
"value": ""
}
]
},
"type": "text",
"required": true,
"format": null,
"condition": "purposeOfWalletUsage.purpose_of_wallet_usage = other",
"showCondition": null,
"placeholder": "Add details",
"localizedPlaceholder": {
"values": [
{
"lang": "en",
"value": "Add details"
}
]
},
"options": null,
"arbitraryDocType": null
}
],
"delimiter": null,
"useRandomItems": null,
"randomItemsCount": null
},
{
"id": null,
"title": null,
"localizedTitle": {
"values": [
{
"lang": "en",
"value": ""
}
]
},
"desc": null,
"localizedDesc": {
"values": [
{
"lang": "en",
"value": ""
}
]
},
"condition": null,
"showCondition": null,
"items": null,
"delimiter": true,
"useRandomItems": null,
"randomItemsCount": null
},
{
"id": "occupationAndEmploym",
"title": "Your occupation and employment",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Your occupation and employment"
}
]
},
"desc": "Please select the options that best describe your situation.",
"localizedDesc": {
"values": [
{
"lang": "en",
"value": "Please select the options that best describe your situation."
}
]
},
"condition": null,
"showCondition": null,
"items": [
{
"id": "employment_status",
"title": "What best describes your current employment status?",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "What best describes your current employment status?"
}
]
},
"desc": "",
"localizedDesc": {
"values": [
{
"lang": "en",
"value": ""
}
]
},
"type": "selectDropdown",
"required": true,
"format": null,
"condition": null,
"showCondition": null,
"placeholder": "",
"localizedPlaceholder": {
"values": [
{
"lang": "en",
"value": ""
}
]
},
"options": [
{
"value": "private_sector_employee",
"title": "Private sector employee",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Private sector employee"
}
]
},
"score": null
},
{
"value": "government_sector_employee",
"title": "Government sector or local authority employee",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Government sector or local authority employee"
}
]
},
"score": null
},
{
"value": "self_employed",
"title": "Self-employed individual/professional",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Self-employed individual/professional"
}
]
},
"score": null
},
{
"value": "business_owner",
"title": "Business owner",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Business owner"
}
]
},
"score": null
},
{
"value": "student",
"title": "Student",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Student"
}
]
},
"score": null
},
{
"value": "retired",
"title": "Retired",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Retired"
}
]
},
"score": null
},
{
"value": "unemployed",
"title": "Unemployed",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Unemployed"
}
]
},
"score": null
},
{
"value": "other",
"title": "Other",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Other"
}
]
},
"score": null
}
],
"arbitraryDocType": null
},
{
"id": "other_employment_status",
"title": "Please specify your employment status",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Please specify your employment status"
}
]
},
"desc": "",
"localizedDesc": {
"values": [
{
"lang": "en",
"value": ""
}
]
},
"type": "text",
"required": true,
"format": null,
"condition": "occupationAndEmploym.employment_status = other",
"showCondition": null,
"placeholder": "Add details",
"localizedPlaceholder": {
"values": [
{
"lang": "en",
"value": "Add details"
}
]
},
"options": null,
"arbitraryDocType": null
},
{
"id": "occupation_position",
"title": "What best describes your role?",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "What best describes your role?"
}
]
},
"desc": "",
"localizedDesc": {
"values": [
{
"lang": "en",
"value": ""
}
]
},
"type": "selectDropdown",
"required": true,
"format": null,
"condition": null,
"showCondition": null,
"placeholder": "",
"localizedPlaceholder": {
"values": [
{
"lang": "en",
"value": ""
}
]
},
"options": [
{
"value": "manager",
"title": "Manager",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Manager"
}
]
},
"score": null
},
{
"value": "professional",
"title": "Professional",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Professional"
}
]
},
"score": null
},
{
"value": "technicians_associate_professional",
"title": "Technician and associate professional",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Technician and associate professional"
}
]
},
"score": null
},
{
"value": "clerical_support_worker",
"title": "Clerical support worker",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Clerical support worker"
}
]
},
"score": null
},
{
"value": "service_sales_worker",
"title": "Service and sales worker",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Service and sales worker"
}
]
},
"score": null
},
{
"value": "skilled_agricultural_forestry_fishery",
"title": "Skilled agricultural, forestry and fishery worker",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Skilled agricultural, forestry and fishery worker"
}
]
},
"score": null
},
{
"value": "craft_related_trades_worker",
"title": "Craft and related trades worker",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Craft and related trades worker"
}
]
},
"score": null
},
{
"value": "plant_machine_operator_assemblers",
"title": "Plant and machine operator, and assemblers",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Plant and machine operator, and assemblers"
}
]
},
"score": null
},
{
"value": "elementary_occupation",
"title": "Elementary occupation",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Elementary occupation"
}
]
},
"score": null
},
{
"value": "not_applicable",
"title": "Not applicable",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Not applicable"
}
]
},
"score": null
}
],
"arbitraryDocType": null
},
{
"id": "occupation",
"title": "What sector do you work in?",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "What sector do you work in?"
}
]
},
"desc": "",
"localizedDesc": {
"values": [
{
"lang": "en",
"value": ""
}
]
},
"type": "selectDropdown",
"required": true,
"format": null,
"condition": null,
"showCondition": null,
"placeholder": "",
"localizedPlaceholder": {
"values": [
{
"lang": "en",
"value": ""
}
]
},
"options": [
{
"value": "accounting_audit",
"title": "Accounting/Audit",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Accounting/Audit"
}
]
},
"score": null
},
{
"value": "payments_emoney",
"title": "Payments/e-money services",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Payments/e-money services"
}
]
},
"score": null
},
{
"value": "currency_exchange",
"title": "Currency exchange",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Currency exchange"
}
]
},
"score": null
},
{
"value": "banking_lending",
"title": "Banking/Lending",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Banking/Lending"
}
]
},
"score": null
},
{
"value": "consultancy_legal",
"title": "Consultancy/Legal",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Consultancy/Legal"
}
]
},
"score": null
},
{
"value": "public_administration",
"title": "Public sector",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Public sector"
}
]
},
"score": null
},
{
"value": "health_care_medical",
"title": "Health care/Medical services",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Health care/Medical services"
}
]
},
"score": null
},
{
"value": "education",
"title": "Education",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Education"
}
]
},
"score": null
},
{
"value": "informational_technologies",
"title": "Informational technologies",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Informational technologies"
}
]
},
"score": null
},
{
"value": "construction_repair",
"title": "Construction/Repair",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Construction/Repair"
}
]
},
"score": null
},
{
"value": "real_estate",
"title": "Real estate",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Real estate"
}
]
},
"score": null
},
{
"value": "manufacturing",
"title": "Manufacturing",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Manufacturing"
}
]
},
"score": null
},
{
"value": "pr_marketing",
"title": "PR/Marketing",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "PR/Marketing"
}
]
},
"score": null
},
{
"value": "trade_food_products",
"title": "Trade in food products",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Trade in food products"
}
]
},
"score": null
},
{
"value": "wholesale",
"title": "Wholesale",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Wholesale"
}
]
},
"score": null
},
{
"value": "repair_motor_vehicles",
"title": "Motor vehicle repair",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Motor vehicle repair"
}
]
},
"score": null
},
{
"value": "transportation_logistics",
"title": "Transportation and logistics",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Transportation and logistics"
}
]
},
"score": null
},
{
"value": "courier_post",
"title": "Courier/Post services",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Courier/Post services"
}
]
},
"score": null
},
{
"value": "hospitality_leisure",
"title": "Hospitality and leisure",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Hospitality and leisure"
}
]
},
"score": null
},
{
"value": "social_work",
"title": "Social work activities",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Social work activities"
}
]
},
"score": null
},
{
"value": "freelance",
"title": "Freelance",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Freelance"
}
]
},
"score": null
},
{
"value": "administrative_office",
"title": "Administrative services",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Administrative services"
}
]
},
"score": null
},
{
"value": "other_trade_sales",
"title": "Other trade and sales",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Other trade and sales"
}
]
},
"score": null
},
{
"value": "investments_trading",
"title": "Investments/Trading",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Investments/Trading"
}
]
},
"score": null
},
{
"value": "securities_trading_otc",
"title": "OTC securities trading",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "OTC securities trading"
}
]
},
"score": null
},
{
"value": "high_value_assets",
"title": "High-value asset dealers",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "High-value asset dealers"
}
]
},
"score": null
},
{
"value": "cryptocurrencies",
"title": "Cryptocurrencies",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Cryptocurrencies"
}
]
},
"score": null
},
{
"value": "precious_metals_stones",
"title": "Precious Metals/Stones",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Precious Metals/Stones"
}
]
},
"score": null
},
{
"value": "pawnshops",
"title": "Pawnshops",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Pawnshops"
}
]
},
"score": null
},
{
"value": "cross_border_cash_metals",
"title": "Cross-border cash & metals",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Cross-border cash & metals"
}
]
},
"score": null
},
{
"value": "mining_extractive",
"title": "Mining extractive industries",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Mining extractive industries"
}
]
},
"score": null
},
{
"value": "energy",
"title": "Energy",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Energy"
}
]
},
"score": null
},
{
"value": "trade_petrol",
"title": "Trade in petrol products",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Trade in petrol products"
}
]
},
"score": null
},
{
"value": "trade_medicines",
"title": "Trade in medicines",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Trade in medicines"
}
]
},
"score": null
},
{
"value": "non_profit_entities",
"title": "Non-profit legal еntities",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Non-profit legal еntities"
}
]
},
"score": null
},
{
"value": "gaming_online",
"title": "Gaming/Online gaming",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Gaming/Online gaming"
}
]
},
"score": null
},
{
"value": "gambling_online",
"title": "Gambling/Online gambling",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Gambling/Online gambling"
}
]
},
"score": null
},
{
"value": "eu_funds",
"title": "EU funds utilization",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "EU funds utilization"
}
]
},
"score": null
},
{
"value": "adult",
"title": "Adult",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Adult"
}
]
},
"score": null
},
{
"value": "insurance_security",
"title": "Insurance/Security",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Insurance/Security"
}
]
},
"score": null
},
{
"value": "utilities_infrastructure",
"title": "Utilities/Infrastructure",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Utilities/Infrastructure"
}
]
},
"score": null
},
{
"value": "auto_aviation",
"title": "Auto/Aviation",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Auto/Aviation"
}
]
},
"score": null
},
{
"value": "agriculture_forestry",
"title": "Agriculture, forestry and fishing",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Agriculture, forestry and fishing"
}
]
},
"score": null
},
{
"value": "travel_tourism",
"title": "Travel/Tourism",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Travel/Tourism"
}
]
},
"score": null
},
{
"value": "information_communication",
"title": "Information and communication",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Information and communication"
}
]
},
"score": null
},
{
"value": "art_entertainment_sport",
"title": "Art/Entertainment/Sport",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Art/Entertainment/Sport"
}
]
},
"score": null
},
{
"value": "scientific_technical",
"title": "Scientific and technical activities",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Scientific and technical activities"
}
]
},
"score": null
},
{
"value": "other",
"title": "Other",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Other"
}
]
},
"score": null
}
],
"arbitraryDocType": null
},
{
"id": "other_occupation",
"title": "Please specify the sector",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Please specify the sector"
}
]
},
"desc": "",
"localizedDesc": {
"values": [
{
"lang": "en",
"value": ""
}
]
},
"type": "text",
"required": true,
"format": null,
"condition": "occupationAndEmploym.occupation = other",
"showCondition": null,
"placeholder": "Add details",
"localizedPlaceholder": {
"values": [
{
"lang": "en",
"value": "Add details"
}
]
},
"options": null,
"arbitraryDocType": null
}
],
"delimiter": null,
"useRandomItems": null,
"randomItemsCount": null
},
{
"id": null,
"title": null,
"localizedTitle": {
"values": [
{
"lang": "en",
"value": ""
}
]
},
"desc": null,
"localizedDesc": {
"values": [
{
"lang": "en",
"value": ""
}
]
},
"condition": null,
"showCondition": null,
"items": null,
"delimiter": true,
"useRandomItems": null,
"randomItemsCount": null
},
{
"id": "incomeAndExpectedTur",
"title": "Income and card usage",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Income and card usage"
}
]
},
"desc": "Approximate values are fine.",
"localizedDesc": {
"values": [
{
"lang": "en",
"value": "Approximate values are fine."
}
]
},
"condition": null,
"showCondition": null,
"items": [
{
"id": "client_monthly_net_income",
"title": "What is your monthly income after tax?",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "What is your monthly income after tax?"
}
]
},
"desc": "",
"localizedDesc": {
"values": [
{
"lang": "en",
"value": ""
}
]
},
"type": "select",
"required": true,
"format": null,
"condition": null,
"showCondition": null,
"placeholder": "",
"localizedPlaceholder": {
"values": [
{
"lang": "en",
"value": ""
}
]
},
"options": [
{
"value": "less_than_1000_eur",
"title": "Less than 1,000 EUR",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Less than 1,000 EUR"
}
]
},
"score": null
},
{
"value": "between_1001_and_5000_eur",
"title": "Between 1,001 and 5,000 EUR",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Between 1,001 and 5,000 EUR"
}
]
},
"score": null
},
{
"value": "between_5001_and_10000_eur",
"title": "Between 5,001 and 10,000 EUR",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Between 5,001 and 10,000 EUR"
}
]
},
"score": null
},
{
"value": "between_10001_and_15000_eur",
"title": "Between 10,001 and 15,000 EUR",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Between 10,001 and 15,000 EUR"
}
]
},
"score": null
},
{
"value": "more_than_15000_eur",
"title": "More than 15,000 EUR",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "More than 15,000 EUR"
}
]
},
"score": null
}
],
"arbitraryDocType": null
},
{
"id": "type_of_incoming_funds",
"title": "Where will the money you add to your card come from?",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Where will the money you add to your card come from?"
}
]
},
"desc": "",
"localizedDesc": {
"values": [
{
"lang": "en",
"value": ""
}
]
},
"type": "select",
"required": true,
"format": null,
"condition": null,
"showCondition": null,
"placeholder": "",
"localizedPlaceholder": {
"values": [
{
"lang": "en",
"value": ""
}
]
},
"options": [
{
"value": "domestic",
"title": "From within my country",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "From within my country"
}
]
},
"score": null
},
{
"value": "intra_eea",
"title": "From within the EU/EEA",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "From within the EU/EEA"
}
]
},
"score": null
},
{
"value": "cross_border",
"title": "From outside the EU/EEA",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "From outside the EU/EEA"
}
]
},
"score": null
}
],
"arbitraryDocType": null
},
{
"id": "expected_incoming_monthly_eur",
"title": "How much money do you expect to add or receive to your card each month?",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "How much money do you expect to add or receive to your card each month?"
}
]
},
"desc": "",
"localizedDesc": {
"values": [
{
"lang": "en",
"value": ""
}
]
},
"type": "select",
"required": true,
"format": null,
"condition": null,
"showCondition": null,
"placeholder": "",
"localizedPlaceholder": {
"values": [
{
"lang": "en",
"value": ""
}
]
},
"options": [
{
"value": "less_than_1000_eur",
"title": "Less than 1,000 EUR",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Less than 1,000 EUR"
}
]
},
"score": null
},
{
"value": "between_1001_and_5000_eur",
"title": "Between 1,001 and 5,000 EUR",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Between 1,001 and 5,000 EUR"
}
]
},
"score": null
},
{
"value": "between_5001_and_10000_eur",
"title": "Between 5,001 and 10,000 EUR",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Between 5,001 and 10,000 EUR"
}
]
},
"score": null
},
{
"value": "between_10001_and_15000_eur",
"title": "Between 10,001 and 15,000 EUR",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Between 10,001 and 15,000 EUR"
}
]
},
"score": null
},
{
"value": "more_than_15000_eur",
"title": "More than 15,000 EUR",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "More than 15,000 EUR"
}
]
},
"score": null
}
],
"arbitraryDocType": null
},
{
"id": "expected_outgoing_monthly_eur",
"title": "How much money do you expect to spend from your card each month?",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "How much money do you expect to spend from your card each month?"
}
]
},
"desc": "",
"localizedDesc": {
"values": [
{
"lang": "en",
"value": ""
}
]
},
"type": "select",
"required": null,
"format": null,
"condition": null,
"showCondition": null,
"placeholder": "",
"localizedPlaceholder": {
"values": [
{
"lang": "en",
"value": ""
}
]
},
"options": [
{
"value": "less_than_1000_eur",
"title": "Less than 1,000 EUR",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Less than 1,000 EUR"
}
]
},
"score": null
},
{
"value": "between_1001_and_5000_eur",
"title": "Between 1,001 and 5,000 EUR",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Between 1,001 and 5,000 EUR"
}
]
},
"score": null
},
{
"value": "between_5001_and_10000_eur",
"title": "Between 5,001 and 10,000 EUR",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Between 5,001 and 10,000 EUR"
}
]
},
"score": null
},
{
"value": "between_10001_and_15000_eur",
"title": "Between 10,001 and 15,000 EUR",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Between 10,001 and 15,000 EUR"
}
]
},
"score": null
},
{
"value": "more_than_15000_eur",
"title": "More than 15,000 EUR",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "More than 15,000 EUR"
}
]
},
"score": null
}
],
"arbitraryDocType": null
},
{
"id": "expected_monthly_frequency_incoming_transfer",
"title": "How often will you add money to your card?",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "How often will you add money to your card?"
}
]
},
"desc": "",
"localizedDesc": {
"values": [
{
"lang": "en",
"value": ""
}
]
},
"type": "select",
"required": true,
"format": null,
"condition": null,
"showCondition": null,
"placeholder": "",
"localizedPlaceholder": {
"values": [
{
"lang": "en",
"value": ""
}
]
},
"options": [
{
"value": "less_than_2_times",
"title": "Less than 2 times",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Less than 2 times"
}
]
},
"score": null
},
{
"value": "between_3_5_times",
"title": "Between 3-5 times",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "Between 3-5 times"
}
]
},
"score": null
},
{
"value": "more_than_6_times",
"title": "More than 6 times",
"localizedTitle": {
"values": [
{
"lang": "en",
"value": "More than 6 times"
}
]
},
"score": null
}
],
"arbitraryDocType": null
}
],
"delimiter": null,
"useRandomItems": null,
"randomItemsCount": null
}
]
}
Visit Help Center for Users and Help Center for Merchants
Re-registering a new email address is only possible through our Customer Support. If the user logs in with the new email and attempts to complete KYC, an error will occur indicating that the user is already registered and must use the old account. The error code 403082: KYC is already completed will be returned by the GET /sdk-partner/user/kyc-status endpoint.
No, ATM withdrawals are not possible.
Please see the limits here. No, there are no limits adjustable by a user.
No, the transaction will only be visible after the funds have been credited to the card.
Users can initiate multiple top-up transactions in succession, provided each transaction involves different amounts and/or different cryptocurrencies or networks. However, if a user attempts to send the same amount of funds in the same cryptocurrency at the same time, it may cause issues with transfer.
Get KYC access token
OK
Error codes:
400001: Validation error, check the data field;
400062: Cannot get KYC access token. Check the message field;
401000: Authorization failed
Error codes:
403082: KYC is already completed;
403020: IP is blacklisted;
403026: Resource is unavailable. Please contact support;
405000: Method Not Allowed
500001: Various reasons, check the message field
{- "status": 200,
- "data": {
- "kyc_access_token": "_act-ca4dae41-0ecd-468d-86e2-02d5ca697b8d",
- "applicant_id": "6315bcb2647ada0001823025"
}
}Submit Spend EEA questionnaire. Fields with key in schema are request body properties in lowerCase. OPTIONS define allowed enum values. Fields other_* must be sent only when the related field is set to OTHER.
Questionnaire answers
Created - Questionnaire submitted successfully
Error codes:
400000: Bad request - Invalid or missing fields, wrong choice cardinality, invalid input.
400001: Validation failed - Request body validation errors.
400251: KYC is required - KYC verification required for card feature. Data field contains next step and feature.
401000: Authorization failed
403070: Lock failed - User action is locked by mutex
422000: Validation error
500000: Internal server error
{- "purpose_of_wallet_usage": "PERSONAL_SPENDING",
- "other_purpose_of_wallet_usage": "string",
- "employment_status": "PRIVATE_EMPLOYEE",
- "other_employment_status": "string",
- "occupation_position": "MANAGER",
- "occupation": "ACCOUNTING_AUDIT",
- "other_occupation": "string",
- "client_monthly_net_income": "LESS_THAN_1000_EUR",
- "type_of_incoming_funds": "DOMESTIC",
- "expected_incoming_monthly_eur": "LESS_THAN_1000_EUR",
- "expected_outgoing_monthly_eur": "LESS_THAN_1000_EUR",
- "expected_monthly_frequency_incoming_transfer": "LESS_THAN_2_TIMES",
- "source_of_funds": "PERSONAL_SAVINGS",
- "other_source_of_funds": "string"
}{- "status": 201,
- "data": { }
}Get spend card balance
OK
Error codes:
400210: Invalid card status;
Forbidden
404000: No open card found
Internal server error
{- "status": 200,
- "data": {
- "fiat_amount": "90.00",
- "fiat_currency": "EUR"
}
}Lock spend card
OK
Error codes:
400001: Validation error, check the data field;
400085: Failed to lock card.;
Forbidden
Not found
Internal server error
{- "status": 200,
- "data": {
- "status": "locked"
}
}Get masked card data
OK
Forbidden
404000: No open card found.
Internal server error
{- "status": 200,
- "data": {
- "created_at": "2023-09-10 16:14:26",
- "number": "************1234",
- "expiration_month": "02",
- "expiration_year": "2032",
- "status": "active"
}
}Replace spend card with a new one
OK
Error codes:
400001: Validation error, check the data field;
400088: Failed to replace card; Unable to process request now; Wrong card;
400251: KYC is not completed. See response data for more details;
Forbidden
Internal server error
{- "status": 200
}List spend card transactions
OK
Error codes:
400001: Validation error, check the data field;
400086: Failed to get transactions.;
Forbidden
Not found
Internal server error
{- "status": 200,
- "data": {
- "items": [
- {
- "amount": "30.06",
- "counterparty_name": "John Doe",
- "currency": "EUR",
- "type": "TOP_UP",
- "status": "CLEARED",
- "timestamp": "2024-02-27T13:37:15Z"
}, - {
- "amount": "56.26",
- "counterparty_name": "Jane Doe",
- "currency": "EUR",
- "type": "TOP_UP",
- "status": "CLEARED",
- "timestamp": "2024-02-27T11:49:13Z"
}
], - "pagination": {
- "limit": 1,
- "next_page": "2"
}
}
}Unlock spend card
OK
Error codes:
400001: Validation error, check the data field;
400086: Failed to unlock card.; Wrong card.;
400251: KYC is not completed. See response data for more details;
Forbidden
Not found
Internal server error
{- "status": 200,
- "data": {
- "status": "active"
}
}Topup spend card using crypto deposit
JSON Body
| trx_token required | string Token returned by |
| address required | string Address for returning cryptocurrency in case of an error in the transaction. |
| merchant_transaction_id | string Custom ID for checking transaction status. If empty, it will be generated. |
OK
Error codes:
400000: Antifraud error. Cannot check, try again later; Service is temporarily unavailable. Please try again later.;
400001: Validation error, check the data field;
400004: Token is already used;
400007: Antifraud error. Amount off limits;
400087: Operation is currently unavailable.;
400251: KYC is required, details in data field.;
400201: Card is not available.;
400252: Phone number is required.;
401000: Authorization failed
Error codes:
403007: There's another active transaction;
403020: IP is blacklisted;
403026: Resource is unavailable. Please contact support;
404000: No open card found
405000: Method Not Allowed
500001: Various reasons, check the message field
{- "trx_token": "string",
- "address": "string",
- "merchant_transaction_id": "string"
}{- "status": 200,
- "data": {
- "deposit_address": "bc1qfc6h7pgn204qystwmkgh2c2t3e8ewekgeuulp3",
- "sell_request_id": "0b9ace44536d91078",
- "merchant_transaction_id": "00357ec76de855485",
- "currency": "BTC",
- "network": "BITCOIN",
- "amount": "0.05"
}
}Open a spend card with an empty balance
OK
Error codes:
400000: General bad request;
400001: Validation error, check the data field;
400089: Your card request is already being processed;
400200: Maximum number of fiat cards reached;
400201: Card is not available;
400251: KYC is required, details in data field.
400252: Phone is required.;
401000: Authorization failed
Error codes:
403007: There's another active transaction;
403020: IP is blacklisted;
403026: Resource is unavailable. Please contact support;
403106: Questionnaire is required.;
405000: Method Not Allowed
Error codes:
500000: 'Unexpected error occurred;
500001: Various reasons, check the message field'
{- "fiat_currency": "EUR"
}{- "status": 200,
- "data": {
- "id": "0b74e9bb7576c5355"
}
}Open a spend card with instant topup
JSON Body
| trx_token required | string Token returned by |
| address required | string Address for returning cryptocurrency in case of an error in the transaction. |
| merchant_transaction_id | string Custom ID for checking transaction status. If empty, it will be generated. |
OK
Error codes:
400000: Antifraud error. Cannot check, try again later;
400001: Validation error, check the data field;
400004: Token is already used;
400007: Antifraud error. Amount off limits;
400089: Your card request is already being processed.;
400200: Maximum number of spend cards reached.
400251: KYC is required, details in data field.;
400252: Phone number is required.;
401000: Authorization failed
Error codes:
403007: There's another active transaction;
403020: IP is blacklisted;
403026: Resource is unavailable. Please contact support;
405000: Method Not Allowed
500001: Various reasons, check the message field
{- "trx_token": "string",
- "address": "string",
- "merchant_transaction_id": "string"
}{- "status": 200,
- "data": {
- "deposit_address": "bc1qfc6h7pgn204qystwmkgh2c2t3e8ewekgeuulp3",
- "sell_request_id": "0b9ace44536d91078",
- "merchant_transaction_id": "00357ec76de855485",
- "currency": "BTC",
- "network": "BITCOIN",
- "amount": "0.05"
}
}Get sdk partner topup with crypto rates
OK
401000: Authorization failed
Error codes:
403020: IP is blacklisted;
405000: Method Not Allowed
500001: Various reasons, check the message field
{- "status": 200,
- "data": {
- "trx_token": "4ae0bddJjIjokVVUiIsImZhIjdkYzhiNGI1NDkxMTY5ZGU5NiIsIm9wIjoic2VsbCIsIn1ZSwidG1hMjJmLWMyMTcuMDkifQ==",
- "currency": "BTC",
- "amount": "0.02000000",
- "fiat_amount": "432.50",
- "fiat_currency": "EUR",
- "rate": "22478.7000000000",
- "fee": {
- "BTC": "0.00075999",
- "EUR": "17.09"
}, - "subtotal": {
- "BTC": "0.01924001",
- "EUR": "432.50"
}, - "total": {
- "BTC": "0.02000000",
- "EUR": "449.59"
}
}
}Get user data
OK
401000: Authorization failed
Error codes:
403020: IP is blacklisted;
405000: Method Not Allowed
500001: Various reasons, check the message field
{- "status": 200,
- "data": {
- "trx_token": "4ae0bSI6IjAuMDIwMDAoiNDMyLjUlMS1hMjJmLWMyYjA3NDRkNmU4MiIsInNmIjoiMTcuMDkifQ==",
- "currency": "BTC",
- "amount": "0.02000000",
- "fiat_amount": "432.50",
- "fiat_currency": "EUR",
- "rate": "22478.7000000000",
- "fee": {
- "BTC": "0.00075999",
- "EUR": "17.09"
}, - "subtotal": {
- "BTC": "0.01924001",
- "EUR": "432.50"
}, - "total": {
- "BTC": "0.02000000",
- "EUR": "449.59"
}
}
}Check status of created sell request
OK
Error codes:
400064: User not found by token;
401000: Authorization failed
Error codes:
403020: IP is blacklisted;
403026: Resource is unavailable. Please contact support;
405000: Method Not Allowed
500001: Various reasons, check the message field
{- "status": 200,
- "data": {
- "status": "pending",
- "amounts": {
- "request": {
- "amount": "0.00400000",
- "currency": "BTC",
- "network": "BITCOIN",
- "fiat_amount": "95.38",
- "fiat_currency": "EUR"
}
}, - "deposit_transaction": {
- "id": "deposit_id",
- "address": "deposit_address"
}, - "address": "2MufWTNoq71xwFU8enzfeYpmywhQt4katpm",
- "card_id": "0a56a5796e6056355"
}
}Init Iframe to show card details
OK
400000: Bad requests
401000: Authorization failed
Error codes:
403020: IP is blacklisted;
404000: User has no open cards
405000: Method Not Allowed
500000: Various reasons, check the message field
{- "status": 200,
- "data": {
- "init_token": "0a66a2a7a05792379",
}
}Get user contacts
OK
Error codes:
400064: User not found by token;
401000: Authorization failed
Error codes:
403020: IP is blacklisted;
403026: Resource is unavailable. Please contact support;
405000: Method Not Allowed
500001: Various reasons, check the message field
{- "status": 200,
- "data": {
- "is_phone_set": true,
- "phone_status": "confirmed",
- "is_birthday_set": true,
- "is_billing_address_set": false
}
}Get user KYC statuses
OK
Error codes:
400064: User not found by token;
401000: Authorization failed
Error codes:
403020: IP is blacklisted;
403026: Resource is unavailable. Please contact support;
405000: Method Not Allowed
500001: Various reasons, check the message field
{- "status": 200,
- "data": {
- "features": [
- {
- "feature": "crypto",
- "status": "incomplete"
}, - {
- "feature": "card",
- "status": "incomplete"
}
]
}
}Get user limits for spend products operation
OK
401000: Authorization failed
Error codes:
403020: IP is blacklisted;
405000: Method Not Allowed
500001: Various reasons, check the message field
{- "status": 200,
- "data": {
- "cards": {
- "crypto_topup": {
- "BTC": {
- "min": {
- "total": "0.0003",
- "remain": "0.0003"
}, - "max": {
- "total": "0.01630379",
- "remain": "0.01630379"
}
}, - "EUR": {
- "min": {
- "total": "25.70",
- "remain": "25.70"
}, - "max": {
- "total": "1500",
- "remain": "1500"
}
}
}
}
}, - "cards": {
- "crypto_topup": {
- "currency_name": {
- "min": {
- "remain": "string",
- "total": "string"
}, - "max": {
- "remain": "string",
- "total": "string"
}
}
}
}
}Refresh bearer token
OK
Error codes:
400014: Empty widget error. Contact your account manager;
400064: User not found by token;
401000: Authorization failed
Error codes:
403020: IP is blacklisted;
403026: Resource is unavailable. Please contact support;
405000: Method Not Allowed
500001: Various reasons, check the message field
{- "status": 200,
- "data": {
- "user_uuid": "string",
- "bearer_token": "string",
- "timeout": 0
}
}Sign-up/Sign-in user with OTP verification
OK
401000: Authorization failed
Error codes:
403007: There's another active transaction;
403020: IP is blacklisted;
405000: Method Not Allowed
Internal server error
{- "email": "someemail@gmail.com",
- "accept": true
}{- "status": 200,
- "data": {
- "key": "6a5555a814aeb10c19e0e79c3d82f18c0ad385a34b341175b9b2818b10cf6e64YXV0aGVudGljYXRpb24=qe_1ZM_1v7lnHmfxjohPmn5qUjYppTBC",
- "code_length": 5,
- "timeout": 20,
- "next": "email-verify"
}
}Sign-up/Sign-in user without the OTP verification
OK
401000: Authorization failed
Error codes:
403007: There's another active transaction;
403009: User account is locked;
403020: IP is blacklisted;
403030: Forbidden;
405000: Method Not Allowed
Internal server error
{- "email": "someemail@gmail.com",
- "accept": true
}{- "status": 200,
- "data": {
- "user_uuid": "3292c753-6809-492a-9acd-1ccdbf2fa91e",
- "bearer_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJkZXYubG9jYWwiLCJpYXQiOjE2NDkxMDAxNjIsImp0aSI6ImZCc2NUYnhlYXBteG9hMzc1WU9pajBtQXNVb045VFRoRWF3ZGFQYWxcL1g0PSIsIm5iZiI6MTY0OTEwMDE2NywiZGF0YSI6eyJ1c2VyX2lkIjoyMywiYWRkaXRpb25hbCI6eyJ3aWRnZXRfaWQiOiJkNWE0OGQ2My1mNWRlLTQ5OGEtYjM4OC02NDE2NjJkYjg2NmMiLCJleGNoYW5nZV9wYXJ0bmVyX2lkIjoxLCJzZGtfcGFydG5lcl9pZCI6MSwicHJvZHVjdCI6ImNvbW1fYXBpIn19fQ.AN8TxPN6tmxfcpTrp_FSWiCXvjqWwRg4oUMgWPFIg08"
}
}Verify email with OTP code
OK
Error codes:
400001: Validation error;
401000: Authorization failed
401004: Verification key is invalid.;
Error codes:
403007: There's another active transaction;
403020: IP is blacklisted;
403042: Some error during verification, pelase read message;
405000: Method Not Allowed
500001: Various reasons, check the message field
{- "key": "6a5555a814aeb10c19e0e79c3d82f18c0ad385a34b341175b9b2818b10cf6e64YXV0aGVudGljYXRpb24=qe_1ZM_1v7lnHmfxjohPmn5qUjYppTBC",
- "code": "73172"
}{- "status": 200,
- "data": {
- "user_uuid": "3292c753-6809-492a-9acd-1ccdbf2fa91e",
- "bearer_token": "eyJ0eXAiOiJKVzI1NiJ9.eyJpc3MiOiJbWljTEtZM2ZNOEx4MDJpYW9SI6IgwByb2R1Y3QiOiJzYWFzIn19fQ.MwX-EeGXHR2Jw4IIx26QQVKmM"
}
}Resend verification token for sign-in
OK
Error codes:
400001: Validation error;
401000: Authorization failed
401004: Verification key is invalid.;
Error codes:
403007: There's another active transaction;
403020: IP is blacklisted;
405000: Method Not Allowed
500001: Various reasons, check the message field
{- "key": "6a5555a814aeb10c19e0e79c3d82f18c0ad385a34b341175b9b2818b10cf6e64YXV0aGVudGljYXRpb24=qe_1ZM_1v7lnHmfxjohPmn5qUjYppTBC"
}{- "status": 200,
- "data": {
- "key": "6a5555a814aeb10c19e0e79c3d82f18c0ad385a34b341175b9b2818b10cf6e64YXV0aGVudGljYXRpb24=qe_1ZM_1v7lnHmfxjohPmn5qUjYppTBC",
- "code_length": 5,
- "timeout": 20,
- "next": "email-verify"
}
}Sign out
OK
401000: Authorization failed
Error codes:
403007: There's another active transaction;
403020: IP is blacklisted;
405000: Method Not Allowed
500001: Various reasons, check the message field
{- "status": 200
}Set user phone without OTP verification unless it is already set
OK
Error codes:
400001: Validation error, check the data field;
400090: User phone has already been set;
401000: Authorization failed
Error codes:
403007: There's another active transaction;
403020: IP is blacklisted;
405000: Method Not Allowed
Internal server error
{- "phone": "+1234567890"
}{- "status": 200
}