Guide d'intégration API DataScribe

Intégrez facilement notre solution de traitement de documents dans vos applications

Introduction

DataScribe API vous permet d'envoyer des documents (PDF, images) pour traitement automatique et de recevoir les résultats via webhook ou par interrogation directe.

Note : Cette API est conçue pour les clients qui ont leur propre système et souhaitent uniquement utiliser nos capacités de traitement de documents.

URL de base

https://preprod.datascribe.app/api

Création de compte API

Créez un compte pour obtenir votre première clé API et commencer à utiliser le service.

POST/auth/register

Corps de la requête

{ "email": "contact@votreentreprise.com", "password": "VotreMotDePasseSecurise123!", "name": "Jean Dupont", "companyName": "Votre Entreprise", "country": "FR", "vatNumber": "FR12345678901" // Optionnel }

Réponse de succès

{ "success": true, "message": "Account created successfully", "data": { "tenantId": "clm1234567890", "userId": "usr1234567890", "apiKey": "ds_live_a1b2c3d4e5f6g7h8i9j0...", // Conservez cette clé ! "slug": "votre-entreprise" } }

Important : La clé API n'est affichée qu'une seule fois lors de la création. Conservez-la en lieu sûr !

Authentification

Toutes les requêtes API doivent inclure votre clé API dans l'en-tête Authorization :

Authorization: Bearer ds_live_a1b2c3d4e5f6g7h8i9j0...

Exemple avec cURL

curl -X POST https://preprod.datascribe.app/api/client/upload \ -H "Authorization: Bearer ds_live_votre_cle_api" \ -F "file=@document.pdf"

Envoi de documents

POST/client/upload

Envoyez un document pour traitement automatique

Paramètres (multipart/form-data)

ParamètreTypeRequisDescription
fileFileOuiLe fichier à traiter (PDF ou image)
webhook_urlStringNonURL pour recevoir les notifications
metadataJSON StringNonMétadonnées additionnelles

Formats acceptés

  • PDF (application/pdf)
  • JPEG/JPG (image/jpeg)
  • PNG (image/png)
  • TIFF (image/tiff)
  • BMP (image/bmp)
  • WEBP (image/webp)

Limites

  • Taille maximale : 50 MB par fichier
  • Résolution maximale pour les images : 10000x10000 pixels

Exemple de réponse

{ "success": true, "documentId": "doc_abc123def456", "status": "pending", "message": "Document uploaded successfully. Processing has started." }

Récupération du statut

GET/client/documents/{documentId}

Récupérez le statut et les résultats d'un document

Statuts possibles

  • pending : En attente de traitement
  • processing : Traitement en cours
  • completed : Traitement terminé avec succès
  • failed : Échec du traitement

Exemple de réponse

{ "success": true, "document": { "id": "doc_abc123def456", "fileName": "facture.pdf", "fileType": "application/pdf", "fileSize": 245760, "status": "completed", "uploadedAt": "2024-01-15T10:30:00Z", "processedAt": "2024-01-15T10:30:03Z", "result": { "message": "Document processed successfully", "pageCount": 2, "processingTime": 3.0 } } }
GET/client/upload

Listez tous vos documents uploadés

Paramètres de requête

  • limit : Nombre de résultats (défaut: 20)
  • offset : Décalage pour la pagination (défaut: 0)
  • status : Filtrer par statut

Webhooks

Les webhooks vous permettent de recevoir des notifications en temps réel sur le statut de vos documents.

Configuration

Spécifiez l'URL de votre webhook lors de l'envoi du document :

curl -X POST https://preprod.datascribe.app/api/client/upload \ -H "Authorization: Bearer ds_live_votre_cle_api" \ -F "file=@document.pdf" \ -F "webhook_url=https://votre-app.com/webhook"

Événements webhook

document.received

Envoyé immédiatement après réception du document

document.completed

Envoyé quand le traitement est terminé avec succès

document.failed

Envoyé en cas d'échec du traitement

Format des notifications

{ "event": "document.completed", "documentId": "doc_abc123def456", "status": "completed", "timestamp": "2024-01-15T10:30:03Z", "result": { "message": "Document processed successfully", "pageCount": 2, "processingTime": 3.0 } }

Gestion des clés API

POST/client/api-keys

Créez une nouvelle clé API

{ "name": "Production Key", "scopes": [ "documents:read", "documents:write", "extraction", "client", "text:process", "usage:read", "tenant:read", "*" ] }

Scopes disponibles

  • * : Accès complet (recommandé)
  • documents:read : Lecture des documents
  • documents:write : Upload de documents
  • extraction : Extraction OCR
  • client : Accès aux endpoints client
  • text:process : Traitement de texte
  • usage:read : Statistiques d'usage
  • tenant:read : Informations du tenant

Exemples complets

JavaScript / Node.js

// Installation : npm install axios form-data const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); async function uploadDocument(filePath, webhookUrl) { const formData = new FormData(); formData.append('file', fs.createReadStream(filePath)); if (webhookUrl) { formData.append('webhook_url', webhookUrl); } try { const response = await axios.post( 'https://preprod.datascribe.app/api/client/upload', formData, { headers: { ...formData.getHeaders(), 'Authorization': 'Bearer ds_live_votre_cle_api' } } ); console.log('Document uploadé:', response.data); return response.data.documentId; } catch (error) { console.error('Erreur:', error.response?.data || error.message); } } // Utilisation uploadDocument('./facture.pdf', 'https://votre-app.com/webhook') .then(documentId => { console.log('Document ID:', documentId); });

Python

# Installation : pip install requests import requests import time class DataScribeClient: def __init__(self, api_key): self.api_key = api_key self.base_url = 'https://preprod.datascribe.app/api' self.headers = { 'Authorization': f'Bearer {api_key}' } def upload_document(self, file_path, webhook_url=None): """Upload un document pour traitement""" with open(file_path, 'rb') as file: files = {'file': file} data = {} if webhook_url: data['webhook_url'] = webhook_url response = requests.post( f'{self.base_url}/client/upload', headers=self.headers, files=files, data=data ) if response.status_code == 200: return response.json() else: raise Exception(f"Erreur: {response.text}") def get_document_status(self, document_id): """Récupère le statut d'un document""" response = requests.get( f'{self.base_url}/client/documents/{document_id}', headers=self.headers ) if response.status_code == 200: return response.json() else: raise Exception(f"Erreur: {response.text}") def wait_for_completion(self, document_id, timeout=60): """Attend la fin du traitement d'un document""" start_time = time.time() while time.time() - start_time < timeout: status = self.get_document_status(document_id) if status['document']['status'] == 'completed': return status elif status['document']['status'] == 'failed': raise Exception("Le traitement a échoué") time.sleep(2) # Attendre 2 secondes avant de réessayer raise Exception("Timeout: le traitement prend trop de temps") # Utilisation client = DataScribeClient('ds_live_votre_cle_api') # Upload d'un document result = client.upload_document('facture.pdf') document_id = result['documentId'] print(f"Document uploadé: {document_id}") # Attendre la fin du traitement final_status = client.wait_for_completion(document_id) print("Traitement terminé:", final_status)

PHP

<?php class DataScribeClient { private $apiKey; private $baseUrl = 'https://preprod.datascribe.app/api'; public function __construct($apiKey) { $this->apiKey = $apiKey; } public function uploadDocument($filePath, $webhookUrl = null) { $curl = curl_init(); $postData = [ 'file' => new CURLFile($filePath) ]; if ($webhookUrl) { $postData['webhook_url'] = $webhookUrl; } curl_setopt_array($curl, [ CURLOPT_URL => $this->baseUrl . '/client/upload', CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => $postData, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $this->apiKey ] ]); $response = curl_exec($curl); $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); curl_close($curl); if ($httpCode == 200) { return json_decode($response, true); } else { throw new Exception("Erreur HTTP $httpCode: $response"); } } public function getDocumentStatus($documentId) { $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => $this->baseUrl . '/client/documents/' . $documentId, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $this->apiKey ] ]); $response = curl_exec($curl); $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); curl_close($curl); if ($httpCode == 200) { return json_decode($response, true); } else { throw new Exception("Erreur HTTP $httpCode: $response"); } } } // Utilisation $client = new DataScribeClient('ds_live_votre_cle_api'); try { // Upload d'un document $result = $client->uploadDocument('facture.pdf', 'https://votre-app.com/webhook'); $documentId = $result['documentId']; echo "Document uploadé: $documentId "; // Vérifier le statut sleep(5); // Attendre 5 secondes $status = $client->getDocumentStatus($documentId); echo "Statut: " . $status['document']['status'] . " "; } catch (Exception $e) { echo "Erreur: " . $e->getMessage() . " "; } ?>

Gestion des erreurs

Code HTTPDescriptionSolution
400Requête invalideVérifiez les paramètres envoyés
401Non authentifiéVérifiez votre clé API
403Permissions insuffisantesVérifiez les scopes de votre clé API
404Ressource non trouvéeVérifiez l'ID du document
409ConflitL'email est déjà utilisé
413Fichier trop volumineuxLimitez à 50MB par fichier
422Format non supportéUtilisez PDF, JPEG, PNG, TIFF, BMP ou WEBP
429Trop de requêtesRéduisez la fréquence des appels
500Erreur serveurRéessayez plus tard ou contactez le support

Format des erreurs

{ "success": false, "error": "Description de l'erreur" }

Besoin d'aide ?

Notre équipe technique est là pour vous accompagner dans l'intégration