The API is live at https://api.seve-up.app. The OpenAPI contract below is authoritative. The reference text comes from the contract and is written in French.
API publique de SeveUp App, réservée aux plans PRO, BUSINESS, ENTREPRISE et CUSTOM (TRIAL : lecture seule).
Authentification. Une clé d'organisation sk_…, créée dans la console d'organisation (section « Clés d'API »), envoyée en Authorization: Bearer sk_…. Chaque clé porte des scopes ; une route sans le scope requis répond 403 avec code: SCOPE_MISSING. Aucun secret n'est accepté dans une URL.
Erreurs. Toujours application/problem+json (RFC 9457). Le champ code est stable : le programme s'appuie dessus, jamais sur title ou detail. Le type s'en déduit (SCOPE_MISSING donne https://seve-up.com/problems/scope-missing). Une requête invalide (VALIDATION) détaille chaque champ fautif dans errors. Un identifiant inconnu, mal formé ou d'une autre organisation répond 404 NOT_FOUND.
Pagination. Par curseur opaque : ?limit= (1 à 200, 50 par défaut) et ?cursor= (valeur de next_cursor de la page précédente). Fin de liste : has_more: false et next_cursor: null.
Plans. L'API est ouverte aux plans PRO, BUSINESS, ENTREPRISE et CUSTOM. Le plan d'essai (TRIAL) l'ouvre en lecture seule : toute écriture répond 403 PLAN_READ_ONLY. Les autres plans répondent 403 PLAN_REQUIRED. Un plan payant arrivé à échéance reste lisible ; ses écritures répondent PLAN_READ_ONLY.
Débit. Chaque réponse porte RateLimit-Policy et RateLimit (draft-ietf-httpapi-ratelimit-headers), par clé et par fenêtre d'une minute : 60 requêtes en essai, 600 en PRO, 1 200 en BUSINESS, 3 000 en ENTREPRISE et CUSTOM. Au-delà : 429 RATE_LIMITED avec Retry-After en secondes.
Quotas. Par organisation et par mois calendaire (UTC) : appels, versions déposées, volume déposé, contrôles IDS. Un quota atteint répond 429 QUOTA_EXCEEDED, avec Retry-After jusqu'au 1er du mois suivant. Un quota se consomme avant le lancement du traitement : une requête refusée ne compte pas. Si la vérification est momentanément impossible, l'appel répond 503 BUSY plutôt que de passer sans être compté.
Capacité. Les opérations marquées x-heavy (dépôt, conversion, contrôle IDS, export, synthèses) partagent un nombre limité de places ; une organisation a au plus un nombre fixé de traitements actifs (3 en PRO, 5 en BUSINESS, 10 en ENTREPRISE et CUSTOM). Place indisponible : 503 BUSY avec Retry-After. Trop de traitements en cours : 429 QUOTA_EXCEEDED avec Retry-After.
Idempotence. Tout POST accepte Idempotency-Key (1 à 200 caractères, gardée 24 h par organisation). Rejouer la même clé avec le même corps renvoie la réponse d'origine et Idempotent-Replayed: true ; avec un autre corps, 409 IDEMPOTENCY_KEY_REUSED.
Traitements longs. Conversion d'une maquette, contrôle IDS et export répondent 202 avec une ressource Job ; suivre GET /api/v1/jobs/{job_id} ou s'abonner aux webhooks.
Types. Les nombres et booléens sont de vrais types JSON. Les dates sont en RFC 3339 (UTC).