L'API est en service à l'adresse https://api.seve-up.app. Le contrat OpenAPI ci-dessous fait foi.
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).