---
title: "Brouillon de devis depuis un document (photo/PDF)"
method: POST
path: "/quotes/draft/from-document"
tags: ["Quotes"]
---

# Brouillon de devis depuis un document (photo/PDF)

`POST /quotes/draft/from-document`

## Request

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

Analyse une photo ou un PDF (plan dessiné, devis ou facture manuscrit) et en crée un brouillon de devis (sans émission). Cas d'usage phare de l'artisan : bon de chantier → devis à relire. Renvoie le devis brouillon + `extraction`. L'analyse IA a un coût : 30 analyses par heure et par organisation, factures et devis confondus. Scope requis : `quotes:draft`.

## Headers

- `Idempotency-Key` string

## Request body

- FromDocumentCreate
  - `file` string, required: Contenu du document (image ou PDF) encodé en base64. ~7,5 Mo binaire max (sous la limite de corps de 10 Mo).
  - `mimeType` 'image/jpeg' | 'image/jpg' | 'image/png' | 'image/webp' | 'image/heic' | 'image/heif' | 'application/pdf', required
  - `userHint` string: Contexte libre (client, type de document, TVA, objet…) pour guider l'extraction.
  - `clientId` integer: Rattache un client existant ; sinon le client détecté est renvoyé dans extraction.clientName.

## Response `201`

Devis brouillon créé depuis le document

- object: Devis, forme de liste (sans client ni lignes).
  - `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
  - `extraction` Extraction: Méta de relecture de l'extraction IA (le document reste à valider par un humain).
    - `documentKind` 'plan' | 'quote' | 'invoice' | 'null', nullable
    - `mode` 'estimate' | 'transcribe' | 'null', nullable
    - `confidence` number, nullable
    - `clientName` string, nullable
    - `summary` string, nullable
    - `disclaimer` string, nullable
    - `linesCount` integer
    - `truncated` boolean: true si plus de 50 lignes ont été détectées (brouillon plafonné à 50).

## Other responses

- `400`: Données invalides
- `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é.
- `422`: Document non reconnu ou aucune ligne exploitable
- `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)
- `503`: Service d'analyse IA indisponible

---

[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)
