> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fexco.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Handle domestic and unsupported cards

> How to detect and handle cards that are not eligible for DCC in the rate service response.

Not every card presented at the point of sale is eligible for DCC.
Domestic cards, unrecognized BINs, unsupported card schemes, and
pre-paid cards all result in a "no offer" response from the rate
service. Your integration must detect these responses and process the
transaction in the merchant's local currency without presenting a
DCC offer to the cardholder.

This page explains why a card may not be eligible, how each rate API
signals a no-offer result, and what your integration needs to do in
each case.

## Why a card may not be eligible

The rate service evaluates the card BIN, scheme, and currency
against the merchant's DCC configuration. If any check fails, no
DCC offer is returned.

The following accordion describes the most common scenarios where DCC
cannot be offered, and explains why each one occurs.

> [accordion] The cardholder's currency is the same as the merchant's currency
>
> This is a domestic card. DCC only applies when the cardholder's
> currency differs from the merchant's base currency. When the two
> match, there is nothing to convert.

> [accordion] The card BIN is not recognized
>
> The BIN is not in Fexco's card range tables, so the card issuer
> or currency cannot be determined. DCC cannot be offered without
> knowing the cardholder's currency.

> [accordion] The card scheme is not enabled for DCC
>
> The card belongs to a scheme that has not been configured for DCC
> on the merchant's template. Contact your Fexco project manager to
> check which schemes are enabled for your acquirer.

> [accordion] The card is ineligible for DCC under card scheme rules
>
> Visa and Mastercard identify certain cards and account ranges as
> ineligible for currency conversion at the point of interaction.
> No offer is returned for these cards, regardless of the card's
> currency. This includes:
>
> * Cards or accounts identified in the Mastercard Parameter Extract
>   (MPE) as ineligible for point of interaction (POI) currency
>   conversion.
> * Visa account ranges enabled with the Visa Multi-Currency
>   Solution.
> * Travel prepaid cards, including Visa TravelMoney.
>
> Fexco maintains these exclusions in its card range tables, so no
> additional checks are required in your integration.

> [accordion] No exchange rate is available for this currency pair
>
> The card is a recognized foreign card, but Fexco does not
> currently have an exchange rate for that currency pair. This can
> happen if the currency is not supported or if rates are
> temporarily unavailable.

> [accordion] The transaction amount is at or below the contactless limit
>
> The amount is at or below the contactless Transaction Lower
> Limit (TLL). The TLL is an optional per-merchant or per-ATM
> threshold configured by Fexco as part of your acquirer setup.
> When a TLL is configured, DCC is not offered for contactless
> transactions where the amount is equal to or less than the
> threshold. Contact your Fexco project manager to check whether
> a TLL is configured for your merchants.

## Filter domestic cards before the rate request (optional)

For card-present transactions, filtering domestic cards at the
terminal using EMV data is recommended before sending a rate request.
This avoids unnecessary rate requests for cards that will not receive
a DCC offer.

To filter domestic cards, compare EMV tag `5F28` (Issuer Country Code)
with EMV tag `9F1A` (Terminal Country Code):

| Condition | Action |
| :- | :- |
| `5F28` equals `9F1A` | The card is domestic. Do not send a rate request. Process the transaction in the merchant's local currency. |
| `5F28` does not equal `9F1A` | The card may be eligible. Send a rate request. |
| Transaction is non-EMV | Send a rate request. The rate service identifies domestic cards from the BIN and returns no offer. |

> [!NOTE]
>
> EMV filtering is not practical for card-not-present (CNP)
> transactions, as EMV tags are not available. For CNP transactions,
> send the rate request and let the rate service identify domestic
> cards.

The following diagram shows the order of the checks and how each API signals
a failed check.

Click each check to see why it fails

✓
ALL PASS

DCC offer returned
Present the choice to the cardholder

<ol />

## How Rate Service Classic and Rate Service Connect signal no eligibility

Rate Service Classic and Rate Service Connect handle ineligible cards differently. Your
integration logic depends on which API you use.

### Rate Service Classic

Rate Service Classic returns an HTTP `200` with an empty response body (`{}`)
when the card is not eligible for DCC. This applies to all
no-offer scenarios, whether the card is domestic, unrecognized,
pre-paid, or belongs to an unsupported scheme.

```json theme={null}
{}
```

An empty response body with a `200` status code means DCC is not
available for this card. Process the transaction in the merchant's
local currency. Check whether the response body is empty before
attempting to parse rate offer fields.

> [!NOTE]
>
> Rate Service Classic does not return an error code or message for ineligible
> cards. The empty body is the only signal.

### Rate Service Connect

Rate Service Connect returns an HTTP `400` with a JSON error body that includes
a specific error code and message. The error code tells you exactly
why the card is not eligible.

The following table lists the eligibility-related error codes.

| Error code | Scenario | Message |
| :- | :- | :- |
| 22 | Domestic card (base currency equals cardholder currency). | Domestic Card, DCC not available. |
| 5 | BIN not recognized. | Unrecognised Card, DCC not available. |
| 99 | Foreign card, but no rate is available for the currency. | Foreign Card, DCC not available. |
| 97 | Transaction amount is at or below the contactless TLL. | DCC not available as the transaction amount was less than or equal to the Contactless Transaction Lower Limit (TLL). |
| 8 | Card type not supported for DCC. | Unsupported card type. |

A Rate Service Connect error response for an ineligible card looks like this:

```json theme={null}
{
  "timestamp": "2026-09-20T10:39:12Z",
  "status": 400,
  "error": "Bad Request",
  "message": "Domestic Card, DCC not available",
  "path": "/dcc/offers",
  "details": [
    {
      "code": "22",
      "title": "Domestic Card",
      "message": "Domestic Card, DCC not available"
    }
  ]
}
```

## Handle a no-offer response

When the rate service indicates that a card is not eligible for DCC,
your integration must handle the response as described below.

1. **Detect the no-offer response**

   Check the response from the rate service before presenting a DCC
   offer.

   * **Rate Service Classic**: Check whether the response body is empty
     (`{}`). If it is, no DCC offer is available.
   * **Rate Service Connect**: Check whether the HTTP status is `400` and the
     error code is one of the eligibility codes listed above (22,
     5, 99, 97, or 8).

2. **Process in the local currency**: When no DCC offer is available, process the transaction in the
   merchant's base currency. Do not present a currency choice to
   the cardholder.

3. **Do not retry the same card**: A no-offer result for a given BIN and merchant is deterministic.
   The same card at the same merchant will produce the same result.
   Do not retry the rate request for the same transaction.

> [!WARNING]
>
> Never present a DCC offer screen to the cardholder when the rate
> service returns a no-offer response. Processing must continue in
> the merchant's local currency.

## Distinguishing no-offer from errors

Not every non-success response means the card is ineligible. The
following table helps you distinguish between a genuine no-offer
result and a request or server error that needs a different response.

| API | No-offer (card not eligible) | Request error | Server error |
| :- | :- | :- | :- |
| Rate Service Classic | HTTP `200` with empty body `{}`. | HTTP `400` (missing required field, for example, no base amount). | HTTP `500` (internal server error). |
| Rate Service Connect | HTTP `400` with error code 5, 8, 22, 97, or 99. | HTTP `400` with error code 2 or 4 (validation or unknown merchant). | HTTP `500` (internal server error). |

For request errors, check your request parameters. For server
errors, retry with exponential backoff or contact Fexco support.
For no-offer results, process in the local currency without retry.

For the full error reference, see
[Error handling](https://docs.fexco.com/dcc/api-reference/error-handling.md).

## Next steps

* [Request a DCC offer (Rate Service Classic)](https://docs.fexco.com/dcc/guides/rate-service/dcc-offer-rate-service-classic.md):
  see the full request and response flow for Rate Service Classic.
* [Request a DCC offer (Rate Service Connect)](https://docs.fexco.com/dcc/guides/rate-service/dcc-offer-rate-service-connect.md):
  see the full request and response flow for Rate Service Connect.
* [Handle rate expiry](https://docs.fexco.com/dcc/guides/rate-service/rate-expiry.md): handle
  cases where a valid DCC offer expires before the cardholder responds.
* [Troubleshoot rate service errors](https://docs.fexco.com/dcc/guides/rate-service/troubleshoot.md):
  resolve common rate service errors.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.