Se ejecuta enWrit Cloud
En esta página
Autenticación.
Cinco familias de credenciales, cada una abre exactamente una superficie. Esta página las mapea, y luego profundiza en las dos que más generarás: las claves API wt_ con sus scopes, y OAuth para aplicaciones de terceros.
tokens ▸ el mapa
Cinco credenciales, cinco superficies.
Cada credencial abre exactamente una porción de Writ. La forma más rápida de depurar un 401 es comprobar el par: qué token, en qué superficie.
| Credencial | Prefijo | Dónde funciona |
|---|---|---|
| Clave API | wt_ | Tus propios servidores, en toda la superficie /api/* + /api/v1/* y en POST /mcp. |
| Token de acceso OAuth | wto_ | Aplicaciones de terceros, en /api/* y en los servidores publicados /mcp/{slug}. Los tokens heredados pso_ se siguen aceptando. |
| Clave de consumidor | csk_ | Tus clientes, solo en la pasarela /v1/{slug}/{path} — nunca en /api. |
| Token SCIM | — | Tu proveedor de identidad, solo en /scim/v2/* — un token por organización. |
| Sesión (JWT) | — | La aplicación web tras el inicio de sesión — tokens de acceso de 15 minutos, revocados en el servidor al cerrar sesión. |
wt ▸ claves + scopes
Claves API: una cabecera, un ámbito ceñido.
Una clave es wt_ seguido de 43 caracteres URL-safe. El secreto se muestra una sola vez al crearla y se guarda hasheado — las listas y los registros muestran solo un prefijo corto y no secreto. Envíala como token Bearer:
curl https://api.usewrit.app/api/v1/workflows \
-H "Authorization: Bearer $WRIT_API_KEY" headers = {"Authorization": f"Bearer {os.environ['WRIT_API_KEY']}"} const headers = { Authorization: `Bearer ${process.env.WRIT_API_KEY}` }; req.Header.Set("Authorization", "Bearer "+os.Getenv("WRIT_API_KEY")) let req = client.get(url).bearer_auth(std::env::var("WRIT_API_KEY")?); Scopes: resource:action
Las acciones son read, write, execute y delete, sobre diecisiete recursos. Una clave lleva solo los scopes que le concedes — y los recursos fijables pueden acotarse aún más, a ids concretos.
| Recurso | Acciones | Nota |
|---|---|---|
workflows | read · write · execute · delete | Fijable a workflows concretos. |
runs | read | |
monitors | read · write · execute · delete | Fijable. |
datasets | read · delete | Fijable. |
transfer | read · write | Exportación e importación masiva de toda la cuenta — nunca forma parte de un preset. |
crawl | read · execute · delete | |
scrape | execute | Separado de crawl: una clave de extracción de página única no puede iniciar un crawl de sitio. |
files | read · write · delete | |
personas | read · write · delete | |
secrets | read · write · delete | Los valores nunca se devuelven — solo nombres y metadatos. |
agents | read · write · execute | |
triggers | read · write · execute · delete | |
recorder | read · execute | |
streaming | read · execute · delete | |
mcp | read · write · execute · delete | |
marketplace | read · write | |
account | read |
Tres presets cubren la mayoría de las claves: read_only (cada :read), run (:read + :execute) y full (todo, incluido borrar). transfer queda excluido de todos los presets y debe concederse a mano. Los comodines se expanden a scopes concretos en el momento de la concesión, así que una clave nunca puede ampliarse en silencio — y la aplicación es de denegación por defecto: una ruta no abierta explícitamente a claves API las rechaza.
Rotación. Las claves son independientes: genera una clave nueva con los mismos scopes, despliégala y revoca la antigua — sin tiempo de inactividad. Guarda las claves en tu gestor de secretos; no pueden volver a mostrarse.
oauth ▸ aplicaciones de terceros
OAuth: PKCE, sin client secret.
La superficie OAuth está hecha para clientes públicos: PKCE es obligatorio, no hay client secret, y los clientes pueden registrarse solos mediante el registro dinámico RFC 7591. Los tokens de acceso llevan el prefijo wto_ (el heredado pso_ se sigue aceptando) y funcionan en /api/* y en los servidores publicados /mcp/{slug}.
| Endpoint | Función |
|---|---|
GET /api/oauth/.well-known/oauth-authorization-server | Metadatos del servidor de autorización — endpoints, scopes, métodos PKCE. |
POST /api/oauth/register | Registro dinámico de clientes RFC 7591, para clientes públicos con PKCE. |
Los scopes de OAuth son un conjunto aparte y más pequeño — trece — y una concesión tope en el rol operator, nunca admin:
| Scope | Concede |
|---|---|
targets:read | Ver los objetivos vigilados y su estado. |
targets:write | Crear, modificar y eliminar objetivos. |
changes:read | Ver los cambios detectados y los diffs. |
workflows:read | Ver los workflows. |
workflows:write | Crear y modificar workflows. |
workflows:execute | Disparar la ejecución de workflows. |
triggers:read | Ver las reglas de disparo y las configuraciones de webhook. |
triggers:write | Crear y modificar triggers. |
reports:read | Ver los resultados de runs y los informes. |
notifications:read | Ver los ajustes de notificación. |
notifications:write | Gestionar los ajustes de notificación. |
org:read | Ver la información de la organización y los miembros del equipo. |
profile:read | Ver la información del perfil de usuario. |
cuenta ▸ seguridad de acceso
Cerrar la propia cuenta.
Al margen de las credenciales de API, la cuenta lleva sus propias protecciones:
Registra una app de autenticación, confirma un código para activarla, desactívala con un código válido — con códigos de recuperación de un solo uso como respaldo. La verificación tiene límite de tasa contra la fuerza bruta.
Inicio de sesión sin contraseña, o segundo factor junto a la contraseña.
Configurado por conexión — aserciones firmadas en SAML, PKCE + nonce en OIDC.
Demuestra un dominio con un registro DNS TXT en _writ-sso-verify.{domain}; activa opcionalmente sso_enforced para que los miembros entren obligatoriamente por SSO.
Tu proveedor de identidad crea y desaprovisiona cuentas en /scim/v2/*; el desaprovisionamiento revoca de inmediato las sesiones y tokens vivos del usuario.
secretos ▸ dos sintaxis
Referencias vault vs placeholders de IA.
Dos sintaxis de placeholder, dos canales — no las mezcles. {{vault:key}} es la sintaxis de los campos de workflow: admite subcampos como {{vault:name.username}}, y una referencia de credenciales sin subcampo se resuelve a la contraseña. {{secret:key}} es el placeholder del canal de IA, para cuando una sesión de IA necesita un secreto. Un campo de workflow espera vault:; una instrucción de IA espera secret:.
faq
Preguntas de autenticación, respondidas.
¿Qué token abre qué superficie?
¿Cómo se guardan las claves — puedo recuperar una?
¿Qué no concede nunca un preset?
¿Puede una app OAuth convertirse en admin?
referencia ▸ siguiente