Para desarrolladores

Documentación

Conecta tu sistema con Ciudad Viva para publicar tus eventos automáticamente. Tu infraestructura no cambia — somos nosotros quienes consultamos tu API.

Visión general

La integración API de Ciudad Viva es un sistema de extracción automática (pull): Ciudad Viva consulta periódicamente tu API, obtiene los eventos y los publica en la plataforma. Tu sistema no necesita saber que Ciudad Viva existe ni enviar nada por iniciativa propia.

🔗

Sin modificar tu sistema

Solo necesitas una URL de API que devuelva tus eventos en JSON.

🔄

Sincronización automática

Sincronizamos diariamente a la 1 AM (hora de Chile). También puedes activar sincronizaciones manuales.

🔒

Credenciales seguras

Las credenciales de tu API se almacenan cifradas y nunca se exponen en la plataforma.

Cómo funciona

El proceso tiene dos actores: tu sistema (que ya existe y no cambia) y Ciudad Viva (que lo consulta).

  1. 1

    Configuras la integración

    Desde el panel de tu organización en Ciudad Viva, ingresas la URL de tu API, el método HTTP, las credenciales de autenticación (si corresponde) y el mapeo de campos.

  2. 2

    Pruebas la conexión

    Haces clic en "Probar conexión". Ciudad Viva consulta tu API en ese momento y muestra cuántos eventos encontró y una vista previa de los primeros resultados.

  3. 3

    Activas la integración

    Una vez que la prueba es exitosa, activas la integración. A partir de ese momento, Ciudad Viva sincroniza tus eventos automáticamente.

  4. 4

    Sincronización diaria

    Cada día a la 1 AM (hora de Chile), Ciudad Viva consulta tu API, crea los eventos nuevos, actualiza los que cambiaron y desactiva los que ya no están.

Requisitos de tu API

Tu API puede tener cualquier estructura, siempre que cumpla estos requisitos básicos:

  • Responde con JSON (Content-Type: application/json).
  • Devuelve un array de eventos, ya sea en la raíz de la respuesta o dentro de algún campo.
  • Cada evento tiene al menos un título y una fecha de inicio.
  • La URL es accesible desde internet (no puede ser localhost ni una red interna privada).
  • Acepta GET o POST como método HTTP.
¿Tu API requiere paginación? Por ahora la integración consulta la URL una vez por sincronización. Si tu API pagina los resultados, configura una URL que devuelva todos los eventos de una vez (por ejemplo, con un límite alto o un endpoint de exportación).

Configuración paso a paso

Accede al panel de tu organización en Ciudad Viva y sigue estos pasos:

  1. 1

    Ve a Mi organización → Integraciones → Nueva integración.

  2. 2

    Ingresa un nombre descriptivo (ej: "API de eventos municipales").

  3. 3

    Ingresa la URL de tu API.

  4. 4

    Selecciona el método HTTP (GET o POST).

  5. 5

    Si tu API devuelve los eventos dentro de un campo (ej: data.results), ingresa esa ruta en Ruta al array de eventos. Si el array está en la raíz, deja este campo vacío.

  6. 6

    Configura la autenticación si tu API lo requiere (ver sección Autenticación).

  7. 7

    Configura el mapeo de campos indicando qué campo de tu API corresponde a cada campo de Ciudad Viva (ver sección Mapeo de campos).

  8. 8

    Haz clic en Probar conexión para verificar que todo funciona.

  9. 9

    Si la prueba es exitosa, haz clic en Activar.

Autenticación

Ciudad Viva soporta cuatro métodos de autenticación. Elige el que usa tu API. Las credenciales se almacenan cifradas con AES-256-GCM y nunca se exponen en logs ni respuestas.

Sin autenticación

Para APIs públicas que no requieren credenciales.

{
  "auth": {
    "type": "none"
  }
}

API Key

Ciudad Viva enviará tu clave en el header que definas. El nombre del header lo pones tú (ej: X-API-Key, Authorization).

{
  "auth": {
    "type": "api_key",
    "apiKeyHeader": "X-API-Key",
    "apiKey": "tu-clave-secreta"
  }
}

Bearer Token

Ciudad Viva enviará el header Authorization: Bearer <token>.

{
  "auth": {
    "type": "bearer",
    "bearerToken": "eyJhbGciOiJIUzI1NiJ9..."
  }
}

Basic Auth

Ciudad Viva codificará en Base64 el par usuario:contraseña y lo enviará en el header Authorization: Basic <encoded>.

{
  "auth": {
    "type": "basic",
    "basicUsername": "mi-usuario",
    "basicPassword": "mi-contraseña"
  }
}

Formato de respuesta

Tu API puede devolver los eventos en cualquiera de estas estructuras. El campo Ruta al array le indica a Ciudad Viva dónde encontrar el array de eventos.

Array en la raíz (Ruta al array: vacío)

[
  {
    "title": "Festival de Verano",
    "date": "2026-02-15",
    "location": "Parque O'Higgins"
  },
  {
    "title": "Obra de Teatro",
    "date": "2026-02-20",
    "location": "Teatro Municipal"
  }
]

Array dentro de un campo (Ruta al array: events)

{
  "status": "ok",
  "total": 2,
  "events": [
    {
      "title": "Festival de Verano",
      "date": "2026-02-15"
    }
  ]
}

Array anidado en varios niveles (Ruta al array: data.results)

{
  "meta": { "page": 1 },
  "data": {
    "results": [
      {
        "content": {
          "title": "Festival de Verano",
          "start": "2026-02-15T20:00:00"
        }
      }
    ]
  }
}

Mapeo de campos

El mapeo le dice a Ciudad Viva qué campo de tu API corresponde a cada campo de la plataforma. Puedes usar notación de punto para acceder a campos anidados (ej: content.title, meta.date.start).

Campo Ciudad VivaEstadoDescripciónEjemplo de valor
titleobligatorioNombre del eventoFestival de Verano
startDateobligatorioFecha y hora de inicio (ISO 8601 o fecha simple)2026-02-15T20:00:00
endDateopcionalFecha y hora de término2026-02-15T23:00:00
descriptionopcionalDescripción del eventoGran festival de música...
imageUrlopcionalURL de la imagen principalhttps://ejemplo.cl/imagen.jpg
venueopcionalNombre del recinto o lugarParque O'Higgins
addressopcionalDirección del eventoAv. Tupper 1955, Santiago
districtopcionalComuna del eventoSantiago
priceopcionalPrecio o descripción de entradaEntrada liberada
eventUrlopcionalURL del evento en tu sitiohttps://ejemplo.cl/eventos/festival
externalIdopcionalID único en tu sistema. Recomendado para deduplicación precisa.EVT-2026-001
categoryopcionalCategoría del evento. Si no coincide, se usa la categoría por defecto.Música

Ejemplo de configuración de mapeo

Si tu API devuelve content.name como título y meta.startAt como fecha de inicio, el mapeo sería:

{
  "fieldMap": {
    "title": "content.name",
    "startDate": "meta.startAt",
    "endDate": "meta.endAt",
    "description": "content.body",
    "imageUrl": "content.coverImage",
    "venue": "location.name",
    "address": "location.address",
    "district": "location.commune",
    "price": "ticket.description",
    "eventUrl": "permalink",
    "externalId": "id"
  }
}

Deduplicación

Si mapeas el campo externalId, Ciudad Viva lo usará para identificar eventos de forma única y evitar duplicados. Si no lo mapeas, usará un hash del título y la fecha de inicio como alternativa. Se recomienda siempre mapear un ID externo para mayor precisión.

Prueba de conexión

Antes de activar la integración, puedes probar la conexión desde el formulario de configuración. Ciudad Viva consultará tu API en ese momento y mostrará:

  • El código HTTP de respuesta de tu API.
  • Cuántos eventos encontró en la respuesta.
  • Una vista previa de los primeros 3 eventos con el mapeo aplicado.
  • El mensaje de error si algo falla (URL incorrecta, autenticación rechazada, campo no encontrado, etc.).

Solo puedes activar la integración si la prueba de conexión fue exitosa. Si modificas la configuración después de activarla, la integración vuelve a estado borrador y deberás probarla nuevamente.

Webhook (opcional)

Además de la sincronización diaria automática, puedes configurar un webhook para que Ciudad Viva sincronice tus eventos en el momento en que tú lo necesites. Cuando creas un nuevo evento en tu sistema, tu sistema puede notificar a Ciudad Viva inmediatamente y el evento aparecerá en la plataforma sin esperar hasta el día siguiente.

Activar el webhook

En el panel de tu integración, activa la opción Webhook. Ciudad Viva generará una URL única y una API Key para tu integración. La URL tiene este formato:

https://server.ciudad-viva.cl/api/webhooks/{tu-webhook-key}

Llamar al webhook desde tu sistema

Haz un POST a la URL del webhook cuando quieras sincronizar. El cuerpo de la solicitud puede estar vacío — no necesitas enviar datos, ya que Ciudad Viva consultará tu API de todas formas.

curl -X POST \
  "https://server.ciudad-viva.cl/api/webhooks/{tu-webhook-key}"

# Respuesta exitosa (HTTP 202):
{ "queued": true }

Límite de llamadas

Para proteger tu sistema y el nuestro, el webhook tiene un límite de 1 llamada cada 10 segundos (máximo 6 por minuto). Las llamadas que superen este límite recibirán una respuesta HTTP 429. Si publicas muchos eventos en ráfagas cortas, no te preocupes: la sincronización diaria los captará de todas formas.

# Si superas el límite:
HTTP 429 Too Many Requests
{ "error": "rate_limit_exceeded", "retryAfterMs": 8500 }

Seguridad del webhook

La URL del webhook contiene un token de seguridad único. Trátala como una contraseña: no la compartas públicamente ni la incluyas en repositorios de código. Puedes regenerar la key en cualquier momento desde el panel; la key anterior quedará inválida de inmediato.

Sincronización

Cada sincronización sigue este proceso:

Consulta tu API

Ciudad Viva hace la solicitud HTTP con la configuración que definiste (URL, método, autenticación, headers).

Extrae los eventos

Navega a la ruta configurada dentro de la respuesta y aplica el mapeo de campos a cada evento.

Eventos nuevos

Los que no existían en Ciudad Viva se crean. Si tu organización está verificada, quedan aprobados de inmediato; si no, quedan en revisión.

Eventos existentes

Los que ya existen (identificados por externalId o hash) se actualizan si cambiaron.

Eventos desaparecidos

Los que estaban en Ciudad Viva pero ya no están en tu API se desactivan automáticamente.

Registro de ejecución

Ciudad Viva guarda un log con los resultados: cuántos eventos encontró, creó, actualizó, dejó sin cambios, desactivó y cuántos fallaron.

Notificaciones de error

Si tu API falla 3 sincronizaciones consecutivas, Ciudad Viva te enviará un email de alerta para que puedas revisarlo. La integración seguirá intentando en los siguientes ciclos.

Próximamente

Publicación directa de eventos

Estamos desarrollando un endpoint que te permitirá crear eventos en Ciudad Viva directamente desde tu sistema, sin necesidad de tener una API propia. Solo envías un POST con los datos del evento y aparece en la plataforma. Es ideal para sistemas internos como ERP municipales, sistemas de ticketing o agendas culturales que quieran publicar en Ciudad Viva sin exposición pública de su API.

La documentación de este endpoint se publicará aquí cuando esté disponible.

¿Necesitas ayuda?

Si tienes dudas sobre la integración o necesitas soporte, contáctanos.

Contactar al equipo