---
title: "Catalogue complet : catégories, lettres (fournisseurs, champs), calculateurs, outils IA, devis, tarifs"
method: GET
path: "/v1/catalogue"
tags: ["B2B (v1)"]
---

# Catalogue complet : catégories, lettres (fournisseurs, champs), calculateurs, outils IA, devis, tarifs

`GET /v1/catalogue`

## Request

- Base URL: `https://api.vitef.com`
- URL: `https://api.vitef.com/v1/catalogue`
- Auth: HTTP bearer

Réponse mise en cache côté client : en-têtes ETag et Cache-Control ; renvoyez If-None-Match pour obtenir 304.

## Headers

- `if-none-match` string

## Response `200`

Catalogue

- Catalogue
  - `categories` object[], required
    - `slug` string, required
    - `icon` string, required
    - `title` string, required
    - `short` string, required
    - `url` string, required
  - `letters` LetterSummary[], required
    - `slug` string, required
    - `category` string, required
    - `icon` string, required
    - `title` string, required
    - `short` string, required
    - `h1` string, required
    - `badge` string, required
    - `url` string, required
    - `providerLabel` string, nullable, required
    - `providers` LetterProvider[], required
      - `slug` string, required
      - `name` string, required
      - `address` string[], nullable, required: Dernière adresse connue du destinataire (lignes), relevée sur sa source officielle et donnée à titre indicatif : elle a pu changer et doit être vérifiée par l’utilisateur. Sert de valeur par défaut au champ `recipientAddress`, toujours modifiable ; une valeur transmise dans `recipientAddress` la remplace.
      - `url` string, required
    - `fields` Field[], required
      - `key` string, required
      - `label` string, required
      - `type` 'text' | 'number' | 'date' | 'tel' | 'email' | 'textarea' | 'radio' | 'select' | 'tabs', required
      - `optional` boolean, required
      - `placeholder` string
      - `hint` string
      - `suffix` string
      - `options` object[]
        - `value` string, required
      - `default` string
      - `rows` integer
      - `autocomplete` 'address' | 'company' | 'commune'
      - `big` boolean: Calculateurs : champ principal, mis en avant.
      - `when` object[]: Affiché seulement si, pour chaque condition, le champ `key` (choix) vaut l’une des valeurs `in` ; un choix non touché compte pour sa première option. Masqué, le champ garde sa valeur.
        - `key` string, required
        - `in` string[], required
    - `signature` 'optional' | 'required' | 'paper': `optional` : nom imprimé, signature dessinée possible (`signatureImage`) ; `required` : signature dessinée exigée avant l’envoi ; `paper` : PDF à imprimer et signer à la main (pas d’envoi postal).
    - `signatureNote` string, nullable: Explication à afficher quand la règle n’est pas `optional`.
  - `calculators` CalculatorSummary[], required
    - `slug` string, required
    - `group` string, required
    - `icon` string, required
    - `title` string, required
    - `short` string, required
    - `h1` string, required
    - `intro` string, required
    - `url` string, required
    - `fields` Field[], required
      - `key` string, required
      - `label` string, required
      - `type` 'text' | 'number' | 'date' | 'tel' | 'email' | 'textarea' | 'radio' | 'select' | 'tabs', required
      - `optional` boolean, required
      - `placeholder` string
      - `hint` string
      - `suffix` string
      - `options` object[]
        - `value` string, required
      - `default` string
      - `rows` integer
      - `autocomplete` 'address' | 'company' | 'commune'
      - `big` boolean: Calculateurs : champ principal, mis en avant.
      - `when` object[]: Affiché seulement si, pour chaque condition, le champ `key` (choix) vaut l’une des valeurs `in` ; un choix non touché compte pour sa première option. Masqué, le champ garde sa valeur.
        - `key` string, required
        - `in` string[], required
    - `presets` object[], required
      - `label` string, required
      - `slug` string, required
      - `values` Values, required: Valeurs du formulaire, par clé de champ.
      - `url` string, required
    - `initialValues` object, required: Valeurs initiales du jour (dates relatives résolues).
    - `letter` string, nullable, required
    - `route` CalculatorRoute, nullable, required: Itinéraire routier (OSRM) entre les champs adresse `from` et `to`, qui remplit le champ `distance` (km, aller simple ; × 2 × `roundTrips` si ce champ est renseigné). `POST …/compute` le calcule si `distance` est absent.
      - `from` string, required
      - `to` string, required
      - `distance` string, required
      - `roundTrips` string
    - `fuelPrice` object, nullable, required: Champ carburant et champ prix (€/L) prérempli avec le prix moyen national du jour (`GET /v1/fuel/prices`).
      - `fuel` string, required
      - `price` string, required
    - `expenses` object, nullable: Mode « dépenses de groupe » (qui doit combien à qui) : onglets [calcul simple, dépenses de groupe] et exemple de départ. Calcul local et déterministe (catalogue, expenses.ts), montants en centimes.
      - `tabs` string[], required
      - `example` ExpenseGroup, required
        - `people` string[], required: Participants ; désignés ensuite par leur index (0, 1, 2…).
        - `expenses` object[], required
          - `label` string, required
          - `amount` integer, required: Centimes.
          - `payer` integer, required: Index du participant qui a payé.
          - `split` object
            - `kind` 'equal' | 'exact', required: `equal` : parts égales entre `among` ; `exact` : montants de `amounts`.
            - `among` integer[]: `equal` : index des participants concernés (absent ou vide : tous).
            - `amounts` integer[]: `exact` : part de chacun en centimes, par index (0 : non concerné).
  - `tools` ToolSummary[], required
    - `slug` string, required
    - `icon` string, required
    - `title` string, required
    - `short` string, required
    - `h1` string, required
    - `intro` string, required
    - `url` string, required
    - `inputs` Field[], required
      - `key` string, required
      - `label` string, required
      - `type` 'text' | 'number' | 'date' | 'tel' | 'email' | 'textarea' | 'radio' | 'select' | 'tabs', required
      - `optional` boolean, required
      - `placeholder` string
      - `hint` string
      - `suffix` string
      - `options` object[]
        - `value` string, required
      - `default` string
      - `rows` integer
      - `autocomplete` 'address' | 'company' | 'commune'
      - `big` boolean: Calculateurs : champ principal, mis en avant.
      - `when` object[]: Affiché seulement si, pour chaque condition, le champ `key` (choix) vaut l’une des valeurs `in` ; un choix non touché compte pour sa première option. Masqué, le champ garde sa valeur.
        - `key` string, required
        - `in` string[], required
  - `quotes` QuoteSummary[], required
    - `slug` string, required
    - `icon` string, required
    - `title` string, required
    - `short` string, required
    - `h1` string, required
    - `intro` string, required
    - `url` string, required
    - `trade` string, required
    - `route` object, nullable, required: Champs adresse entre lesquels l’itinéraire est calculé.
      - `from` string, required
      - `to` string, required
    - `steps` object[], required
      - `title` string, required
      - `fields` Field[], required
        - `key` string, required
        - `label` string, required
        - `type` 'text' | 'number' | 'date' | 'tel' | 'email' | 'textarea' | 'radio' | 'select' | 'tabs', required
        - `optional` boolean, required
        - `placeholder` string
        - `hint` string
        - `suffix` string
        - `options` object[]
          - `value` string, required
        - `default` string
        - `rows` integer
        - `autocomplete` 'address' | 'company' | 'commune'
        - `big` boolean: Calculateurs : champ principal, mis en avant.
        - `when` object[]: Affiché seulement si, pour chaque condition, le champ `key` (choix) vaut l’une des valeurs `in` ; un choix non touché compte pour sa première option. Masqué, le champ garde sa valeur.
          - `key` string, required
          - `in` string[], required
    - `lead` QuoteLead, required: Demande de mise en relation du devis : une case par canal, textes versionnés.
      - `offer` string, required: Offre portée par le formulaire du devis (catalogue offers.ts).
      - `phoneRule` 'standard' | 'enr', required: `enr` : rénovation énergétique, rappel sous 5 jours ouvrés.
      - `consents` object[], required
        - `recipient` string, required
        - `channel` 'email' | 'phone', required
        - `version` string, required: Version du texte de consentement (demandes de mise en relation faites sur vitef.com).
        - `label` string, required: Libellé de la case, à afficher tel quel (jamais pré-cochée).
        - `notice` string, required: Précision sous la case, à afficher telle quelle.
  - `lookups` LookupSummary[], required
    - `slug` string, required
    - `icon` string, required
    - `title` string, required
    - `short` string, required
    - `h1` string, required
    - `intro` string, required
    - `url` string, required
    - `api` object, required: Opérations /v1 du service (recherche, puis fiche).
      - `search` string, required
      - `detail` string, required
  - `lifeEvents` object[]: Événements de vie : parcours par moment de vie (étapes dans l’ordre, outils du catalogue).
    - `slug` string, required
    - `icon` string, required
    - `art` string, required: Illustration de catégorie.
    - `title` string, required
    - `short` string, required
    - `h1` string, required
    - `intro` string, required
    - `url` string, required
    - `steps` object[], required
      - `key` string, required: Identifiant stable de l’étape dans son parcours.
      - `title` string, required
      - `when` string
      - `text` string, required
      - `tools` object[], required
        - `kind` 'letter' | 'calculator' | 'quote' | 'tool' | 'lookup', required
        - `slug` string, required
    - `faq` Faq[], required
      - `q` string, required
      - `a` string, required
  - `social` object[]: Comptes Vitef sur les réseaux sociaux.
    - `network` string, required: instagram, facebook, youtube ; un réseau inconnu du client est ignoré.
    - `label` string, required
    - `handle` string, required
    - `url` string, required
    - `icon` string, required: Tracé SVG du logo (viewBox 0 0 24 24, une couleur).
  - `pricing` object, required
    - `delivery` object[], required
      - `mode` 'pdf' | 'simple' | 'rec' | 'ar' | 'lre', required
      - `icon` string, required
      - `label` string, required
      - `description` string, required
      - `priceCents` integer, required
      - `recommended` boolean, required
      - `channel` 'none' | 'postal' | 'electronic'
      - `professionalOnly` boolean: Réservé à un destinataire professionnel (LRE).

## Other responses

- `304`: Non modifié
- `400`: Requête invalide
- `401`: Authentification requise ou invalide
- `403`: Accès refusé (`insufficient_scope`, `account_suspended`, `live_not_enabled`)
- `429`: Trop de requêtes
- `500`: Erreur interne

---

[API](https://skmtc.dev/vitef/apis/api-vitef.md) · [All operations](https://skmtc.dev/vitef/apis/api-vitef/llms.txt) · [OpenAPI document](https://skmtc.dev/vitef/apis/api-vitef/revisions/7bc459d9ef90?raw)
