---
title: "Card catalogue: the banks and cards the Coach knows"
method: GET
path: "/api/v1/coach/cards"
tags: ["Coach"]
---

# Card catalogue: the banks and cards the Coach knows

`GET /api/v1/coach/cards`

## Request

- Base URL: `https://atlas.hellosafe.com`
- URL: `https://atlas.hellosafe.com/api/v1/coach/cards`
- Auth: API key in header `x-atlas-key-id` and API key in header `x-atlas-timestamp` and API key in header `x-atlas-signature`

The bank cards the Coach knows, per country of residence: each bank, then its cards, with the name printed on the card, its picture, the tier the Coach reads from that name, and the catalogueId that names the card exactly in POST /api/v1/coach/bilan. Built for a card picker: the traveller's bank, then their card, then the bilan with { catalogueId }. byBankTier says whether { bank, network, tier } would land on that same card: at a bank with two cards of one tier, only the most basic one is reachable that way. Travellers whose bank is not listed fall back to the generic { network, tier } profiles listed under generic. Signed like every endpoint, with an empty body: the query string is not signed. Does not consume quota.

## Query parameters

- `country` string
- `lang` 'fr' | 'en'

## Response `200`

The catalogue.

- CoachCardsResponse
  - `ok` boolean
  - `country` string, nullable: The country asked for, or null when every country was listed.
  - `key` object
    - `keyId` string
    - `mode` 'sandbox' | 'live'
    - `cardModes` string[]: The card modes this key may send to POST /api/v1/coach/bilan.
  - `countries` object[]: Every country with a bank list, whichever country was asked for.
    - `code` string
    - `market` string
    - `banks` integer
    - `cards` integer
  - `banks` object[]
    - `name` string: The bank name the { bank, network, tier } mode accepts.
    - `country` string
    - `logoUrl` string, nullable
    - `cards` object[]: Most basic first.
      - `catalogueId` integer: Names this card exactly: send it as card.catalogueId.
      - `name` string: The card's name as printed.
      - `network` string, nullable: visa, mastercard, amex...
      - `tier` 'entry' | 'mid' | 'premium' | 'elite' | 'business' | 'null', nullable: The range the Coach reads from the card's name. Null when the name carries no range word.
      - `byBankTier` boolean: True when { bank, network, tier } lands on this very card.
      - `imageUrl` string, nullable
  - `generic` object[]: Networks and the tiers with a generic profile of their own, for a bank that is not listed.
    - `network` string
    - `tiers` string[]
  - `tiers` object[]: What each tier reads as on a card.
    - `tier` string
    - `examples` string[]

## Other responses

- `400`: Malformed request.
- `401`: Missing, expired or invalid signature.
- `403`: The key does not carry the required scope.

---

[API](https://skmtc.dev/hellosafe/apis/hellosafe-travel-insurance-api.md) · [All operations](https://skmtc.dev/hellosafe/apis/hellosafe-travel-insurance-api/llms.txt) · [OpenAPI document](https://skmtc.dev/hellosafe/apis/hellosafe-travel-insurance-api/revisions/8185e81c9817?raw)
