Concepts
Modèle multi-tenant
MEA est strictement multi-tenant. Chaque clé d’API externe appartient à
un seul tenant. Toutes les requêtes sont automatiquement filtrées par le
tenant_id de la clé : il est impossible de lire ou d’écrire les données d’un
autre tenant, et aucun paramètre ne permet de franchir cette frontière.
Contrainte de chiffrement de bout en bout (E2EE)
MEA chiffre les documents côté client (zero-knowledge) : le serveur ne possède aucune clé utilisateur et ne voit jamais le texte en clair.
Conséquences pour l’API externe :
- Un document marqué
is_encrypted=truerenvoie403 DOCUMENT_E2EE_PROTECTEDau téléchargement de son contenu (GET /documents/{id}/content). Les métadonnées restent lisibles. - Les documents créés via l’API externe sont toujours stockés non
chiffrés (
is_encrypted=false,created_by_user_id=null). L’API externe est un canal machine-to-machine, hors du périmètre zero-knowledge.
Si votre intégration doit récupérer le contenu de documents chiffrés, le déchiffrement doit avoir lieu côté client humain via l’application MEA — il n’existe pas de contournement serveur par conception.
Limitation de débit
Une limitation de débit native s’applique à /api/external/v2 :
- Fenêtre fixe de 1 minute, partitionnée par clé d’API.
- 60 requêtes/minute par défaut (configurable par clé).
- Dépassement →
429 RATE_LIMIT_EXCEEDED.
Mettez en place un backoff exponentiel côté client et regroupez vos appels (pagination large plutôt que multiples petites requêtes).
Conventions de codes d’erreur
Les codes suivent le format {DOMAINE}_{DESCRIPTION} en
SCREAMING_SNAKE_CASE. Chaque code est stable (les clients en dépendent) et
mappe vers exactement un statut HTTP.
| Code | HTTP | Signification |
|---|---|---|
EXTERNAL_API_KEY_INVALID_SCOPES | 400 | La clé ne porte pas le scope requis |
DOCUMENT_UPLOAD_NO_FILE | 400 | Aucun fichier dans la requête multipart |
DOCUMENT_E2EE_PROTECTED | 403 | Contenu chiffré, inaccessible côté serveur |
ARCHIVE_NOT_FOUND | 404 | Dossier d’archives introuvable |
DOCUMENT_NOT_FOUND | 404 | Document introuvable |
RATE_LIMIT_EXCEEDED | 429 | Limite de débit dépassée |
Toujours router votre logique sur le champ error.code, jamais sur le
message (susceptible d’être traduit ou reformulé).
Voir le guide d’intégration pour des exemples complets.