Aller au contenu

Classification

Ce document décrit comment utiliser l’API DIMARC pour classer un document en plages de pages selon des catégories métier. L’API ne découpe pas le fichier et n’émet aucun binaire : le livrable est un JSON qui indique où commence et où finit chaque catégorie.

Fenêtre de terminal
POST /v2/classification
POST /v2/classification/async

Cas d’usage: Trier un lot de pages scannées mêlant plusieurs types de documents (ex: factures, bons de livraison, contrats) sans les découper manuellement au préalable.

  1. Synchrone: La requête est traitée immédiatement et la réponse est retournée dans la même connexion HTTP.
  2. Asynchrone: Le traitement est mis en file d’attente et les résultats sont envoyés à un webhook défini une fois la classification terminée.
Fenêtre de terminal
curl --location 'https://api.dimarc.ai/v2/classification' \
--header 'Content-Type: application/json' \
--header 'x-api-key: <your_api_key>' \
--data '{
"filename": "lot-documents.pdf",
"file": "<base64_encoded_file>",
"classes": [
{
"name": "facture",
"description": "Facture émise par un fournisseur"
},
{
"name": "bon_livraison",
"description": "Bon de livraison accompagnant une commande"
}
]
}'
ParamètreTypeDescription
filenamestringNom du fichier original (avec extension)
filestringContenu du fichier encodé en base64
classesarrayCatégories à détecter (voir Structure des classes) — peut être vide uniquement si options.guess vaut true
optionsobjectOptions facultatives (voir Options)

Chaque élément du tableau classes est un objet avec les propriétés suivantes:

PropriétéTypeDescription
namestringNom de la catégorie
descriptionstringDescription de la catégorie (aide l’IA à distinguer les documents)
PropriétéTypeDescription
guessbooleanDevine les catégories au lieu de s’appuyer sur classes — seul cas où classes peut être vide. Les catégories proposées sont renvoyées dans discovered_classes
per_pagebooleanClasse page par page plutôt que par plage de document (reflété dans data.mode de la réponse)
systemstringInstruction système additionnelle transmise au modèle de classification
{
"status": "success",
"data": {
"source_name": "lot-documents.pdf",
"mode": "document",
"segments": [
{
"start": 1,
"end": 3,
"label": "facture",
"title": "Facture n°2024-001",
"confidence": 0.92
},
{
"start": 4,
"end": 5,
"label": "bon_livraison",
"title": "Bon de livraison",
"confidence": 0.87
}
],
"discovered_classes": [],
"pages_count": 5
},
"metadata": {
"filename": "lot-documents.pdf",
"duration": 4.12,
"tokens_consumed": 1,
"thread_id": "01J..."
}
}
{
"status": "error",
"code": "classification_failed",
"error": "Classification failed",
"detail": { }
}

code est un identifiant machine stable — error reste un message humain qui peut évoluer sans préavis. detail est optionnel et absent la plupart du temps. Voir le tableau des codes d’erreur pour l’ensemble des codes possibles.

StatusCodeCas
422invalid_requestCorps de requête invalide, ou classes vide sans options.guess
422infected_fileFichier rejeté par l’antivirus
503antivirus_unavailableService antivirus indisponible
503agent_unavailableFile de traitement indisponible
502classification_failedL’agent n’a pas pu traiter la classification
504agent_timeoutTimeout de la réponse agent

L’asynchrone est recommandé pour les lots volumineux ou les fichiers de nombreuses pages.

Fenêtre de terminal
curl --location 'https://api.dimarc.ai/v2/classification/async' \
--header 'Content-Type: application/json' \
--header 'x-api-key: <your_api_key>' \
--data '{
"filename": "lot-documents.pdf",
"file": "<base64_encoded_file>",
"classes": [
{
"name": "facture",
"description": "Facture émise par un fournisseur"
}
],
"callback": "https://votre-endpoint-de-callback.com/webhook"
}'
ParamètreTypeDescription
filenamestringNom du fichier original (avec extension)
filestringContenu du fichier encodé en base64
classesarrayCatégories à détecter — mêmes règles qu’en synchrone
optionsobjectOptions facultatives (voir Options)
callbackstringURL du webhook qui recevra le résultat
{
"status": "started",
"classification_id": "550e8400-e29b-41d4-a716-446655440000"
}

Lorsque la classification est terminée, le résultat est envoyé à l’URL de callback.

Le même résultat est aussi disponible via l’événement classification.completed si vous avez configuré un webhook d’organisation — utile pour centraliser la réception sans dépendre du callback par requête.

{
"status": "success",
"classification_id": "550e8400-e29b-41d4-a716-446655440000",
"data": {
"source_name": "lot-documents.pdf",
"mode": "document",
"segments": [
{
"start": 1,
"end": 3,
"label": "facture",
"title": "Facture n°2024-001",
"confidence": 0.92
}
],
"discovered_classes": [],
"pages_count": 3
},
"metadata": {
"filename": "lot-documents.pdf",
"duration": 4.12,
"tokens_consumed": 1,
"thread_id": "01J..."
}
}
{
"status": "error",
"classification_id": "550e8400-e29b-41d4-a716-446655440000",
"code": "agent_timeout",
"error": "Agent response timed out",
"detail": { "http_status": 504 }
}

detail est un objet — http_status est un nombre. code porte le vrai code machine de l’erreur (voir le tableau des codes d’erreur).

  • Formats supportés: PDF, PNG, JPG, JPEG, DOCX, XLSX
  • Le mode asynchrone est recommandé pour les fichiers volumineux ou les lots de nombreuses pages, pour éviter les timeouts

Pour toute question concernant l’API Classification, contactez notre équipe de support à l’adresse contact@dimarc.fr