API REST — Vue d'ensemble
Surface HTTP brute d'Aurabase. Compatible avec tous les langages. Base URL, authentification, format de réponse, codes d'erreur — puis détails par endpoint dans /docs/api/*.
Une origine, le projet dans le chemin
Il n'y a pas de domaine par projet. Tout le trafic passe par une seule origine — celle du gateway — et le projet est identifié par son UUID dans le chemin. Le gateway expose deux plans : le plan données (SDK et applications, :8080 en local) et le plan management (Studio et administration, :8090). Les surfaces du plan données sont préfixées /v1/db, /v1/auth, /v1/storage, /v1/realtime, /v1/functions, /v1/notifications, /v1/ai.
/v1/<service>/{project_id} : les routes de streaming /v1/realtime/ws et /v1/realtime/sse n'ont pas de project_id dans le chemin — il est déduit du paramètre de requête ?project_id= ou du préfixe de ?channel={project_id}:{topic}. Une URL sans projet identifiable est rejetée en 400 (« project_id (UUID) introuvable dans l'URL pour valider la clé API »).Deux clés, un JWT
anon_key— publiable. Sert d'API key pour toute requête. Headerapikey,X-API-Key, ou paramètre?apikey=— ce dernier n'est accepté que sur les flux temps réel (/ws,/sse,/chat/stream) ; ailleurs il est refusé explicitement.service_role_key— secrète, bypass RLS. Réservée au backend.user_jwt— émis parPOST /v1/auth/{project_id}/loginaprès authentification. HeaderAuthorization: Bearer.
Standards appliqués
Content-Type: application/json— requis sur POST/PATCH/PUT (sauf upload storage, enmultipart/form-data)Prefer: return=representation— retourne les lignes créées/modifiées ;return=minimalpour une réponse sans corps (204).Prefer: count=exactest lu sur les mutations aura-db (en-têtesContent-Range+Preference-Applied) ; pour compter sur une lecture, utilisez le paramètre?count=exactRange: 0-49— uniquement sur un projet Postgres servi par PostgREST, qui l'interprète lui-même. Le chemin aura-db (projet MongoDB, ou Postgres avec PostgREST désactivé) ignore cet en-tête : il ne lit quelimitetoffset. Préférezlimit/offset, qui fonctionnent sur les deux moteursIdempotency-Key— n'est PAS lu sur les écritures Database (POST /v1/db/…) : deux POST identiques créent deux lignes. Il n'est honoré que parPOST /v1/notifications/{project_id}/send(et/send/batch), et par la création de clé API du plan management (POST /v1/db/{project_id}/api-keys, fenêtre de 24 h)
Limit + offset
limit, une lecture renvoie au plus 1000 lignes — c'est à la fois le défaut et le plafond dur. La limite réellement appliquée est renvoyée dans meta.per_page, jamais deviné.Content-Range: items 100-149/1247 (le total vaut * si aucun comptage n'a été demandé) ; sur le chemin PostgREST, le gateway ne relaie pas cet en-tête et place le total dans meta.total de l'enveloppe JSON. Le comptage n'est jamais fait par défaut : demandez-le avec le paramètre ?count=exact (forme portable, traduite en Prefer par le gateway sur le chemin PostgREST) ou ?count=estimated.Format uniforme
error est toujours un objet, jamais une chaîne. Deux variantes, selon l'émetteur — les champs code et message sont communs aux deux, et c'est sur code (jamais sur message, texte libre) que l'on discrimine.
PGRST116, 23505…) ne sont jamais renvoyés tels quels : le gateway les traduit en codes Aurabase (RECORD_NOT_FOUND, NOT_SINGULAR, COLUMN_NOT_FOUND, NO_RELATIONSHIP, SCHEMA_NOT_FOUND, DUPLICATE_KEY, FOREIGN_KEY_VIOLATION, TABLE_NOT_FOUND, INSUFFICIENT_PRIVILEGE, sinon POSTGREST_ERROR). Cette variante ne porte ni type ni request_id ; il n'existe pas de champ hint ni trace_id.Par IP au gateway, plus des limites par route
- Gateway, toutes routes : par IP,
100req/s avec un burst de1000(réglable viaRATE_LIMIT_RPS/RATE_LIMIT_BURST). Il n'y a pas de palier distinct par rôle. - Auth sensible (
login,register,forgot-password,magic-link,email-otp/send,sms/send,refresh,mfa/verify-login) : 5 req/min par IP, burst 3. En plus, un quota par projet : 30 tentatives de connexion/heure par IP par défaut, réglable dans les paramètres du projet. - SQL brut (
/raw) : 30 req/min, burst 10. IA : 10 req/min, burst 5.
429 Too Many Requests avec les en-têtes X-RateLimit-Limit et X-RateLimit-Remaining (présents sur toute réponse du gateway), plus X-RateLimit-Reset et Retry-After sur le refus.Arbre complet par service
Chaque endpoint a sa page dédiée avec paramètres, response codes, exemples dans 5 langages et code rail live.