API REST

Bases de l'API

API v115 août 2026·6 min de lecture

URL de base, authentification, environnements, dates, codes de réponse, enveloppe d'erreur, pagination, et GET /api/v1/user.

URL de base

Chaque endpoint de cette documentation est relatif à :

Code
https://app.doclift.io/api/v1

Envoyez vos requêtes directement depuis votre serveur, jamais depuis le navigateur d'un utilisateur. Votre clé d'API serait sinon exposée à quiconque inspecte la page.


Authentification

Chaque requête porte un en-tête X-Api-Key. La clé identifie une application externe, qui appartient à une organisation. Chaque lecture et écriture de cette API est restreinte à cette organisation, pas à un utilisateur ou à une clé en particulier.

cURL
curl https://app.doclift.io/api/v1/templates \
  -H "X-Api-Key: <your-api-key>"

Une clé appartenant à une application externe désactivée répond exactement comme une clé inconnue : 403 Forbidden. Voir Codes de réponse pour les corps exacts.


Verbes HTTP

VerbeUtilisé pour
GETLire une ressource, ou en lister plusieurs.
POSTCréer une ressource, ou déclencher une action (génération, publication).
PUT/PATCHMettre à jour une ressource. Les deux sont acceptés partout où un endpoint documente une mise à jour.
DELETESupprimer une ressource : un archivage doux sur certaines ressources, une suppression définitive sur d'autres ; chaque page d'endpoint précise laquelle.

Envoyez des corps JSON ; chaque réponse est en JSON.


Environnements

Chaque application externe (clé d'API) est créée dans l'un des deux environnements. Les deux partagent les mêmes modèles et les mêmes données : un environnement est une propriété de la clé, pas de la ressource sur laquelle elle agit.

SandboxProduction
Disponible dès la création du compteouiuniquement si votre organisation est autorisée pour le mode production
Filigranechaque document généré porte un filigranepas de filigrane
Priorité de génération par défautforcée à low (voir priorité)ce que vous envoyez (par défaut critical)
Quotas (taille maximale de document, nombre de tentatives de webhook)identiques à la production (définis par organisation, pas par environnement)identiques à la sandbox

La création d'une clé de production requiert que votre organisation soit autorisée pour le mode production ; cette vérification n'a lieu qu'à la création de la clé, donc une clé de production déjà émise continue de fonctionner même si l'autorisation est révoquée par la suite. Il n'existe pas de restriction équivalente sur les clés sandbox.

Il n'y a aucune limitation de débit dans cette API. Aucun plafond de requêtes par minute n'existe à atteindre, dans aucun des deux environnements.


Format de date

Tous les horodatages (created_at, updated_at, generated_at, timestamp et champs similaires) sont rendus au format ISO-8601, par exemple 2024-01-15T10:30:00+01:00. Le champ timestamp envoyé dans chaque payload de webhook est calculé au moment de la réponse plutôt que lu depuis une colonne stockée, mais utilise le même format ISO-8601 que tout autre champ de date de cette API.


Codes de réponse

CodeSignification
200 La requête a réussi.
201 Une ressource a été créée.
204 La requête a réussi ; il n'y a pas de corps de réponse.
400 Le corps n'est pas du JSON valide, ou il manque sa clé racine requise (template, variable, document_request, …).
403 L'en-tête X-Api-Key est absent, inconnu, ou appartient à une application externe désactivée.
404 La ressource n'existe pas, n'appartient pas à votre organisation, est archivée, ou n'est pas la catégorie que cet endpoint traite.
409 Une écriture sur un workflow est refusée car le constructeur du dashboard détient actuellement le verrou d'édition dessus (endpoints d'édition de workflow uniquement) ; les modèles, variables et demandes de document ne répondent jamais 409.
422 La requête était bien formée mais a échoué à une validation ou une règle métier.

Erreurs

Il n'existe pas d'enveloppe d'erreur unique partagée par toute l'API. La forme dépend de ce qui a échoué :

SituationStatutCorps
Clé d'API absente, invalide ou désactivée403 {"error": "<message>"}
Corps JSON mal formé400 {"error": "Le body de la requête semble mal formé."}
Clé racine requise absente400 {"error": "<names the missing param>"}
Échec de validation du modèle à la création/mise à jour422 {"errors": ["<message>", ...]}
Échec d'une règle métier (ex. création d'une demande de document)422 {"error": "<message>"}, plus invalid_variables pour une violation d'allowed_values sur un formulaire PDF
Ressource introuvable404 {"error": "Template not found"} / {"error": "Variable not found"} / {"error": "Record not found"}

Le nom de la clé (error contre errors) et la formulation du message d'introuvable varient tous deux selon l'endpoint. Fiez-vous au code de statut, pas à une forme de corps figée, si vous distinguez les échecs de façon automatisée.


Pagination

Deux endpoints de liste sont paginés : GET /api/v1/templates et GET /api/v1/document_requests. La taille de page est fixée à 30 et ne peut pas être modifiée ; ajoutez ?page= pour parcourir les résultats. Une page au-delà de la dernière répond toujours 200 avec un tableau vide, jamais un 404.

Chaque réponse paginée porte ces en-têtes :

En-têteSignification
resultsNombre total d'enregistrements, toutes pages confondues.
results_per_pageEnregistrements par page (30).
current_pageLa page renvoyée par cette réponse.
pages_countNombre total de pages.

La seule exception : GET /api/v1/document_requests saute entièrement la pagination lorsque votre organisation n'a strictement aucune demande de document, en répondant 200 [] sans aucun de ces en-têtes. Il n'y a rien à parcourir. GET /api/v1/templates les définit toujours, même pour un résultat vide.

GET /api/v1/templates/:template_id/variables n'est pas paginé. Il renvoie toujours toutes les variables du modèle dans un seul tableau.


Informations utilisateur

GET/api/v1/user

Renvoie le profil de l'utilisateur auquel votre clé correspond (le créateur de l'application externe, ou le propriétaire de l'organisation si ce créateur a été désactivé), ainsi que les limites de compte de votre organisation et les informations publiques propres à la clé appelante. Aucun paramètre.

cURL
curl https://app.doclift.io/api/v1/user \
  -H "X-Api-Key: <your-api-key>"
200 OK · application/json
{
  "id": 100001,
  "firstname": "John",
  "lastname": "Doe",
  "email": "[email protected]",
  "created_at": "2021-02-15T10:30:00+01:00",
  "updated_at": "2021-06-20T14:00:00+01:00",
  "document_max_length_allowed": 800000,
  "webhooks_replays_count": 3,
  "allowed_to_use_production_mode": false,
  "current_external_application": {
    "name": "My App",
    "environment": "sandbox",
    "active": true,
    "webhook_url": "https://myapp.com/webhooks/doclift",
    "revealable_secret_key": "•••...abc12345"
  }
}

document_max_length_allowed, webhooks_replays_count et allowed_to_use_production_mode sont les réglages de votre organisation, pas des réglages personnels. Chaque clé de la même organisation renvoie les mêmes valeurs. current_external_application n'inclut jamais le secret_key brut, seulement le revealable_secret_key masqué.

Codes de statut : 200 en cas de succès, 403 selon les règles d'authentification ci-dessus. Il n'y a pas d'autre mode d'échec pour cet endpoint.