Pular para o conteúdo

API publica Studeia: overview

API publica Studeia tem 64+ endpoints REST com scopes granulares (courses:read, users:write, etc — 32 tipos), dual auth (session ou Bearer API key), rate limiting Redis (3 tiers), CORS habilitado. Documentacao por grupo de endpoint em /docs/api.

2026-05-23 5 min
Resposta curta

API publica Studeia tem 64+ endpoints REST agrupados em 31+ categorias (courses, users, enrollments, classes, media, gradebook, rubrics, question-banks, live-classes, video-providers, webhooks, invites, tags, LTI, settings, automations, prompts, ai-analytics, RAG, reports, gamification, etc). Dual auth (session ou Bearer API key). Scopes granulares (32 tipos). Rate limiting Redis (3 tiers: standard 1000/h, high 5000/h, custom). CORS habilitado para chamadas browser. Docs detalhadas por grupo em /docs/api.

Endpoint pattern

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

Para tenants com dominio custom:

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

Autenticacao — dual auth

Toda rota /api/institution/* aceita 2 modos:

Bearer API key

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

API key resolvida via cache Redis (60s TTL) + lookup por prefix.

Session cookie

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

Para chamadas do proprio frontend Studeia.

Scopes (granulares)

Cada rota declara requiredScopes. API key precisa ter os scopes correspondentes.

RotaScopes
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

API key com scope vazio ([]) = acesso total (chaves admin).

Rate limiting

TierReq/horaBurst/min
standard1.000100
high5.000300
customconfiguravelcustom/60

Headers de resposta:

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 }

Padrao de resposta

Sucesso

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

Erro

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

Status codes:

  • 200 OK
  • 201 Created
  • 204 No Content (DELETE)
  • 400 Bad Request (validation)
  • 401 Unauthorized (auth invalid)
  • 403 Forbidden (sem scope ou role)
  • 404 Not Found
  • 409 Conflict (state inconsistency)
  • 422 Unprocessable Entity (business rule)
  • 429 Rate limit
  • 500 Server error

Paginacao

Default: cursor-based.

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

perPage max 100 (cap server-side).

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

Preflight (OPTIONS) responde 204.

i18n

Erros sao localizados via header Accept-Language: pt-BR (ou en-US, es-ES, fr-FR). Fallback pt-BR se idioma nao suportado.

Quickstart

# 1. Gere API key em /institution/settings > API Keys

# 2. Liste cursos
curl https://[tenant].studeia.com/api/institution/courses \
  -H "Authorization: Bearer mia_abc123..." \
  -H "Accept-Language: pt-BR"

# 3. Crie aluno
curl -X POST https://[tenant].studeia.com/api/institution/users \
  -H "Authorization: Bearer mia_abc123..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Maria Silva",
    "email": "maria@example.com",
    "role": "student",
    "sendInvite": true
  }'

Endpoint groups (~31 grupos)

Documentacao detalhada por grupo em /docs/api/[group]:

  • Instituicao, Cursos, Modulos, Aulas, Usuarios, Matriculas, Turmas
  • Midia, Notas, Rubricas, Banco de Questoes, Aulas ao Vivo, Video Providers
  • Webhooks, Convites, Tags, LTI, Configuracoes, Automacoes
  • RAG, Relatorios, Analise IA, Gamificacao, Email, Drive, Calendar

Veja tambem

FAQ

Como crio uma API key?

Como institution_admin: /institution/settings > API Keys > Create. Configure nome, scopes (granulares: courses:read, users:write, etc), rate limit tier (standard 1000/h, high 5000/h, custom). A chave completa (formato mia_ + 40 hex) e mostrada UMA UNICA VEZ apos criacao. Apenas SHA-256 hash fica no banco.

Rate limit e por usuario ou por chave?

Por API key. Cada chave tem rate limit tier proprio. Headers de resposta: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Rate exceeded: HTTP 429 com Retry-After header.

Posso criar usuario via API?

Sim. POST /api/institution/users com scope users:write. Body: { name, email, role, classGroupIds?, sendInvite? }. Respeita limite de alunos do plano (checkTenantResourceLimit fail-closed).

Tem webhooks para receber eventos?

Sim, via Automacoes. Crie automacao com trigger event (lesson_completed, quiz_submitted, etc) + action send_webhook para sua URL. Template interpolation suportado ({{user.name}}, {{event.score}}). SSRF prevention (IPs privados bloqueados).

Veja tambem

API publica Studeia: overview | Studeia Docs