# 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.