API de organización
La API de organización es la interfaz programática de tu propio colegio: los mismos recursos que administras en la consola —padrón, consentimientos, derechos ARCO, RAT, transparencia— disponibles para tus scripts e integraciones internas mediante una API key de organización. En esta página verás cómo se emite una key, cómo se autentica una llamada, qué permisos puede portar y cómo esos permisos determinan cuánto ve del padrón.
Si eres una plataforma externa que actúa como encargado de tratamiento de
uno o más colegios, esta no es tu puerta: usa la Partner API, que autentica
con credencial keyId.secret y alcances por conexión. La diferencia entre
ambas está explicada en Autenticación.
El modelo de la API key
Una API key de organización es una credencial emitida por un administrador desde la consola (Integraciones → API keys) o mediante la ruta POST /api/api-keys con sesión activa. Al emitirla se eligen sus permisos con casillas de verificación: la key sólo puede portar permisos del catálogo asignable (listado más abajo) y nunca hereda los permisos de la persona que la creó.
Tres propiedades definen su comportamiento:
- Se muestra una sola vez. La respuesta de creación es la única copia en texto plano; Edugoverna almacena sólo el hash. En adelante la consola muestra el
prefixy el inicio enmascarado (start) para identificarla. Si se pierde, se revoca y se emite otra. - Pertenece a la organización, no a una persona. La key queda ligada al colegio que la emitió (
referenceId) y toda llamada opera dentro de ese tenant. No hay que pasar el identificador de la organización en la URL: la key es el contexto. - Es revocable y auditable. Emitirla y revocarla escribe eventos de auditoría; revocar la deshabilita (queda visible como «Revocada») en vez de borrarla.
Autenticación con x-api-key
Toda llamada lleva la key en el encabezado x-api-key, contra la base https://app.edugoverna.com/api:
Llamada autenticada con API key
curl "https://app.edugoverna.com/api/schools/current" \
-H "x-api-key: {tu_api_key}"
Casi todas las rutas de la API de organización aceptan indistintamente una sesión de la consola (cookie) o una API key: si no hay sesión y falta el encabezado, la respuesta es 401 API_KEY_REQUIRED. Una key deshabilitada o expirada responde 401. Unas pocas rutas pensadas para sistemas (como las verificaciones de /records) exigen API key incluso con sesión activa, y las operaciones sensibles marcadas «sólo sesión» en estas páginas rechazan cualquier key.
Algunas superficies sensibles son sólo de sesión: exportaciones ARCO, incidentes de seguridad, reporte al regulador, decisiones manuales de consentimiento con evidencia, y la purga de titulares, entre otras. Cada página de esta referencia lo indica donde corresponde con la frase «sólo disponible con sesión de la consola». Un intento con API key sobre esas superficies queda además registrado en auditoría.
Permisos asignables
Estos son los 28 permisos que una API key de organización puede portar, agrupados por familia. En cada endpoint de esta referencia encontrarás cuál exige.
| Familia | Permisos |
|---|---|
| Colegio y gobernanza | schools.read, schools.write |
| Lectura de titulares (escalera de proyección) | subjects.read.directory, subjects.read.identity_basic, subjects.read.identity_sensitive, subjects.read.contact_masked, subjects.read.contact_full |
| Escritura de titulares | subjects.write |
| Estudiantes (Generaciones y Cursos) | students.read, students.write |
| Apoderados | guardians.read, guardians.write |
| Actividades de tratamiento (RAT) | processing_activities.read, processing_activities.write |
| Evaluaciones de impacto y riesgos | dpia.read |
| Portal de transparencia | transparency.read |
| Consentimientos | consents.read, consents.write |
| Derechos ARCO | rights_requests.read, rights_requests.write |
| Integraciones | integrations.read, integrations.write |
| Padrones compartidos | registry_shares.read, registry_shares.write, shared_subjects.read, shared_campaigns.write, registrar_invites.manage |
| Auditoría | audit.read |
Los permisos de escritura sobre EIPD, riesgos y transparencia (dpia.write,
transparency.write, transparency.publish) son de sesión: una API key puede
leer esas superficies pero no autorarlas. Lo mismo aplica a subjects.purge,
reports.generate y a toda la familia de incidentes.
La escalera de lectura de titulares
Los cinco permisos subjects.read.* no son excluyentes entre sí: componen una proyección que determina qué campos de cada titular devuelve la API. La identidad y el contacto se resuelven por separado, y la key puede combinar tiers (por ejemplo identity_basic + contact_masked).
- Nombre
subjects.read.directory- Tipo
- tier base
- Descripción
Sólo datos de directorio: ningún nombre (los campos de identidad llegan en
null), sólo el código de referencia (referenceCode), tipo de titular y estado. Es el tier del rol de gestión de incidentes.
- Nombre
subjects.read.identity_basic- Tipo
- identidad
- Descripción
Agrega nombres y apellidos legales y nombre preferido. La fecha de nacimiento, dirección y nacionalidad siguen en
null.
- Nombre
subjects.read.identity_sensitive- Tipo
- identidad
- Descripción
Identidad completa descifrada: fecha de nacimiento, dirección, RUT en claro y perfiles de estudiante/apoderado sin censurar.
- Nombre
subjects.read.contact_masked- Tipo
- contacto
- Descripción
Contactos con el valor enmascarado (
contactMaskedValue, p. ej.a•••o@example.com); el valor en claro llega ennull.
- Nombre
subjects.read.contact_full- Tipo
- contacto
- Descripción
Contactos descifrados completos (correo y teléfono en claro).
Dos reglas transversales protegen el padrón independiente del tier:
- Los listados nunca son sensibles.
GET /data-subjectsdegrada la proyección a nivel de nómina (identity_sensitive→basic,contact_full→masked). El registro completo con PII sólo existe en el detalle (GET /data-subjects/:subjectId), y leerlo con proyección sensible queda registrado. - Buscar por nombre exige poder leer uno. El parámetro de búsqueda sólo consulta nombres si la proyección es al menos
identity_basic; a tierdirectoryla búsqueda por RUT o correo funciona como verificación de pertenencia, pero se audita sin almacenar el término.
El detalle está en Sujetos del padrón.
Listar las API keys
Devuelve todas las keys de la organización activa, vigentes y revocadas, sin material secreto: el hash nunca se proyecta, sólo start (inicio enmascarado) y prefix. Requiere sesión de la consola con el permiso api_keys.manage; las tres rutas de gestión de keys son de sesión, una API key no puede administrar otras keys.
Campos de cada key
- Nombre
id- Tipo
- string
- Descripción
Identificador de la key.
- Nombre
name- Tipo
- string
- Descripción
Nombre descriptivo (máximo 32 caracteres).
- Nombre
start- Tipo
- string
- Descripción
Primeros caracteres de la key, para identificarla.
- Nombre
prefix- Tipo
- string
- Descripción
Prefijo opcional elegido al crearla.
- Nombre
enabled- Tipo
- boolean
- Descripción
falsecuando fue revocada.
- Nombre
permissions- Tipo
- string[]
- Descripción
Los permisos canónicos que porta, ordenados.
- Nombre
expiresAt- Tipo
- timestamp | null
- Descripción
Expiración, si se fijó al crearla.
- Nombre
lastRequest- Tipo
- timestamp | null
- Descripción
Última vez que la key fue usada.
Solicitud
curl "https://app.edugoverna.com/api/api-keys" \
-H "Cookie: {sesion_de_consola}"
Respuesta
{
"apiKeys": [
{
"id": "k4d9…",
"name": "Sync biblioteca",
"start": "edug_a1b2",
"prefix": "edug",
"enabled": true,
"permissions": [
"students.read",
"subjects.read.contact_masked",
"subjects.read.identity_basic"
],
"expiresAt": null,
"lastRequest": "2026-08-24T18:12:03.000Z",
"requestCount": 1204,
"metadata": null,
"createdAt": "2026-06-01T12:00:00.000Z",
"updatedAt": "2026-08-24T18:12:03.000Z"
}
],
"total": 1
}
Emitir una API key
Crea una key nueva con los permisos indicados. Requiere sesión de la consola con api_keys.manage. La respuesta incluye el campo key con la credencial en texto plano: es la única vez que se entrega.
Atributos requeridos
- Nombre
permissions- Tipo
- string[]
- Descripción
Uno o más permisos del catálogo asignable. Un permiso fuera del catálogo responde
422.
Atributos opcionales
- Nombre
name- Tipo
- string
- Descripción
Nombre descriptivo, entre 1 y 32 caracteres.
- Nombre
expiresIn- Tipo
- integer | null
- Descripción
Vida útil en segundos;
nullpara no expirar.
- Nombre
prefix- Tipo
- string
- Descripción
Prefijo visible de la key (2 a 32 caracteres).
- Nombre
metadata- Tipo
- object
- Descripción
Metadatos libres que la consola muestra junto a la key.
- Nombre
partnerConnectionId- Tipo
- string | null
- Descripción
Asocia la key a una conexión de partner para mostrarla como «asignada a» esa conexión.
Solicitud
curl -X POST "https://app.edugoverna.com/api/api-keys" \
-H "Cookie: {sesion_de_consola}" \
-H "Content-Type: application/json" \
-d '{
"name": "Sync biblioteca",
"prefix": "edug",
"permissions": [
"students.read",
"subjects.read.identity_basic",
"subjects.read.contact_masked"
]
}'
Respuesta · 201
{
"id": "k4d9…",
"name": "Sync biblioteca",
"key": "edug_a1b2c3d4e5…",
"start": "edug_a1b2",
"prefix": "edug",
"enabled": true,
"permissions": [
"students.read",
"subjects.read.contact_masked",
"subjects.read.identity_basic"
],
"expiresAt": null,
"createdAt": "2026-08-25T12:00:00.000Z",
"updatedAt": "2026-08-25T12:00:00.000Z"
}
Revocar una API key
Deshabilita la key: deja de verificar de inmediato, pero el registro permanece visible en la consola como «Revocada» para conservar la historia operativa. Requiere sesión de la consola con api_keys.manage. Una key de otra organización responde 404 API_KEY_NOT_FOUND — la existencia de keys ajenas no se revela.
Solicitud
curl -X DELETE "https://app.edugoverna.com/api/api-keys/k4d9…" \
-H "Cookie: {sesion_de_consola}"
Errores y límites
Todos los errores llegan en el mismo sobre, con un código estable y un mensaje en español:
Sobre de error
{
"error": {
"code": "SUBJECTS_READ_FORBIDDEN",
"message": "Se requiere un permiso de lectura de titulares…",
"details": null
}
}
Cada key trae un límite de tasa propio (por defecto 10.000 solicitudes por ventana de 24 horas); al excederlo la verificación de la key deja de aceptarla y la API responde 401 con el código RATE_LIMITED hasta que la ventana se renueva. El catálogo de códigos está en Errores y la política completa de límites en Límites.
Las páginas de esta referencia
- Sujetos del padrón — titulares, apoderados, Generaciones y Cursos.
- Consentimientos — campañas, solicitudes y evidencia.
- Derechos ARCO — solicitudes de derechos y portal ARCO.
- Actividades de tratamiento — RAT y evaluaciones de impacto.
- Riesgos — catálogo, medidas y registro de riesgos.
- Importaciones — el importador de planillas.
- Transparencia — portal público, marca y dominios.
- Gobernanza y evidencia — encargados, capacitaciones, reportes.