The P100 API uses a consistent JSON structure for error responses. Understanding the two primary types of errors is key to building a robust integration.
Error Response Structure#
You will encounter two types of error structures depending on the nature of the issue: standard API errors and data validation errors.
1. Standard API Errors (Business Logic)#
These errors relate to business logic, resource states, or permissions.
They always feature a three-field structure.{
"errorCode": "P424",
"errorName": "source-or-destination-required",
"errorMessage": "Source or destination must be provided."
}
errorCode: A unique code (P424
, P433
, etc.) for driving application logic.
errorName: A human-readable identifier for the error.
errorMessage: A detailed description for debugging and logging purposes.
2. Validation Errors (P403)#
These errors are automatically generated when request data fails format validation (e.g., invalid email format, missing required field).
They have a streamlined structure.{
"errorCode": "P403",
"errorMessage": "currency must be one of the following values: btc, eth, usdt. Amount can have at most 8 decimal places."
}
Fixed Error Code: Always returns errorCode: "P403"
.
errorName is Omitted: This field is not included.
Concatenated Messages: errorMessage
may contain multiple validation failures in a single string.
Always a 400 Status: The response will always have HTTP 400 Bad Request
.
Best Practices for Error Handling#
Regardless of the error type, follow this unified approach:1.
Check the HTTP Status Code First
Use the status code (4xx
or 5xx
) as the initial indicator of an error.
2.
If errorCode
is P403
, handle it as a general validation failure (e.g., display an "invalid input" message).
For all other codes (P424
, P433
, etc.), trigger specific logic (e.g., "Insufficient funds").
3.
Log errorMessage for Debugging
Always log the full errorMessage
to aid in diagnosing issues,
but do not display it to the end-user.
Complete Error Code Reference#
The following sections contain all possible error codes returned by the P100 API, organized by HTTP status code for easy reference.HTTP: 400 - Bad Request Errors#
Error Code | Error Name | Error Message |
---|
P403 | | transferTitle should not be empty |
P410 | invalid-currency | Currency not found |
P411 | user-exists | User exists |
P412 | invalid-user | User does not exist |
P424 | source-or-destination-required | Source or destination must be provided. |
P426 | invalid-file-type | File type is not supported. Allowed types: image/jpeg, image/png, image/jpg |
P429 | user-balance-exceeds-limit-exception | User has balance greater than {amount} EUR |
P430 | maximum-number-of-verifications | User has maximum number of verifications |
P431 | forbidden-country | User of this country cannot have iban. |
P432 | invalid-exchange-lock | Exchange lock is not valid or not exist. |
P433 | Insufficient funds | insufficient-funds |
P434 | invalid-card | Card does not exist |
P435 | invalid-date | Invalid date. Date must be between {year} and {year} |
P436 | requirements-not-found | Requirements not found. |
P437 | must-be-owner | User must be the owner of the wallet |
P439 | no-kyc-files | No kyc files to add |
P440 | file-too-large | File is too large |
P442 | user-already-verified | User already verified |
P444 | poa-verification-rejected | POA verification rejected |
P446 | kyc-verification-is-not-valid-or-has-expired | KYC verification is not valid or has expired |
P447 | poa-already-verified | POA already verified |
P450 | KYC already verified | kyc-already-verified |
P451 | forbidden-country-card | User of this country cannot have card |
P452 | country-change-not-possible | Changing country not possible - contact us |
P453 | too-many-kyc-verification-retires | Verification process has been started too many times |
P454 | suspend-user-impossible | User has active cards and suspension is not possible |
P455 | user-suspended | User suspended |
P457 | currencies-cannot-be-the-same | currencyFrom and currencyTo cannot be the same |
P500 | unknown-exception | Please contact P100 |
P501 | service-temporarily-unavailable | Service temporarily unavailable |
P403 – An aggregate validation error code (HTTP 400). The errorMessage field may contain multiple, concatenated messages about various failed conditions (e.g., invalid data format, missing field).
HTTP: 401 - Unauthorized#
Response | Description |
---|
Access Denied. xo1 | API key not provided |
Access Denied. xo2 | Invalid API key provided |
Access Denied. xo3 | IP address not whitelisted (production only) |
HTTP: 404 - Not Found Errors#
Error Code | Error Name | Error Message |
---|
P421 | withdrawal-not-found | Withdrawal not found |
P423 | transfer-not-found | Transfer not found |
P425 | exchange-not-found | Exchange not found |
P427 | kyc-file-not-found | Kyc file not found. Missing files: [varies] |
P428 | sepa-transfer-not-found | Sepa transfer not found |
P445 | kyc-verification-not-found | KYC verification not found |
P427 – This error indicates that one or more required KYC files are missing. The error message will specify which of the following files are absent: FRONT PHOTO OF DOCUMENT, FACE PHOTO, and/or BACK PHOTO.
HTTP: 202 - Accepted (Pending Responses)#
Error Code | Error Name | Error Message |
---|
P210 | poa-file-not-found | POA file not yet uploaded. Verification is pending and will resume after POA is added |
P211 | poa-verification-pending | POA verification pending |
P212 | kyc-verification-pending | KYC verification pending |
Need Help?#
📖 FAQ
Find answers to the most common questions about our API.💬 Support
Can't find what you're looking for? Contact our support team for assistance.