Índice de endpoints
Cada ruta que monta el servidor, en una sola tabla, junto con lo que se requiere para acceder a ella.
Las rutas asumen el basePath predeterminado de /api; REBASE_BASE_PATH las
traslada todas juntas. /health, /livez y /metrics se ubican fuera de él a
propósito, ya que un orquestador sondea /health y no debería necesitar conocer
la ruta base. /health también se monta debajo de él, por lo que /api/health
responde de la misma manera en lugar de devolver un error 404 en el preciso momento
en que alguien verifica si el servidor está activo.
Un control de verificación — tooling/scripts/docs-verify/check-endpoint-index.mjs — compara
esta tabla con las rutas que registra el código fuente, de modo que no se puede
agregar una nueva superficie sin que aparezca aquí.
| Gate | Significado |
|---|---|
| none | Sin autenticación. Cualquiera que pueda acceder al host puede llamarlo |
| session | Un emisor que ha iniciado sesión: un token de acceso o una clave de API con alcance para la operación |
resource:action |
Un emisor que tiene ese alcance: un administrador, una persona cuyo rol lo declara, una clave de API creada con él o la clave de servicio |
| RLS | Autenticado, y luego la base de datos decide fila por fila — consulte Reglas de seguridad |
| dev | Montado solo fuera de producción |
Generado por colección, por lo que las rutas llevan sus slugs en lugar de una
lista fija. :slug es el slug de una colección.
| Método | Ruta | Gate | Más |
|---|---|---|---|
GET |
/api/data/:slug |
RLS | Consultas |
POST |
/api/data/:slug |
RLS | API REST |
POST |
/api/data/:slug/query |
RLS | El listado, con los parámetros de consulta en el cuerpo — Consultas demasiado largas para una URL |
GET |
/api/data/:slug/count |
RLS | Consultas |
POST |
/api/data/:slug/count |
RLS | El conteo, con los parámetros de consulta en el cuerpo — Consultas demasiado largas para una URL |
GET |
/api/data/:slug/aggregate |
RLS | API REST |
GET |
/api/data/:slug/:id |
RLS | API REST |
PATCH |
/api/data/:slug/:id |
RLS | API REST |
PUT |
/api/data/:slug/:id |
RLS | Alias obsoleto de PATCH — misma escritura parcial, responde Deprecation: true |
DELETE |
/api/data/:slug/:id |
RLS | API REST |
POST |
/api/data/:slug/bulk |
RLS | Inserta muchas filas, opcionalmente realizando upsert — API REST |
PATCH |
/api/data/:slug/bulk |
RLS | Actualiza muchas filas por id — API REST |
POST |
/api/data/:slug/bulk/delete |
RLS | Elimina muchas filas por id — API REST |
POST |
/api/data/_batch |
RLS | Escribe a través de colecciones en una sola transacción — Escritura a través de REST |
GET |
/api/data/:slug/:id/history |
RLS | Historial de entidades |
POST |
/api/data/:slug/:id/history/:historyId/revert |
RLS | Historial de entidades |
El conteo y la agregación son rutas independientes, registradas antes de /:id
para que aggregate no se interprete como el id de una entidad. ?select= y
?groupBy= son sus parámetros, y select es obligatorio en /aggregate.
La búsqueda de texto, la búsqueda vectorial, la inclusión de relaciones y la
selección de campos son parámetros de consulta en GET /api/data/:slug en
lugar de rutas — searchString, vector_search, include, fields. Consulte
API REST.
Un proyecto que no declara colecciones y no realiza introspección de ninguna
sirve este prefijo como un único 404 NO_COLLECTIONS. Consulte
Solo backend.
Autenticación
Sección titulada «Autenticación»| Método | Ruta | Gate | Más |
|---|---|---|---|
GET |
/api/auth/config |
none | Lo que puede ofrecer la pantalla de inicio de sesión: registro, restablecimiento de contraseña, enlace mágico, códigos por correo, sesión de invitado, proveedores OAuth y si falta configurar el primer administrador |
POST |
/api/auth/register |
none | Autenticación |
POST |
/api/auth/login |
none | Endpoints de autenticación |
POST |
/api/auth/refresh |
none (un token de actualización) | Endpoints de autenticación |
POST |
/api/auth/logout |
session | Endpoints de autenticación |
GET |
/api/auth/me |
session | Endpoints de autenticación |
PATCH |
/api/auth/me |
session | Endpoints de autenticación |
GET |
/api/auth/sessions |
session | Endpoints de autenticación |
DELETE |
/api/auth/sessions |
session | Revoca todas las demás sesiones |
DELETE |
/api/auth/sessions/:id |
session | Revoca una |
POST |
/api/auth/forgot-password |
none | Autenticación |
POST |
/api/auth/reset-password |
none (un token de restablecimiento) | Autenticación |
POST |
/api/auth/change-password |
session | Autenticación |
POST |
/api/auth/change-email |
session | Envía por correo un enlace de confirmación a la dirección nueva — Cambiar una dirección de correo |
POST |
/api/auth/confirm-email-change |
none (un token de enlace) | Mueve la cuenta a la dirección nueva — Cambiar una dirección de correo |
POST |
/api/auth/send-verification |
session | Autenticación |
GET |
/api/auth/verify-email |
none (un token de verificación) | Autenticación |
POST |
/api/auth/verify-email |
none (un token de verificación, y una sesión o la contraseña para conservarlo) | Verificación de correo electrónico |
POST |
/api/auth/magic-link |
none | Autenticación |
POST |
/api/auth/magic-link/verify |
none (un token de enlace) | Autenticación |
POST |
/api/auth/otp |
none | Códigos de un solo uso por correo electrónico |
POST |
/api/auth/otp/verify |
none (un código) | Códigos de un solo uso por correo electrónico |
POST |
/api/auth/anonymous |
none | Sesiones de invitado. Desactivado a menos que ALLOW_ANONYMOUS |
POST |
/api/auth/anonymous/link |
session (un invitado) | Convierte un invitado en una cuenta |
POST |
/api/auth/find-user |
session | Desactivado a menos que AUTH_ALLOW_USER_LOOKUP — es una superficie de enumeración |
POST |
/api/auth/:provider |
none | Uno por cada proveedor de OAuth/OIDC configurado |
POST |
/api/auth/link/:provider |
session | Vincula un proveedor a la cuenta con sesión iniciada |
POST |
/api/auth/mfa/enroll |
session | MFA |
POST |
/api/auth/mfa/verify |
session | MFA |
GET |
/api/auth/mfa/factors |
session | MFA |
DELETE |
/api/auth/mfa/unenroll |
session | MFA |
POST |
/api/auth/mfa/recovery-codes |
session (aal2) |
MFA |
POST |
/api/auth/mfa/challenge |
none (un inicio de sesión en curso) | MFA |
POST |
/api/auth/mfa/challenge/verify |
none (un id de desafío) | MFA |
GET |
/api/auth/scopes |
session | Todos los alcances que conoce este backend y los que tiene el emisor — Roles y alcances |
GET |
/api/auth/keys |
session (una cuenta) | Las claves personales propias del emisor |
POST |
/api/auth/keys |
session (una cuenta) | La clave en texto plano se devuelve una sola vez. 403 PERSONAL_KEYS_DISABLED salvo que la colección de usuarios establezca auth.personalKeys |
DELETE |
/api/auth/keys/:id |
session (una cuenta) | Revoca una de las claves propias del emisor |
GET |
/.well-known/jwks.json |
none | El JWKS público, cuando firma asimétrica está configurada |
Administración
Sección titulada «Administración»Todo lo que está debajo de /api/admin requiere un alcance del plano de
administración, y cada superficie nombra el suyo: users:read lista cuentas,
cron:write dispara un trabajo. Un administrador los tiene todos, y también la
clave de servicio. Una persona tiene los que declaran sus roles, y una clave de API
aquellos con los que se creó. Una clave con alcance limitado a una colección no
puede acceder a nada de esto. Consulte Roles y alcances.
| Método | Ruta | Gate | Más |
|---|---|---|---|
POST |
/api/admin/bootstrap |
none, y solo mientras no exista ningún administrador | Rechazado en producción — consulte Bootstrap del primer usuario |
GET |
/api/admin/users |
users:read |
Gestión de usuarios |
POST |
/api/admin/users |
users:write |
Gestión de usuarios. Se rechazan los roles que van más allá de los del propio emisor |
GET |
/api/admin/users/pick |
users:read, o acceso de escritura a una colección con un campo userSelect |
La lectura del selector de usuarios: solo id, nombre, correo y avatar. Una colección cuyas reglas de escritura son SQL en bruto no cuenta |
GET |
/api/admin/users/:uid |
users:read |
Gestión de usuarios |
PUT |
/api/admin/users/:uid |
users:write |
Se rechaza para una cuenta que tiene más que el emisor |
DELETE |
/api/admin/users/:uid |
users:write |
Se rechaza para una cuenta que tiene más que el emisor |
POST |
/api/admin/users/:uid/reset-password |
users:write |
Emite una contraseña temporal |
DELETE |
/api/admin/users/:uid/mfa |
users:write |
Elimina los segundos factores y los códigos de recuperación de la cuenta, termina sus sesiones |
GET |
/api/admin/guests |
users:read |
Invitados, primero el visto por última vez hace más tiempo. ?lastSeenBefore= los reduce a lo que borraría el DELETE siguiente, y total los cuenta |
DELETE |
/api/admin/guests |
users:write |
Elimina un lote de los invitados vistos por última vez antes de ?lastSeenBefore=, que es obligatorio. Responde { deleted, skipped, remaining }. Repite mientras remaining no sea 0, con ?offset= igual al número de invitados omitidos. No alcanza a las cuentas |
DELETE |
/api/admin/guests/:uid |
users:write |
Elimina un invitado. Una cuenta se rechaza con NOT_ANONYMOUS |
GET |
/api/admin/roles |
users:read |
admin y los roles que declara el proyecto, con sus alcances |
GET |
/api/admin/api-keys |
keys:read |
Claves de API. Nunca una clave de API |
POST |
/api/admin/api-keys |
keys:write |
La clave en texto plano se devuelve una sola vez, al crearla |
GET |
/api/admin/api-keys/:id |
keys:read |
Claves de API |
PUT |
/api/admin/api-keys/:id |
keys:write |
Claves de API |
DELETE |
/api/admin/api-keys/:id |
keys:write |
Claves de API |
GET |
/api/admin/cron |
cron:read |
Trabajos cron |
GET |
/api/admin/cron/:id |
cron:read |
Trabajos cron |
PUT |
/api/admin/cron/:id |
cron:write |
Habilita o deshabilita un trabajo |
GET |
/api/admin/cron/:id/logs |
cron:read |
Trabajos cron |
POST |
/api/admin/cron/:id/trigger |
cron:write |
Ejecuta un trabajo ahora. ?async=1 responde 202 en cuanto ha empezado — API de trabajos cron |
GET |
/api/admin/backups |
backups:read |
Inventario de copias de seguridad |
GET |
/api/admin/backups/download |
backups:read |
Transmite en flujo una copia de seguridad. Con ?token= de un enlace de descarga no hace falta cabecera, solo para esa copia |
POST |
/api/admin/backups/download-url |
backups:read |
Un enlace a una copia de seguridad, { key } → { url, token, expiresIn }, válido durante 60 segundos — Copias de seguridad |
POST |
/api/admin/storage/orphans/scans |
database:write |
Inicia en segundo plano un análisis de los archivos almacenados que ninguna fila nombra, ?storageId=&olderThanHours=. Responde 202 con el registro del análisis: id, status (queued) y runner (worker cuando es un trabajo storage.orphans en la cola de trabajos, in-process cuando lo ejecuta el propio servidor). Su registro se escribe en el origen, bajo el prefijo reservado _rebase/maintenance/ |
GET |
/api/admin/storage/orphans/scans/:id |
database:read |
El registro del análisis, ?storageId=. Mientras se ejecuta: progress (filesScanned, rowsScanned, collectionsScanned de collectionsTotal, unscanned). Una vez completed: result, el informe que respondía el antiguo GET /orphans. Una ejecución que dejó de informar durante 10 minutos se responde como failed. 404 STORAGE_SCAN_NOT_FOUND cuando el origen no contiene ese análisis |
DELETE |
/api/admin/storage/orphans?scan=:id |
database:write |
Elimina en segundo plano los huérfanos de un análisis completado, 202. Cada uno se comprueba de nuevo contra todas las filas y entradas de historial, y se vuelve a pedir justo antes de eliminarlo. El resultado es el deletion del registro del análisis. 409 con STORAGE_SCAN_NOT_COMPLETE, STORAGE_SCAN_INCOMPLETE, STORAGE_SCAN_EXPIRED o STORAGE_SCAN_DELETION_STARTED |
GET |
/api/admin/storage/orphans |
database:read |
Obsoleto: el análisis dentro de la solicitud, ?storageId=&olderThanHours=. Responde con Deprecation: true. Usa POST /orphans/scans |
DELETE |
/api/admin/storage/orphans |
database:write |
Obsoleto, sin ?scan=: vuelve a analizar y elimina dentro de la solicitud. 409 STORAGE_SCAN_INCOMPLETE cuando no se pudo leer una colección |
POST |
/api/admin/storage/move |
database:write |
Copia una carpeta a otro origen con las mismas claves, una página por llamada — lo que envía rebase storage move; 400 STORAGE_SAME_LOCATION para deleteSource entre dos orígenes que almacenan en el mismo lugar |
POST |
/api/admin/storage/move/verify |
database:write |
Vuelve a listar el origen tras un traslado, con el mismo cuerpo, una página por llamada: { checked, notMoved: [{ key, reason }], cursor? } — cada archivo que sigue en el origen con deleteSource, cada archivo del que el destino no tiene copia sin él. rebase storage move lo consulta cuando termina el traslado |
GET |
/api/admin/logs |
logs:read |
El búfer de registros recientes |
GET |
/api/admin/logs/latest |
logs:read |
Las entradas más recientes |
GET |
/api/admin/logs/stream |
logs:read |
Server-sent events |
GET |
/api/admin/rls-audit |
schema:read |
El resultado más reciente de la auditoría programada |
GET |
/api/admin/rls-simulator/options |
schema:read |
Los roles, los roles que nombran las reglas y las claves de servicio vigentes que un administrador puede simular |
POST |
/api/admin/rls-simulator/preview |
schema:read |
Cada colección tal como la alcanza { role?, userId?, apiKeyId? }: filas visibles frente a las de quien llama, ocultas por alcance o por RLS, campos enmascarados. Solo la sesión de un administrador |
POST |
/api/admin/sql/csv |
database:write |
Transmite en flujo el resultado completo de una consulta de solo lectura como CSV — «Descargar el resultado completo como CSV» de Studio |
GET |
/api/admin/branches/:name/diff |
database:write |
Qué cambió una rama: esquema, políticas y filas, ?sampleLimit=&schemas=&maxRowsPerTable= |
POST |
/api/admin/branches/:name/merge |
database:write |
Escribe las filas de la rama en su padre, { expectedFingerprint, onConflict?, skipBlocked? }; 409 si algún lado cambió desde el diff, o si hay filas en conflicto |
GET |
/api/admin/schema/status |
schema:read |
Edición de esquema en vivo |
POST |
/api/admin/schema/plan |
schema:read |
Planifica un cambio; nunca lo aplica |
POST |
/api/admin/schema/apply |
schema:write |
Solo una persona, a menos que REBASE_LIVE_SCHEMA_ALLOW_MACHINE_APPLY |
GET |
/api/admin/schema-editor/status |
schema:read |
Si el editor está disponible y el motivo cuando no lo está |
POST |
/api/admin/schema-editor/collection/save |
schema:write |
Studio — reescribe el código fuente de la colección |
POST |
/api/admin/schema-editor/collection/delete |
schema:write |
Studio |
POST |
/api/admin/schema-editor/property/save |
schema:write |
Studio |
POST |
/api/admin/schema-editor/property/delete |
schema:write |
Studio |
GET |
/api/admin/dev/emails |
dev + users:write |
Correos que el transporte de desarrollo capturó en lugar de enviar |
DELETE |
/api/admin/dev/emails |
dev + users:write |
Vacía el buzón capturado |
/api/admin/cron, /api/admin/logs y /api/admin/schema-editor también se
sirven en sus rutas anteriores a la versión 0.17 sin el segmento /admin. Esos
alias son para proyectos que no han migrado; escriba el código nuevo apuntando
a la ruta canónica.
Almacenamiento
Sección titulada «Almacenamiento»| Método | Ruta | Gate | Más |
|---|---|---|---|
POST |
/api/storage/upload |
session + storageAuthorize |
Almacenamiento |
GET |
/api/storage/file/* |
session + storageAuthorize |
Almacenamiento |
DELETE |
/api/storage/file/* |
session + storageAuthorize |
Almacenamiento |
GET |
/api/storage/metadata/* |
session + storageAuthorize |
Almacenamiento |
POST |
/api/storage/metadata |
session + storageAuthorize, por clave |
Almacenamiento: metadatos de hasta 100 objetos |
GET |
/api/storage/list |
session + storageAuthorize |
Almacenamiento |
POST |
/api/storage/folder |
session + storageAuthorize |
Almacenamiento |
GET |
/api/storage/sources |
session | Las fuentes de almacenamiento con nombre que sirve este backend |
OPTIONS |
/api/storage/tus |
none | Subidas reanudables: las versiones y extensiones de TUS que admite este servidor |
POST |
/api/storage/tus |
session + storageAuthorize |
Cargas reanudables: creación |
GET |
/api/storage/tus/:id |
el propietario de la carga | Cargas reanudables: desplazamiento (offset) |
PATCH |
/api/storage/tus/:id |
el propietario de la carga | Cargas reanudables: anexar (append) |
DELETE |
/api/storage/tus/:id |
el propietario de la carga | Cargas reanudables: cancelar |
Un despliegue sin almacenamiento configurado responde en este prefijo con un error
501 indicando la variable que necesita, en lugar de responder con un 404 como si
la funcionalidad no existiera —
excepto GET /api/storage/sources, que responde 200 con una lista vacía.
Funciones
Sección titulada «Funciones»| Método | Ruta | Gate | Más |
|---|---|---|---|
GET |
/api/functions |
session | Los nombres de las funciones servidas y cuántos archivos fallaron al cargarse |
| cualquiera | /api/functions/<name> |
lo que declare la función. Una clave de API también necesita functions:invoke |
Funciones personalizadas |
Una ruta por archivo bajo backend/functions/, por lo que las rutas provienen de
su proyecto. GET /api/functions las lista solo para un emisor con sesión iniciada —
una sesión, una clave de API o la service key— y responde 401 a cualquier otro: el
inventario de endpoints personalizados de un despliegue no es público.
Meta y operaciones
Sección titulada «Meta y operaciones»| Método | Ruta | Gate | Más |
|---|---|---|---|
GET |
/livez |
none | Solo actividad (liveness): si este proceso se está ejecutando. No interactúa con la base de datos, razón por la cual es la ruta de sondeo que debe usar un contenedor — RUNTIME_LIVENESS_PATH |
GET |
/health, /api/health |
none | Actividad (liveness) y disponibilidad (readiness). Informa sobre cada fuente de datos configurada, no solo la predeterminada |
GET |
/api/docs |
none (schema:read cuando enableSwagger es false, el valor predeterminado del runtime en producción) |
El documento de OpenAPI 3.0 |
GET |
/api/swagger |
none | Swagger UI. Solo fuera de producción; REBASE_ENABLE_SWAGGER no puede activarlo en producción. No se sirve cuando enableSwagger es false, tampoco en desarrollo |
GET |
/api/meta/schema-version |
none | El hash del esquema a partir del cual se compiló este backend y la versión del runtime, y nada más |
GET |
/api/meta/contract |
schema:read |
El contrato completo de la colección, para rebase generate-sdk --from. 404 cuando no hay autenticación configurada |
GET |
/metrics |
REBASE_METRICS_TOKEN cuando esté configurado |
Métricas de Prometheus, cuando REBASE_METRICS=true |
GET |
/metrics/history |
REBASE_METRICS_TOKEN cuando esté configurado |
Las series registradas detrás de los gráficos de Studio. 501 en un entorno de ejecución sin backend |
Las conexiones WebSocket llegan como una actualización HTTP (upgrade) en el mismo servidor en lugar de en una ruta propia — consulte Tiempo real.
Superficie MCP
Sección titulada «Superficie MCP»Se monta solo cuando REBASE_MCP_ENABLED=true, lo que también requiere
REBASE_PUBLIC_URL — consulte
Configuración. Desactivado de
forma predeterminada: ningún REBASE_ROLE activa esto, ya que otorga acceso al
proyecto a software de terceros y esa es una decisión que debe tomar una persona.
Los documentos .well-known se encuentran en el origen, no bajo basePath:
el RFC 8414 y el RFC 9728 definen esas rutas en relación con el origen, y un
cliente las obtiene antes de poseer ningún token.
| Método | Ruta | Gate | Más |
|---|---|---|---|
GET |
/.well-known/oauth-protected-resource |
none | Metadatos del RFC 9728 que identifican este recurso y su servidor de autorización. También se sirve en el formato con sufijo de ruta |
GET |
/.well-known/oauth-authorization-server |
none | Metadatos del RFC 8414: los endpoints, tipos de concesión y métodos PKCE que admite este despliegue |
POST |
/mcp |
OAuth bearer, o una clave de API | El endpoint del protocolo MCP. Actúa como el usuario con sesión iniciada (o como quien sea que represente la clave), por lo que cada lectura y escritura está sujeta al mismo RLS. Los alcances data:* deciden qué herramientas se ofrecen |
GET |
/mcp |
OAuth bearer, o una clave de API | Responde 405 con Allow: POST, DELETE: este servidor no abre ningún flujo iniciado por el servidor. El token se verifica primero, por lo que uno faltante o vencido recibe el desafío 401 en su lugar |
DELETE |
/mcp |
none | Responde 204. El endpoint no mantiene ninguna sesión, por lo que no hay nada que finalizar |
POST |
/api/oauth/register |
rate-limited | Registro dinámico de clientes según RFC 7591. Se rechaza cuando REBASE_MCP_OPEN_REGISTRATION=false |
GET |
/api/oauth/authorize |
session | La pantalla de consentimiento a la que se redirige a un cliente |
POST |
/api/oauth/authorize/decision |
session | La respuesta de la persona a esta — aprobar o denegar |
POST |
/api/oauth/token |
client credentials + PKCE | Intercambia un código de autorización o lo renueva |
POST |
/api/oauth/revoke |
client credentials | Revocación de tokens según RFC 7009 |
GET |
/api/oauth/grants |
session | Qué clientes ha aprobado este usuario |
DELETE |
/api/oauth/grants/:clientId |
session | Retira una, para que una persona pueda revocar un consentimiento sin necesidad de un administrador |
Relacionado
Sección titulada «Relacionado»- API REST — las rutas de datos al completo: filtros, ordenación, paginación, errores
- Endpoints de autenticación — estructuras de solicitud y respuesta para la tabla de autenticación anterior
- Entorno y configuración — las variables que deciden cuáles de estas se montan