Référence APIRécupérer un document
GET/v1/intakes/{id}/documents/{docId}

Récupérer un document

Renvoie le détail d'un dépôt avec ses URLs présignées de téléchargement et l'enveloppe E2E ; le déchiffrement reste côté client.

2 min de lectureTélécharger en PDF

Réponse exemple

{
"id": "sub_8c1e2d",
"files": [
{
"id": "file_1",
"name": "contrat.pdf",
"size_bytes": 184320,
"display_mime": "application/pdf",
"download_url": "https://...presigned...",
"download_expires_in": 300
}
],
"object": "intake_document",
"status": "received",
"encrypted": true,
"intake_id": "int_4f2a9c1b",
"created_at": "2026-06-11T14:25:00Z",
"encryption": {
"mode": "e2e_asym",
"files": {
"contrat.pdf": {
"iv": "..."
}
},
"chunk_size": 4194304,
"wrapped_symmetric_key": "BASE64URL..."
},
"client_reference": "dossier-2026-0042"
}

Cet endpoint renvoie le détail complet d'un dépôt reçu sur un point de réception (intake). Il vous fournit les métadonnées du dépôt, des URLs présignées de téléchargement vers les blobs chiffrés, ainsi que l'enveloppe de chiffrement de bout en bout. Le déchiffrement a lieu côté client par le propriétaire de la clé privée. Coffrify n'a jamais accès au contenu en clair.

GET/v1/intakes/{id}/documents/{docId}Récupère un dépôt (métadonnées, URLs présignées, enveloppe E2E).

Authentification par <code>Authorization: Bearer cof_…</code>. La clé doit porter le scope <code>intake_read</code>. Les URLs de téléchargement renvoyées sont à usage unique côté infrastructure, valides 300 secondes (<code>download_expires_in</code>). Au-delà, rappelez l'endpoint pour en obtenir de nouvelles.

Paramètres

Les deux paramètres de chemin sont obligatoires. Aucun paramètre de requête n'est accepté sur cette route.

ParamètreEmplacementTypeDescription
idpathstringIdentifiant de l'intake parent (préfixe in_…).
docIdpathstringIdentifiant du dépôt (préfixe doc_…).
AuthorizationheaderstringBearer cof_live_… ou cof_test_… avec scope intake_read.
AcceptheaderstringOptionnel. Forcer application/json.

Exemple de requête

Vous identifiez le dépôt par la paire (intake_id, document_id). L'intake parent doit appartenir à votre compte, sinon l'API renvoie 404 (pas de fuite d'existence transverse).

curl https://api.coffrify.com/v1/intakes/in_8K2pQrLmN4/documents/doc_R7tXz9YwP3 \
-H "Authorization: Bearer $COFFRIFY_API_KEY"

Exemple de réponse

La réponse contient les métadonnées du dépôt, l'enveloppe de chiffrement nécessaire au déchiffrement côté client, et la liste des fichiers avec leurs URLs présignées de téléchargement vers les blobs chiffrés.

{
"id": "doc_R7tXz9YwP3",
"intake_id": "in_8K2pQrLmN4",
"client_reference": "DOSSIER-2026-0421",
"metadata": {
"sender_email": "client@exemple.fr"
},
"status": "received",
"files_count": 2,
"total_size_bytes": 5242880,
"encrypted": true,
"source": "widget",
"envelope": {
"wrapped_symmetric_key": "eyJ2IjoxLCJ3IjoiYmFzZTY0Li4uIn0=",
"chunk_size": 65536
},
"files": [
{
"id": "file_aB3cD4eF5g",
"name": "contrat-signe.pdf",
"size_bytes": 2097152,
"iv": "YmFzZTY0LWl2LWZpbGUtMQ==",
"download_url": "https://blobs.coffrify.com/in_8K2pQrLmN4/doc_R7tXz9YwP3/file_aB3cD4eF5g?sig=…",
"download_expires_in": 300
},
{
"id": "file_hI6jK7lM8n",
"name": "piece-identite.jpg",
"size_bytes": 3145728,
"iv": "YmFzZTY0LWl2LWZpbGUtMg==",
"download_url": "https://blobs.coffrify.com/in_8K2pQrLmN4/doc_R7tXz9YwP3/file_hI6jK7lM8n?sig=…",
"download_expires_in": 300
}
],
"created_at": "2026-06-10T14:32:18Z"
}

Champs renvoyés

ChampTypeDescription
idstringIdentifiant du dépôt.
intake_idstringIdentifiant de l'intake parent.
client_referencestringRéférence opaque attachée au dépôt (numéro de dossier). Null si non fournie.
metadataobjectMétadonnées libres en clair, uniquement si l'intake a metadata_policy=allow.
statusstringreceived ou processing.
files_countintegerNombre de fichiers du dépôt.
total_size_bytesintegerTaille cumulée des blobs chiffrés.
encryptedbooleanToujours true sur les intakes en E2E.
sourcestringwidget ou api.
envelopeobjectEnveloppe de chiffrement à fournir au déchiffrement côté client.
files[]arrayListe des fichiers avec URL présignée et IV par fichier.
created_atstringHorodatage ISO 8601 UTC.

Durée de vie des URLs

Les URLs <code>download_url</code> sont valides 300 secondes après émission. Téléchargez les blobs immédiatement ou rappelez l'endpoint pour régénérer des URLs fraîches. Une URL expirée renvoie 403 côté CDN sans révéler d'information utile.

Codes de statut

Toute réponse non 2xx est un JSON avec les champs <code>code</code>, <code>message</code> et <code>request_id</code>. Conservez le <code>request_id</code> pour le support.

CodeSignificationCause typique
200OKDépôt trouvé, URLs présignées émises.
401UnauthorizedClé absente, invalide ou révoquée.
403ForbiddenScope intake_read manquant, ou clé sandbox sur un intake live.
404Not FoundIntake ou dépôt inexistant pour ce compte.
410GoneLe dépôt a été supprimé après expiration de la politique de rétention.
429Too Many RequestsRespectez Retry-After et X-RateLimit-Reset.
5xxErreur serveurRéessayez avec une politique de backoff exponentiel.