User
This module contains endpoints for creating and managing users.
Standard flow without poa:
- Create user account and genereate all balances -
/v1/user/balances/crypto-and-fiat
- Add KYC file -
/v1/user/kyc-files/:externalUserId
or Creating KYC verification -/v1/kyc
- Add user document verification -
/v1/user/verification
Standard flow with poa:
- Create user account and genereate all balances -
/v1/user/balances/crypto-and-fiat
- Add KYC file -
/v1/user/kyc-files/:externalUserId
or Creating KYC verification -/v1/kyc
- Add POA file -
/v1/user/poa-files/:externalUserId
- Add user document verification -
/v1/user/verification
If POA files are required, you need to add documents for verification and wait for the response from webhook webhook/poa-verification/status
with the verification status.
Balances are created when a user is created, but the IBAN is created when document verification is added to the client.
KYC files for ID_CARD and RESIDENCE_PERMIT documents require a photo of the front, back of the document and a customer selfie, for PASSPORT one photo of the document and a customer selfie are required.
List of countries for which we support IBAN generation:
- AM
- AT
- AZ
- BE
- BG
- CH
- CY
- CZ
- DE
- DK
- EE
- ES
- FI
- FR
- GB
- GE
- GR
- HR
- HU
- IE
- IL
- IN
- IS
- IT
- LI
- LT
- LU
- LV
- MD
- MT
- NL
- NO
- PL
- PT
- RO
- SE
- SI
- SK
- UA
Customers from countries:
- AM
- AR
- AZ
- GE
- IL
- MD
- UA
proof of address is also required, POA files need to be added in new endpoint /v1/user/poa-files/:externalUserId
.
Create user account and genereate all balances
Each user must have unique externalUserId. If user with this externalUserId already exists, error will be thrown. Fiat balances is created asynchronously, when created it gets the status 'WAITING_TO_BE_ACTIVATED', when it is created correctly we will send information about it using a webhook /webhook/user/status
and we will change the balance status to 'ACTIVE'
Method: POST
Endpoint: /v1/user/balances/crypto-and-fiat
Request
Request body - required
Name | Type | Required | Description |
---|---|---|---|
externalUserId | string | Yes | External user id (from your system) |
email | string | Yes | |
phone | string | Yes | Phone |
firstName | string | Yes | First name |
lastName | string | Yes | Last name |
address | string | Yes | Address |
city | string | Yes | City |
postCode | string | Yes | Post code. Postal code should follow the format accepted in the given country. |
country | string | Yes | ISO 3166-1 alpha-2 country code. Country of residence |
citizenship | string | Yes | ISO 3166-1 alpha-2 country code. Country of issue of the document |
documentType | string | Yes | Enum: [ "PASSPORT", "ID_CARD", "RESIDENCE_PERMIT" ] |
documentNumber | string | Yes | Document number |
Example body request
{
"externalUserId": "bca65c48-df49-4831-a7b2-de7903321581",
"email": "johndoe@gmail.com",
"phone": "48123123123",
"firstName": "John",
"lastName": "Doe",
"address": "Adama Matuszczaka 51/4",
"city": "Rzeszów",
"postCode": "35-083",
"country": "PL",
"citizenship": "PL",
"documentType": "ID_CARD",
"documentNumber": "CEV124630"
}
Response
Code: 200
Description: Returns our user id and all user balances
Response body explanation
{
"userId": "User id (from our system)",
"poaRequired": "Information on whether POA is required",
"fiatBalances": [
{
"id": "Balance id (from our system)",
"amount": "Amount",
"name": "Currency name",
"rate": "Rate",
"iban": "IBAN number",
"status": "Enum: [ 'ACTIVE, 'WAITING_TO_BE_ACTIVATED' ]"
}
],
"cryptoBalances": [
{
"id": "Balance id (from our system)",
"amount": "Amount",
"name": "Currency name",
"wallet": "Wallet address",
"rate": "Rate",
"networkConfig": {
[networkName]: {
"mainnet": "Is mainnet network",
"name": "Network name",
"withdrawal": {
"feeWithdrawal": "Withdrawal fee",
"minWithdrawal": "Withdrawal min amount"
},
"deposit": {
"minDeposit": "Deposit min amount"
},
}
}
}
]
}
Example response
{
"userId": "617c6277-41cc-45ab-b2c1-b4187d823827",
"poaRequired": "true",
"fiatBalances": [
{
"id": "02ee1b09-9934-4dcc-8dec-91bf34b8f543",
"amount": "0.00",
"name": "eur",
"rate": 1,
"iban": "LT683130019950000568",
"status": "ACTIVE"
}
],
"cryptoBalances": [
{
"id": "f2de1f4b-916f-417e-9410-8bf4a70693ee",
"amount": "0.000000",
"name": "usdc",
"wallet": "0x2e90ca5bbe46d5ae23f2df90457d020391b92673",
"rate": 0.963728,
"networkConfig": {
"ethereum": {
"mainnet": false,
"name": "sepolia",
"withdrawal": {
"feeWithdrawal": 10,
"minWithdrawal": 15
},
"deposit": {
"minDeposit": 5
}
},
"polygon": {
"mainnet": false,
"name": "amoy",
"withdrawal": {
"feeWithdrawal": 10,
"minWithdrawal": 15
},
"deposit": {
"minDeposit": 5
}
}
}
},
{
"id": "7415034b-3dcf-4f45-a213-ce6361c248aa",
"amount": "0.000000",
"name": "usdt",
"wallet": "0x2e90ca5bbe46d5ae23f2df90457d020391b92673",
"rate": 0.963486,
"networkConfig": {
"ethereum": {
"mainnet": false,
"name": "sepolia",
"withdrawal": {
"feeWithdrawal": 10,
"minWithdrawal": 15
},
"deposit": {
"minDeposit": 5
}
},
"polygon": {
"mainnet": false,
"name": "amoy",
"withdrawal": {
"feeWithdrawal": 10,
"minWithdrawal": 15
},
"deposit": {
"minDeposit": 5
}
}
}
},
{
"id": "ca5f1989-978b-422c-b0bd-b799c5e32fe8",
"amount": "0.00000000",
"name": "ltc",
"wallet": "tltc1qvf4kplcdjzskhukeg58lnde4gxhqv822fpxm2t",
"rate": 128.12666666,
"networkConfig": {
"btc": {
"mainnet": false,
"name": "test",
"withdrawal": {
"feeWithdrawal": 0.002,
"minWithdrawal": 0.004
},
"deposit": {
"minDeposit": 0
}
}
}
},
{
"id": "b28d71d3-60ae-49ac-9346-26bf5358e198",
"amount": "0.00000000",
"name": "pol",
"wallet": "0x2e90ca5bbe46d5ae23f2df90457d020391b92673",
"rate": 0.39908402,
"networkConfig": {
"polygon": {
"mainnet": false,
"name": "amoy",
"withdrawal": {
"feeWithdrawal": 0.001,
"minWithdrawal": 0.00005
},
"deposit": {
"minDeposit": 0
}
}
}
},
{
"id": "d83263ca-3e1f-4190-8739-e99900758ed2",
"amount": "0.00000000",
"name": "eth",
"wallet": "0x2e90ca5bbe46d5ae23f2df90457d020391b92673",
"rate": 3169.4854887,
"networkConfig": {
"ethereum": {
"mainnet": false,
"name": "sepolia",
"withdrawal": {
"feeWithdrawal": 0.003,
"minWithdrawal": 0.006
},
"deposit": {
"minDeposit": 0
}
}
}
},
{
"id": "fae1baed-815b-4b5f-998b-d3b2c36145da",
"amount": "0.00000000",
"name": "btc",
"wallet": "tb1qsclk8wvk7zplp6t8f0954qddctqtvcrhea5gca",
"rate": 100686.13333333,
"networkConfig": {
"btc": {
"mainnet": false,
"name": "test",
"withdrawal": {
"feeWithdrawal": 0.0003,
"minWithdrawal": 0.0003
},
"deposit": {
"minDeposit": 0
}
}
}
}
]
}
Code: 400
Description: User exist
Example response
{
"errorCode": "P411",
"errorName": "user-exists"
}
Code: 400
Description: User of this country cannot have iban
Example response
{
"errorCode": "P431",
"errorName": "forbidden-country"
}
Add KYC file
Method: POST
Endpoint: /v1/user/kyc-files/:externalUserId
KYC files can be added all at once or you can add individual missing ones. Required files for each type of document:
- PASSPORT - front, selfie
- ID_CARD - front, back, selfie
- RESIDENCE_PERMIT - front, back, selfie
Request
Parameters - required
Name | Type | Required | Example | Description |
---|---|---|---|---|
externalUserId | string | Yes | f9b430dc-7e1a-42a0-bbb4-9003935ea9f9 | External user id (from your system) |
Request body (Content-Type: multipart/form-data) - required
Name | Type | Required | Description |
---|---|---|---|
front_id | file | Yes | Front photo of document passed in request. Allowed types: 'image/jpeg', 'image/png', 'image/jpg'. Maximum file size is 2MB |
back_id | file | No | Back photo of document passed in request. Required only if documentType is ID_CARD and RESIDENCE_PERMIT. Allowed types: 'image/jpeg', 'image/png', 'image/jpg'. Maximum file size is 2MB |
selfie | file | Yes | Customer face photo. Allowed types: 'image/jpeg', 'image/png', 'image/jpg'. Maximum file size is 2MB |
Response
Code: 200
Description: KYC files added
Example response
{
"message": "KYC files uploaded successfully"
}
Code: 400
Description: User does not exist
Example response
{
"errorCode": "P412",
"errorName": "invalid-user"
}
Code: 400
Description: Invalid file type
Example response
{
"errorCode": "P426",
"errorName": "invalid-file-type"
}
Add POA file
Method: POST
Endpoint: /v1/user/poa-files/:externalUserId
POA files must be added all at once. They can be a maximum of 3 files no larger than 5MB.
Request
Parameters - required
Name | Type | Required | Example | Description |
---|---|---|---|---|
externalUserId | string | Yes | f9b430dc-7e1a-42a0-bbb4-9003935ea9f9 | External user id (from your system) |
Request body (Content-Type: multipart/form-data) - required
Name | Type | Required | Description |
---|---|---|---|
files | file | Yes | POA files, maximum 3 files, no larger than 5MB. Allowed types: 'image/jpeg', 'image/png', 'image/jpg', 'application/pdf' |
Response
Code: 200
Description: POA files added
Example response
{
"message": "POA files uploaded successfully"
}
Code: 400
Description: File is too large
Example response
{
"errorCode": "P440",
"errorName": "file-too-large"
}
Code: 400
Description: File type is not supported
Example response
{
"errorCode": "P426",
"errorName": "invalid-file-type"
}
Code: 202
Description: POA verification pending
Example response
{
"errorCode": "P211",
"errorName": "poa-verification-pending"
}
Code: 400
Description: POA verification pending
Example response
{
"errorCode": "P447",
"errorName": "poa-already-verified"
}
Add user document verification
For all created users it is required to add documents for verification
Method: POST
Endpoint: /v1/user/verification
Request
Request body - required
Name | Type | Required | Description |
---|---|---|---|
externalUserId | string | Yes | External user id (from your system) |
birthDate | string | Yes | Birth date |
city | string | Yes | City |
street | string | Yes | Street |
number | string | Yes | House number |
postCode | string | Yes | Post code. Postal code should follow the format accepted in the given country. |
nationality | string | Yes | ISO 3166-1 alpha-2 country code. Nationality |
documentExpirationDate | string | Yes | Document expiration date |
incomeSource | string | Yes | Enum: [ 'BUSINESS_ACTIVITY', 'SALARY', 'OTHER', 'MAINTAINED_BY_FAMILY', 'INVESTMENTS', 'SOCIAL_BENEFITS', 'TENANCY' ] |
taxId | string | No | Client's tax residency list. Required only if incomeSource is BUSINESS_ACTIVITY |
additionalInfo | string | No | Aditional info to income source. Required only if incomeSource is SALARY, OTHER, MAINTAINED_BY_FAMILY, INVESTMENTS, SOCIAL_BENEFITS, TENANCY. |
occupation | string | Yes | Enum: [ 'IT', 'HEALTHCARE_AND_MEDICAL_SERVICES', 'FINANCE_AND_ACCOUNTING', 'EDUCATION_AND_TEACHING', 'SALES_AND_MARKETING', 'ENGINEERING', 'CUSTOMER_SERVICE', 'ADMINISTRATION_AND_OFFICE_MANAGEMENT', 'LEGAL_SERVICES', 'ARTS_AND_DESIGN', 'RETAIL_AND_SALES', 'CONSTRUCTION_AND_TRADES', 'HUMAN_RESOURCES', 'MANUFACTURING_AND_PRODUCTION', 'SCIENCE_AND_RESEARCH' ] |
riskLvl | string | Yes | Enum: [ 'LOW', 'MEDIUM', 'HIGH' ] |
Example body request
{
"externalUserId": "bca65c48-df49-4831-a7b2-de7903321581",
"email": "johndoe@gmail.com",
"phone": "48123123123",
"firstName": "John",
"lastName": "Doe",
"birthDate": "2000-01-01",
"city": "Rzeszów",
"street": "Adama Matuszczaka",
"number": "14/2",
"postCode": "12-123",
"country": "PL",
"nationality": "PL",
"citizenship": "PL",
"documentExpirationDate": "2030-01-01",
"documentNumber": "ABC12345",
"documentType": "ID_CARD",
"incomeSource": "SALARY",
"additionalInfo": "I am a programmer",
"occupation": "IT",
"riskLvl": "LOW"
}
Response
Code: 200
Description: User document verification added
Example response
{
"message": "Verification documents to user added successfully"
}
Code: 400
Description: User already verified
Example response
{
"errorCode": "P442",
"errorName": "user-already-verified"
}
Code: 400
Description: User has maximum number of verifications
Example response
{
"errorCode": "P430",
"errorName": "maximum-number-of-verifications"
}
Code: 400
Description: User does not exist
Example response
{
"errorCode": "P412",
"errorName": "invalid-user"
}
Code: 404
Description: Kyc file not found
Example response
{
"errorCode": "P427",
"errorName": "kyc-file-not-found"
}
Code: 202
Description: POA file not yet uploaded. Verification is pending and will resume after POA is added
Example response
{
"errorCode": "P210",
"errorName": "poa-file-not-found"
}
Code: 202
Description: POA verification pending
Example response
{
"errorCode": "P211",
"errorName": "poa-verification-pending"
}
Code: 400
Description: KYC verification is not valid or has expired
Example response
{
"errorCode": "P446",
"errorName": "kyc-verification-is-not-valid-or-has-expired"
}
Code: 400
Description: POA verification rejected
Example response
{
"errorCode": "P444",
"errorName": "poa-verification-rejected"
}
Code: 400
Description: POA already verified
Example response
{
"errorCode": "P447",
"errorName": "poa-already-verified"
}
Update existing user
Method: PATCH
Endpoint: /v1/user/:externalUserId
Include only fields you want to update. Unable to update country
Request
Parameters - required
Name | Type | Required | Example | Description |
---|---|---|---|---|
externalUserId | string | Yes | f9b430dc-7e1a-42a0-bbb4-9003935ea9f9 | External user id (from your system) |
Response
Code: 204
Description: User details updated
Example response
{
"message": "User updated successfully"
}
Code: 400
Description: User does not exist
Example response
{
"errorCode": "P412",
"errorName": "invalid-user"
}
Code: 400
Description: Changing country not possible
Example response
{
"errorCode": "P452",
"errorName": "country-change-not-possible"
}
Delete user
Method: DELETE
Endpoint: /v1/user/:externalUserId
Deletes user
Request
Parameters - required
Name | Type | Required | Example | Description |
---|---|---|---|---|
externalUserId | string | Yes | f9b430dc-7e1a-42a0-bbb4-9003935ea9f9 | External user id (from your system) |
Response
Code: 204
Description: User deleted
Example response
{
"message": "User deleted successfully"
}
Code: 400
Description: User does not exist
Example response
{
"errorCode": "P412",
"errorName": "invalid-user"
}
Code: 400
Description: User has balance greater than 5 EUR.
Example response
{
"errorCode": "P429",
"errorMessage": "User has balance greater than 5 EUR.",
"errorName": "user-balance-exceeds-limit-exception"
}
Suspend user
Method: PATCH
Endpoint: /v1/user/suspend/:externalUserId
Suspends user. User must not have any active cards to suspend them
Request
Parameters - required
Name | Type | Required | Example | Description |
---|---|---|---|---|
externalUserId | string | Yes | f9b430dc-7e1a-42a0-bbb4-9003935ea9f9 | External user id (from your system) |
Response
Code: 204
Description: User suspended
Example response
{
"message": "User suspended"
}
Code: 400
Description: User does not exist
Example response
{
"errorCode": "P412",
"errorName": "invalid-user"
}
Code: 400
Description: User has active cards and suspension is not possible
Example response
{
"errorCode": "P454",
"errorMessage": "User has active cards and suspension is not possible",
"errorName": "suspend-user-impossible"
}
Unsuspend user
Method: PATCH
Endpoint: /v1/user/unsuspend/:externalUserId
Unsuspends user
Request
Parameters - required
Name | Type | Required | Example | Description |
---|---|---|---|---|
externalUserId | string | Yes | f9b430dc-7e1a-42a0-bbb4-9003935ea9f9 | External user id (from your system) |
Response
Code: 204
Description: User unsuspended
Example response
{
"message": "User unsuspended"
}
Code: 400
Description: User does not exist
Example response
{
"errorCode": "P412",
"errorName": "invalid-user"
}
Get user balance
Method: GET
Endpoint: /v1/user/:externalUserId/balances
Request
Parameters - required
Name | Type | Required | Example | Description |
---|---|---|---|---|
externalUserId | string | Yes | f9b430dc-7e1a-42a0-bbb4-9003935ea9f9 | External user id (from your system) |
Response
Code: 200
Description: Returns all user balances
Response body explanation
{
"fiatBalances": [
{
"id": "Balance id (from our system)",
"amount": "Amount",
"name": "Currency name",
"rate": "Rate",
"iban": "IBAN number",
"status": "Enum: [ 'ACTIVE, 'WAITING_TO_BE_ACTIVATED' ]"
}
],
"cryptoBalances": [
{
"id": "Balance id (from our system)",
"amount": "Amount",
"name": "Currency name",
"wallet": "Wallet address",
"rate": "Rate",
"networkConfig": {
[networkName]: {
"mainnet": "Is mainnet network",
"name": "Network name",
"withdrawal": {
"feeWithdrawal": "Withdrawal fee",
"minWithdrawal": "Withdrawal min amount"
},
"deposit": {
"minDeposit": "Deposit min amount"
},
}
}
}
]
}
Example response
{
"fiatBalances": [
{
"id": "02ee1b09-9934-4dcc-8dec-91bf34b8f543",
"amount": "0.00",
"name": "eur",
"rate": 1,
"iban": "LT683130019950000568",
"status": "ACTIVE"
}
],
"cryptoBalances": [
{
"id": "f2de1f4b-916f-417e-9410-8bf4a70693ee",
"amount": "0.000000",
"name": "usdc",
"wallet": "0x2e90ca5bbe46d5ae23f2df90457d020391b92673",
"rate": 0.963728,
"networkConfig": {
"ethereum": {
"mainnet": false,
"name": "sepolia",
"withdrawal": {
"feeWithdrawal": 10,
"minWithdrawal": 15
},
"deposit": {
"minDeposit": 5
}
},
"polygon": {
"mainnet": false,
"name": "amoy",
"withdrawal": {
"feeWithdrawal": 10,
"minWithdrawal": 15
},
"deposit": {
"minDeposit": 5
}
}
}
},
{
"id": "7415034b-3dcf-4f45-a213-ce6361c248aa",
"amount": "0.000000",
"name": "usdt",
"wallet": "0x2e90ca5bbe46d5ae23f2df90457d020391b92673",
"rate": 0.963486,
"networkConfig": {
"ethereum": {
"mainnet": false,
"name": "sepolia",
"withdrawal": {
"feeWithdrawal": 10,
"minWithdrawal": 15
},
"deposit": {
"minDeposit": 5
}
},
"polygon": {
"mainnet": false,
"name": "amoy",
"withdrawal": {
"feeWithdrawal": 10,
"minWithdrawal": 15
},
"deposit": {
"minDeposit": 5
}
}
}
},
{
"id": "ca5f1989-978b-422c-b0bd-b799c5e32fe8",
"amount": "0.00000000",
"name": "ltc",
"wallet": "tltc1qvf4kplcdjzskhukeg58lnde4gxhqv822fpxm2t",
"rate": 128.12666666,
"networkConfig": {
"btc": {
"mainnet": false,
"name": "test",
"withdrawal": {
"feeWithdrawal": 0.002,
"minWithdrawal": 0.004
},
"deposit": {
"minDeposit": 0
}
}
}
},
{
"id": "b28d71d3-60ae-49ac-9346-26bf5358e198",
"amount": "0.00000000",
"name": "pol",
"wallet": "0x2e90ca5bbe46d5ae23f2df90457d020391b92673",
"rate": 0.39908402,
"networkConfig": {
"polygon": {
"mainnet": false,
"name": "amoy",
"withdrawal": {
"feeWithdrawal": 0.001,
"minWithdrawal": 0.00005
},
"deposit": {
"minDeposit": 0
}
}
}
},
{
"id": "d83263ca-3e1f-4190-8739-e99900758ed2",
"amount": "0.00000000",
"name": "eth",
"wallet": "0x2e90ca5bbe46d5ae23f2df90457d020391b92673",
"rate": 3169.4854887,
"networkConfig": {
"ethereum": {
"mainnet": false,
"name": "sepolia",
"withdrawal": {
"feeWithdrawal": 0.003,
"minWithdrawal": 0.006
},
"deposit": {
"minDeposit": 0
}
}
}
},
{
"id": "fae1baed-815b-4b5f-998b-d3b2c36145da",
"amount": "0.00000000",
"name": "btc",
"wallet": "tb1qsclk8wvk7zplp6t8f0954qddctqtvcrhea5gca",
"rate": 100686.13333333,
"networkConfig": {
"btc": {
"mainnet": false,
"name": "test",
"withdrawal": {
"feeWithdrawal": 0.0003,
"minWithdrawal": 0.0003
},
"deposit": {
"minDeposit": 0
}
}
}
}
]
}
Code: 400
Description: User does not exist
Example response
{
"errorCode": "P412",
"errorName": "invalid-user"
}
Get user transaction history
Transaction history can be returned to one year ago. It is returned for the selected month.
Explanation of types:
- exchange - currency exchange
- atmFee - fee charged for ATM transaction
- sepaDeposit - incoming SEPA transfer
- sepaTransfer - outgoing SEPA transfer
- transfer - transfer
- cardTransaction - card transaction
- cryptoDeposit - crypto deposit
- cryptoWithdrawal - crypto withdrawal
- atmWithdrawal - atm withdrawal
- fiatDeposit - fiat deposit
- refund - refund
- cashback - cashback
- payment - card payment
- partialRefund - partial refund
- fiatWithdrawal - fiat withdrawal
- transaction - transaction
Explanation of status:
- SUCCESSFUL - transaction successful
- UNSUCCESSFUL - transaction unsuccessful
- IN_PROGRESS - transaction in progress
- IN_PROGRESS_TR_DATA - transaction needs travel rule data completion
Method: GET
Endpoint: /v1/user/transaction-history/:externalUserId/:month/:year
Request
Parameters - required
Name | Type | Required | Example | Description |
---|---|---|---|---|
externalUserId | string | Yes | f9b430dc-7e1a-42a0-bbb4-9003935ea9f9 | External user id (from your system) |
month | number | Yes | 1 | Month |
year | number | Yes | 2025 | Year |
Response
Code: 200
Description: Returns user transaction history
Response body explanation
[
{
"createdAt": "Transaction created date",
"type": "Transaction type",
"amount": "Transaction amount",
"amountFrom": "Transaction from amount, if the transaction is an exchange",
"currency": "Transaction currency",
"currencyFrom": "Transaction from currency, if the transaction is an exchange",
"status": "Transaction status"
}
]
Example response
[
{
"createdAt": "2025-01-20T10:33:23.808Z",
"type": "exchange",
"amount": 0.00220961,
"amountFrom": -20,
"currency": "eth",
"currencyFrom": "doge",
"status": "SUCCESSFUL"
},
{
"createdAt": "2025-01-20T09:59:38.233Z",
"type": "exchange",
"amount": 26.91447658,
"amountFrom": -10,
"currency": "doge",
"currencyFrom": "eur",
"status": "SUCCESSFUL"
},
{
"createdAt": "2025-01-20T09:35:36.182Z",
"type": "exchange",
"amount": 99.9651492,
"amountFrom": -10,
"currency": "doge",
"currencyFrom": "eur",
"status": "SUCCESSFUL"
}
]
Code: 400
Description: Invalid month or year
Example response
{
"errorCode": "P403",
"errorMessage": "
The month cannot be less than 1,
The month cannot be longer than 12,
The year must be the current year or the previous year
"
}
Code: 400
Description: Invalid date
Example response
{
"errorCode": "P435",
"errorName": "invalid-date"
}
Code: 400
Description: User does not exist
Example response
{
"errorCode": "P412",
"errorName": "invalid-user"
}