Endpoints REST reales expuestos por la API de MasterOS, organizados por recurso, bajo el prefijo /v1.
Estos son los endpoints reales, hoy
Esta referencia documenta la API exactamente como está implementada ahora mismo. Está escrita a mano, no generada
a partir de la especificación OpenAPI real de la API (vea Versioning para saber dónde
vive esa especificación) — esté atento a Changelog para detectar desviaciones entre ambas.
Todos los endpoints son relativos a la URL base de la API, bajo un prefijo /v1 (vea
Versioning). Todos los endpoints autenticados usan una cookie de sesión httpOnly
establecida por POST /v1/auth/verify-login-code — hoy no existe una autenticación por clave de API separada (vea
Authentication).
auth
| Method | Path | Auth | Notas |
|---|
| POST | /v1/auth/request-login-code | — | { email }. Envía por email un código de 6 dígitos y crea la cuenta en el primer uso; siempre devuelve el mismo mensaje. Limitado por tasa según IP y según email, de forma independiente. |
| POST | /v1/auth/verify-login-code | — | { email, code }. Establece la cookie de sesión. Limitado por tasa según IP y según email, de forma independiente. |
| POST | /v1/auth/logout | session | Borra la cookie de sesión. |
| GET | /v1/auth/me | session | Devuelve el usuario actual. |
| GET | /v1/auth/google | — | Redirige a Google OAuth. |
| GET | /v1/auth/google/callback | — | Callback de OAuth; redirige a la app en caso de éxito. |
| GET | /v1/auth/facebook | — | Redirige a Facebook OAuth. |
| GET | /v1/auth/facebook/callback | — | Callback de OAuth; redirige a la app en caso de éxito. |
| POST | /v1/auth/forgot-password | — | { email }. Siempre devuelve el mismo mensaje, sin importar si el email está registrado. |
| POST | /v1/auth/reset-password | — | { token, password }. El token es de un solo uso y expira. |
chat
| Method | Path | Auth | Notas |
|---|
| POST | /v1/chat | session | { model, messages, conversationId?, idempotencyKey }. Transmite en streaming un cuerpo de respuesta de texto plano; el header x-conversation-id de la respuesta lleva el id de la conversación. idempotencyKey es obligatorio — un request reintentado con la misma clave nunca vuelve a facturarse ni a llamar al proveedor. |
skills
| Method | Path | Auth | Notas |
|---|
| POST | /v1/skills | session | { name, instruction, input_schema?, output_schema? }. Crea un Skill privado de su cuenta. |
| GET | /v1/skills | session | Lista sus propios Skills. |
| GET | /v1/skills/templates | session | Lista plantillas iniciales que puede duplicar en su propio Skill. |
| POST | /v1/skills/templates/:id/duplicate | session | Copia una plantilla en un nuevo Skill propio. |
| POST | /v1/skills/import | session | { name, instruction, input_schema?, output_schema?, version? } — exactamente la forma que produce GET /v1/skills/:id/export, de modo que exportar → importar funciona en ambos sentidos. Cualquier otro campo (id, owner_id, organization_id, allowed_tools) se rechaza de plano; un Skill importado nunca conserva un tool binding del archivo. |
| GET | /v1/skills/:id | session | Un Skill de su propiedad, con todas sus versiones. |
| GET | /v1/skills/:id/export | session | La forma portable { name, instruction, input_schema, output_schema, version }, que coincide con la entrada del endpoint de importación. |
| POST | /v1/skills/:id/versions | session | { instruction, input_schema?, output_schema? }. Publica una nueva versión inmutable. |
| POST | /v1/skills/:id/run | session | { model, input, conversationId?, idempotencyKey }. Vuelve a entrar en el mismo pipeline de chat que POST /v1/chat, con input en lugar del único mensaje de usuario — mismo comportamiento de idempotency/quota/ledger. |
conversations
| Method | Path | Auth | Notas |
|---|
| GET | /v1/conversations | session | Lista sus propias conversaciones. |
| GET | /v1/conversations/:id | session | Una conversación individual con sus mensajes. Devuelve 404 para una conversación que no le pertenece. |
files
| Method | Path | Auth | Notas |
|---|
| GET | /v1/files | session | Lista sus propios archivos subidos. |
| POST | /v1/files | session | Subida multipart, nombre de campo file. Acepta texto plano, Markdown, PDF, y .docx, hasta 20 MB. |
| DELETE | /v1/files/:id | session | Elimina un archivo de su propiedad (objeto de almacenamiento + registro). |
plans
| Method | Path | Auth | Notas |
|---|
| GET | /v1/plans | — (público) | Lista los planes con precios y modelos permitidos — intencionalmente público para que el precio sea visible antes de iniciar sesión. |
billing
| Method | Path | Auth | Notas |
|---|
| POST | /v1/billing/checkout | session | { planId, provider: "sepay" | "paddle" }. El monto cobrado siempre proviene de la consulta del plan del lado del servidor, nunca del cliente. Los planes Free y Enterprise no pueden pagarse por esta vía. |
| GET | /v1/billing/quota | session | Su límite de quota diaria actual y el saldo restante. |
Existen dos recursos más en la API en producción que no se documentan aquí como una superficie orientada al
cliente: /v1/webhooks/* (solo entrante, llamado por SePay/Paddle — no algo que usted llame) y /v1/admin/*
(interno, solo para admin).