---
title: "Lister les devis"
method: GET
path: "/quotes"
tags: ["Quotes"]
---

# Lister les devis

`GET /quotes`

## Request

- Base URL: `https://api.swipify.fr/api/v1`
- URL: `https://api.swipify.fr/api/v1/quotes`
- Auth: API key in header `X-API-Key`

Devis émis par l'organisation, paginés. Scope requis : `quotes:read`.

## Query parameters

- `page` integer
- `pageSize` integer
- `status` 'draft' | 'validated' | 'sent' | 'accepted' | 'rejected' | 'withdrawn'
- `dateFrom` string, date
- `dateTo` string, date
- `clientId` integer
- `sortOrder` 'asc' | 'desc'

## Response `200`

Liste paginée de devis

- object
  - `data` Quote[]
    - `id` integer
    - `number` string, nullable
    - `draftNumber` string, nullable
    - `status` string
    - `version` integer
    - `object` string, nullable
    - `date` string, date-time, nullable
    - `validUntil` string, date-time, nullable
    - `acceptanceMode` string
    - `paymentSchedule` object[], nullable: Échéancier imprimé à côté des totaux du devis, null sans échéancier. Des acomptes, chacun avec `percent` ou `amount` (montant TTC fixe), puis le solde en dernier, qui ne porte que `when` et prend le reste au centime près. Un brouillon peut garder un acompte vide ; pour valider le devis dans l'app, chaque acompte doit être chiffré et laisser un solde à payer.
      - `when` string: Moment du versement, sur une ligne.
      - `percent` number
      - `amount` number: Montant TTC, à la place de percent.
    - `includeBankDetails` boolean: Imprime le RIB de la fiche entreprise (IBAN, BIC et numéro du devis en référence) dans le bloc « Conditions / RIB » du devis, pour régler l'acompte par virement. Sans effet sans échéancier ou sans IBAN.
    - `acceptedAt` string, date-time, nullable
    - `rejectedAt` string, date-time, nullable
    - `totalHT` string
    - `totalVAT` string
    - `totalTTC` string
    - `brandProfileKey` string, nullable: Profil de marque du document. `null` = profil par défaut.
    - `createdAt` string, date-time
  - `pagination` Pagination
    - `page` integer
    - `pageSize` integer
    - `totalCount` integer
    - `totalPages` integer: Nombre total de pages (ceil(totalCount / pageSize)).
    - `hasMore` boolean: true s'il existe une page suivante (page < totalPages).

## Other responses

- `401`: Échec d'authentification : clé API manquante (`missing_api_key`) ou invalide/révoquée/expirée (`invalid_api_key`). Le client doit présenter une clé valide.
- `403`: Clé authentifiée mais non autorisée : scope insuffisant pour cette route (`scope_required`), ou organisation sans abonnement Pro actif (`pro_required`). `GET /me` reste accessible sans Pro pour diagnostiquer la clé.
- `429`: Trop de requêtes (quota de la clé API, ou de l'organisation pour les analyses de document, dépassé pour la fenêtre courante)

---

[API](https://skmtc.dev/swipify/apis/swipify-api-publique.md) · [All operations](https://skmtc.dev/swipify/apis/swipify-api-publique/llms.txt) · [OpenAPI document](https://skmtc.dev/swipify/apis/swipify-api-publique/revisions/44c17201b479?raw)
