# SDK Errors

## Overview

When integrating the Ryft SDK, it's important to handle **potential errors** that may arise during the payment process. Proper error handling ensures a smooth user experience and helps in diagnosing issues effectively.

## Common SDK Errors

The following table lists common error codes that you may encounter when processing payments using the Ryft SDK, along with their descriptions:

| lastError | Description |
|  --- | --- |
| insufficient_funds | The cardholder has insufficient funds to complete the transaction |
| declined_do_not_honour | The cardholder's bank declined the payment |
| invalid_card_number | The card number provided was invalid |
| cvv2_failure | The CVV2 code provided was incorrect |
| cvc_required | The CVV2 code is required but was not provided |
| restricted_card | An account restriction has been placed on the cardholder's account by the card issuer |
| blacklisted_card | The card has been blacklisted due to previous fraudulent activity |
| blacklisted_bin | The card's BIN (Bank Identification Number) has been blacklisted |
| blacklisted_country | The card's country has been blacklisted |
| blacklisted_ip | The IP of the cardholder has been blacklisted |
| risk_declined | The payment was declined due to one or more risk/fraud-related rules being triggered |
| security_violation | The payment was declined due to a security violation |
| expired_card | The card has expired |
| gateway_reject | The card's postcode or country is not supported by the merchant |
| suspected_fraud | The payment was declined due to suspected fraud |
| contact_issuer | The cardholder's bank has requested that you contact them for more information |
| not_permitted | The payment was declined because it is not permitted for this cardholder or merchant |
| invalid_account | The cardholder's bank declined the payment due to an issue with your account or card number |
| closed_account | The cardholder's account has been closed |
| account_not_activated | The cardholder's account is not yet activated |
| pickup_card | The cardholder's bank declined the payment and requested that you pick up the card |
| stolen_card | The card has been reported as stolen |
| limit_exceeded | The cardholder would exceed the maximum amount allowed by the bank for a single transaction |
| withdrawal_limit_exceeded | The cardholder would exceed the maximum amount allowed by the bank for withdrawals |
| issuer_decline | The cardholder's bank declined the payment for an unspecified reason |
| system_error | The issuing bank's system is currently unavailable or experiencing issues |
| issuer_error | The issuing bank's experienced an error while processing the payment |
| blocked_by_cardholder | The cardholder has blocked the transaction |
| 3ds_authentication_failure | The cardholder failed 3DS authentication |
| 3ds_cardholder_not_participating | The cardholder uses a card that does not participate in 3DS authentication, but the transaction requires it |
| payment_method_not_available | The selected payment method is not available for this transaction |
| payment_method_option_amex_not_available | American Express payments are not enabled for this merchant |
| credit_card_not_permitted | Credit Card payments are not enabled for this merchant |
| unknown_error | An unknown error occurred, please contact us |


Please note we may add new error codes in the future as non-breaking changes, so please ensure your integration can handle unexpected error codes gracefully.