Aller au contenu
Studeia Docs
AI-assisted translation — last updated 2026-05-31. For original (pt-BR or en-US), use the language switcher.

API publique Studeia : vue d'ensemble

API publique Studeia : 166 méthodes REST (33 groupes), 35 scopes granulaires, double authentification (session ou Bearer key) sur la plupart des routes, rate limiting Redis 3 niveaux, CORS. Docs sur /docs/api

2026-05-31 5 min
Resposta curta

L'API publique Studeia propose 166 méthodes REST documentées en 33 groupes (courses, users, enrollments, classes, media, gradebook, question-banks, live-classes, LTI, RAG, gamification, automations, ai-analytics et plus). La plupart des routes de ressources acceptent la double authentification — session ou Bearer API key avec 35 scopes granulaires ; les routes gérant les identifiants, OAuth, billing, SSO, video/avatar et domaine sont session-only pour des raisons de sécurité. Rate limiting Redis sur 3 niveaux. CORS activé.

Schéma d'endpoint

https://[tenant].studeia.com/api/institution/[resource]

Pour les tenants avec domaine personnalisé :

https://api.escola.com.br/api/institution/[resource]

Authentification — double auth

La plupart des routes /api/institution/* acceptent 2 modes d'authentification. Les routes gérant les identifiants, OAuth, billing, SSO, fournisseurs de vidéo/avatar et vérification de domaine sont session-only pour des raisons de sécurité (n'acceptent pas de clé API).

Bearer API key

GET /api/institution/courses
Authorization: Bearer mia_abc123...

La clé API est résolue via le cache Redis (TTL 60s) + lookup par préfixe.

Cookie de session

GET /api/institution/courses
Cookie: sb-access-token=...; sb-refresh-token=...

Pour les appels depuis le frontend Studeia lui-même.

Scopes (granulaires)

Chaque route de ressource déclare requiredScopes ; la clé API doit posséder les scopes correspondants. Le backend reconnaît 35 scopes au total.

RouteScopes
coursescourses:read
usersusers:read
enrollmentsenrollments:read
classesclasses:read
mediamedia:read
gradebookgrades:read
rubricsrubrics:read
question-banksquestion-banks:read
live-classeslive-classes:read
tagstags:read
invitesinvites:read
lti-toolslti:read
drivedrive:read
settings, themes, api-keys, profile-configsettings:read
automationsautomations:read
prompts, ai-limitsai:read
ai-analyticsreports:read
reportsreports:read
video-providersettings:read

Une clé API avec un scope vide ([]) = accès total (clés admin).

Rate limiting

NiveauReq/heureBurst/min
standard1 000100
high5 000300
customconfigurablecustom/60

En-têtes de réponse :

X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 947
X-RateLimit-Reset: 1716480000

Rate exceeded :

HTTP/1.1 429 Too Many Requests
Retry-After: 120

{ "error": "rate_limit_exceeded", "retryAfter": 120 }

Format de réponse

Succès

{
  "data": [...],
  "pagination": {
    "page": 1,
    "perPage": 50,
    "total": 247,
    "totalPages": 5
  }
}

Erreur

{
  "error": "validation_failed",
  "details": [
    { "field": "email", "message": "Invalid email format" }
  ]
}

Codes de statut :

  • 200 OK
  • 201 Created
  • 204 No Content (DELETE)
  • 400 Bad Request (validation)
  • 401 Unauthorized (auth invalide)
  • 403 Forbidden (scope ou rôle manquant)
  • 404 Not Found
  • 409 Conflict (incohérence d'état)
  • 422 Unprocessable Entity (règle métier)
  • 429 Rate limit
  • 500 Server error

Pagination

Par défaut : basée sur curseur.

GET /api/institution/courses?page=1&perPage=50&search=mathematiques

perPage max 100 (plafonné côté serveur).

CORS

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, PATCH, DELETE, OPTIONS
Access-Control-Allow-Headers: Content-Type, Authorization, Accept-Language
Access-Control-Max-Age: 86400

Le preflight (OPTIONS) répond 204.

i18n

Les erreurs sont localisées via l'en-tête Accept-Language: fr-FR (ou en-US, es-ES, pt-BR). Fallback pt-BR si la langue n'est pas supportée.

Démarrage rapide

# 1. Générez une clé API dans /institution/settings > API Keys

# 2. Listez les cours
curl https://[tenant].studeia.com/api/institution/courses \
  -H "Authorization: Bearer mia_abc123..." \
  -H "Accept-Language: fr-FR"

# 3. Créez un étudiant
curl -X POST https://[tenant].studeia.com/api/institution/users \
  -H "Authorization: Bearer mia_abc123..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Marie Dupont",
    "email": "marie@example.com",
    "role": "student",
    "sendInvite": true
  }'

Groupes d'endpoints (33 groupes)

Documentation détaillée par groupe sur /docs/api/[group] :

  • Institution, Cours, Modules, Leçons, Utilisateurs, Inscriptions, Classes
  • Médias, Notes, Rubriques, Banque de Questions, Cours en Direct, Fournisseurs Vidéo
  • Webhooks, Invitations, Tags, LTI, Paramètres, Automations
  • RAG, Rapports, Analyse IA, Gamification, E-mail, Drive, Calendrier

Voir aussi

FAQ

Comment créer une clé API ?

En tant qu'institution_admin : /institution/settings > API Keys > Create. Configurez le nom, les scopes (granulaires : courses:read, users:write, etc.), le niveau de rate limit (standard 1000/h, high 5000/h, custom). La clé complète (format mia_ + 40 hex) est affichée UNE SEULE FOIS après la création. Seul le hash SHA-256 est stocké en base de données.

Le rate limit est-il par utilisateur ou par clé ?

Par clé API. Chaque clé possède son propre niveau de rate limit. En-têtes de réponse : X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Rate exceeded : HTTP 429 avec l'en-tête Retry-After.

Puis-je créer un utilisateur via l'API ?

Oui. POST /api/institution/users avec le scope users:write. Corps : { name, email, role, classGroupIds?, sendInvite? }. Respecte la limite d'élèves du plan (checkTenantResourceLimit fail-closed).

Y a-t-il des webhooks pour recevoir des événements ?

Oui, via les Automations. Créez une automation avec un déclencheur d'événement (lesson_completed, quiz_submitted, etc.) + l'action send_webhook vers votre URL. L'interpolation de template est supportée ({{user.name}}, {{event.score}}). Prévention SSRF (IPs privées bloquées).

Veja tambem

API publique Studeia : vue d'ensemble