Référence API

Vue d'ensemble de l'API

L'API MAFATE est une API REST JSON, versionnée et accessible via HTTPS. Toutes les requêtes requièrent une authentification par clé API.

URL de base

https://api.mafate.io/v1

Authentification

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

Authorization: Bearer eaas_sk_EXEMPLE_NON_VALIDE

Les requêtes sans clé API valide retournent un statut 401. Le préfixe est eaas_sk_ : le serveur n’a aucune notion d’environnement, il n’existe donc ni clé « live » ni clé « test ». Une clé de test est une clé ordinaire émise sur un locataire de test.

Format des réponses

Toutes les réponses sont au format JSON. Les réponses de succès contiennent les données directement :

// Succès
{
  "ciphertext": "AQIDAHj...",
  "wrapped_key": "CiQAe...",
  "iv": "9xK2mQ==",
  "key_id": "production-users",
  "key_version": 3
}

// Erreur : RFC 7807 (application/problem+json)
{
  "type": "about:blank",
  "title": "Not Found",
  "status": 404,
  "detail": "key not found"
}

Codes d'erreur HTTP

StatustitleDescription
400Bad RequestCorps invalide : JSON malformé, champ requis absent, base64 non conforme, DEK qui ne fait pas 32 octets
401UnauthorizedClé API absente, inconnue, expirée ou révoquée
403ForbiddenLa clé API n’a pas la permission requise, ou le wrapped_key présenté n’est pas authentifiable pour cette clé
403Forbidden (E_ENVELOPE_ONLY)Le locataire est en mode enveloppe, défaut de tout compte créé depuis le 11/08/2026 : /v1/encrypt et /v1/decrypt sont refusés. Chiffrez localement.
404Not FoundClé introuvable pour ce locataire. Rappel : le chemin attend l’UUID, pas le nom.
409ConflictNom déjà pris, ou opération refusée par l’état de la clé (seule une clé active peut tourner ou emballer)
422Decryption FailedLe déchiffrement a échoué : chiffré altéré, mauvaise clé, ou tag GCM invalide
429Quota ExceededQuota mensuel d’opérations atteint sur /v1/encrypt. Ce n’est pas une limite de débit : voir la section suivante.
500Internal Server ErrorErreur interne. Un cas mérite d’être connu : unwrap refuse de rendre la clé si son entrée d’audit n’a pas pu être écrite.

Quotas et débit

Il n’existe aucune limite de débit. Aucun en-tête X-RateLimit n’est renvoyé, et aucune requête n’est refusée pour cause de fréquence.

OpérationComptéePeut être refusée ?
POST /v1/keys/:id/wrapOui, key.wrapNon, jamais
POST /v1/keys/:id/unwrapOui, key.unwrapNon, jamais
POST /v1/encryptOui, encryptOui, 429 au dépassement du quota mensuel
POST /v1/decryptOui, decryptNon, délibérément : un quota ne doit pas vous enfermer hors de vos propres données

Les opérations d’enveloppe sont comptées pour votre facturation et votre journal d’audit, jamais pour vous refuser un appel : les paliers actifs portent un nombre d’opérations illimité.

Pagination

La pagination se fait par limit et offset. Il n’existe pas de curseur. limit vaut 50 par défaut et est plafonné à 100 côté serveur : demander davantage ne renvoie pas davantage.

GET /v1/audit?limit=50&offset=100

// Réponse
{
  "logs": [...],
  "count": 50,
  "total": 1247,
  "limit": 50,
  "offset": 100
}