Transparencia
El portal de transparencia es la página pública donde el colegio informa, letra por letra del Art. 14 ter, qué datos trata y para qué. Su contenido combina secciones redactadas por el colegio con bloques de datos que se derivan automáticamente del RAT, y cada publicación acuña una versión sellada con checksum — la prueba de qué decía el portal en qué momento. Con una API key el dominio es de lectura (transparency.read); la edición y la publicación son de consola.
El portal público de cada colegio vive en https://app.edugoverna.com/transparencia/:slug, y su contenido JSON se sirve sin autenticación en GET /public/transparency/:slug (con su PDF en …/pdf).
Estado del portal
Requiere transparency.read. La foto completa del portal: configuración, secciones con su letra del artículo, advertencias de publicación (avisan, nunca bloquean), cobertura y el sello de la última versión publicada.
Claves de la respuesta
- Nombre
portal- Tipo
- object
- Descripción
slug,enabled, contactos y si enlaza los portales ARCO y de consentimiento (arcoPortalLinked,consentPortalLinked).
- Nombre
sections- Tipo
- array
- Descripción
Cada sección con
sectionKey,letter(a–lonull),title,enabled,position, su cuerpo enriquecido y la guía del catálogo (guidance,required).
- Nombre
warnings- Tipo
- array
- Descripción
{ letter, sectionKey, message }— lo que faltaría para cubrir el artículo.
- Nombre
coverage- Tipo
- object
- Descripción
{ answered, total }.
- Nombre
published- Tipo
- object | null
- Descripción
{ versionId, versionNumber, publishedAt, checksum, catalogVersion }de la última publicación;nullsi nunca se publicó.
- Nombre
stale- Tipo
- boolean
- Descripción
truecuando hay cambios sin publicar respecto de la última versión.
Solicitud
curl "https://app.edugoverna.com/api/transparency/portal" \
-H "x-api-key: {tu_api_key}"
Respuesta (recortada)
{
"portal": {
"slug": "colegio-andes",
"enabled": true,
"contactEmail": "privacidad@colegioandes.cl",
"arcoPortalLinked": true,
"consentPortalLinked": true
},
"sections": [
{
"sectionKey": "finalidades",
"letter": "b",
"title": "Para qué usamos los datos",
"enabled": true,
"position": 2,
"required": true
}
],
"warnings": [],
"coverage": { "answered": 12, "total": 12 },
"published": {
"versionId": "tv07…",
"versionNumber": 7,
"publishedAt": "2026-08-01T13:00:00.000Z",
"checksum": "5d8c…",
"catalogVersion": "art14ter-2026.06"
},
"stale": false
}
Bloques de datos
Requiere transparency.read. Los bloques son tablas que el portal materializa desde el RAT y la gobernanza — el colegio no las redacta, se derivan: categorias, universo, finalidades, destinatarios, encargados, transferencias, retencion, medidas, decisiones_automatizadas, fuentes.
GET /transparency/blocks lista el resumen; GET /transparency/blocks/:blockKind resuelve uno con sus columnas y filas (un tipo desconocido responde 404 TRANSPARENCY_BLOCK_UNKNOWN).
Solicitud
curl "https://app.edugoverna.com/api/transparency/blocks/finalidades" \
-H "x-api-key: {tu_api_key}"
Respuesta (recortada)
{
"block": {
"blockKind": "finalidades",
"columns": ["Actividad", "Finalidad", "Base de licitud"],
"rows": [
["Comunicaciones académicas", "Informar y coordinar…", "Consentimiento"]
]
}
}
Versiones publicadas
Requiere transparency.read. El historial sellado del portal, hasta 50 versiones en orden descendente. Cada versión guarda el documento resuelto completo (con los bloques ya materializados al momento de publicar), su checksum SHA-256 — el mismo que se imprime al pie del portal público — y el PDF archivado (documentArtifactId).
GET /transparency/versions/:versionId agrega el campo document con la página completa tal como se publicó.
Solicitud
curl "https://app.edugoverna.com/api/transparency/versions" \
-H "x-api-key: {tu_api_key}"
Respuesta (recortada)
{
"versions": [
{
"id": "tv07…",
"versionNumber": 7,
"checksum": "5d8c…",
"catalogVersion": "art14ter-2026.06",
"warnedLetters": [],
"notes": "Actualiza destinatarios tras nuevo LMS",
"publishedAt": "2026-08-01T13:00:00.000Z",
"publishedByUserId": "usr_…",
"documentArtifactId": "ar91…"
}
]
}
Política de privacidad y edición
GET /transparency/policy (con transparency.read) devuelve { policy, approvalPending }: la política vigente —la última versión aprobada y publicada— o null si la propuesta aún espera su aprobación a cuatro ojos. GET /transparency/preview arma el documento completo con los datos de hoy, sin publicarlo.
La edición es de consola:
| Método y ruta | Permiso | Qué hace |
|---|---|---|
PUT /transparency/portal | transparency.write | Configura el portal. Sólo sesión. |
POST /transparency/sections · PATCH /transparency/sections/:sectionId · PATCH /transparency/sections/reorder · DELETE · POST …/:sectionId/draft | transparency.write | Redacción de secciones. Sólo sesión. |
PUT /transparency/policy | schools.write | Propone la política; queda approvalPending hasta que otra persona apruebe. Sólo sesión. |
POST /transparency/publish | transparency.publish | Acuña la versión sellada: responde { published: { versionId, versionNumber, checksum, publishedAt, warnedLetters, documentArtifactId } }. Sólo sesión — publicar exige una persona identificable. |
Marca del colegio
El color y el logo tiñen los portales públicos (transparencia, ARCO, consentimiento). Ambas rutas aceptan API key con schools.write y quedan auditadas.
PATCH /branding/color— cuerpo{ "color": "#RRGGBB" }(hex de 6 dígitos) o{ "color": null }para limpiar. Responde{ ok, brandColor }.POST /branding/logo—multipart/form-data, campofile, PNG o JPEG. Responde{ url, artifactId, contentType, sizeBytes }; laurles pública y versionada por checksum.DELETE /branding/logo— responde{ ok, removed }.
Solicitud
curl -X PATCH "https://app.edugoverna.com/api/branding/color" \
-H "x-api-key: {tu_api_key}" \
-H "Content-Type: application/json" \
-d '{ "color": "#D64545" }'
Respuesta
{ "ok": true, "brandColor": "#D64545" }
Dominios propios
Sirve los portales públicos bajo el dominio del colegio (transparencia.colegio.cl). Requiere el módulo custom_domains del plan; lectura con schools.read, escrituras con schools.write.
Cada dominio indica su surface (arco o transparency), su status (pending_dns → pending_certificate → active; sólo active enruta) y los dnsRecords exactos que el colegio debe crear. En despliegues sin dominios configurados la respuesta es inerte: { available: false, domains: [], cnameTarget: null }.
| Método y ruta | Qué hace |
|---|---|
POST /organization/portal-domains | Registra { hostname, surface }. |
POST …/:portalDomainId/check | Re-verifica DNS y certificado. |
PATCH …/:portalDomainId | { redirectLegacyPath }. |
DELETE …/:portalDomainId | Elimina el dominio. |
Solicitud
curl "https://app.edugoverna.com/api/organization/portal-domains" \
-H "x-api-key: {tu_api_key}"
Respuesta (recortada)
{
"available": true,
"cnameTarget": "portales.edugoverna.com",
"domains": [
{
"id": "pd3f…",
"hostname": "transparencia.colegioandes.cl",
"surface": "transparency",
"status": "active",
"statusMessage": null,
"redirectLegacyPath": true,
"dnsRecords": [
{
"type": "CNAME",
"name": "transparencia",
"absoluteName": "transparencia.colegioandes.cl",
"value": "portales.edugoverna.com",
"purpose": "routing"
}
],
"verifiedAt": "2026-08-02T15:30:00.000Z"
}
]
}