Tus datos de compromiso, en tus propias herramientas
Una API REST de solo lectura sobre tus encuestas, ciclos, resultados agregados, personas y métricas del panel. Autenticación con bearer token, paginación por cursor y una promesa de versionado escrita, no solo implícita. Incluida en el plan Enterprise — un contrato anual personalizado, no una actualización de autoservicio. Habla con nosotros.
Un encabezado, una clave
Crea una clave en Configuración → API. La clave completa se muestra una sola vez, al crearla. Nosotros guardamos un hash SHA-256 de ella, así que si se pierde el único camino es revocarla y generar una nueva.
# Cada solicitud lleva la clave como bearer token.
curl https://app.bloomder.io/api/v1/surveys \
-H "Authorization: Bearer blm_live_YOUR_KEY_HERE"
Qué puede y qué no puede hacer una clave
- Está limitada a la organización que la creó. No existe una clave entre organizaciones.
- Es de solo lectura. La API no tiene ningún endpoint de escritura, así que una clave filtrada no puede alterar, borrar ni enviar nada.
- Puede revocarse en cualquier momento por el dueño de la cuenta, con efecto en la siguiente solicitud.
- Opcionalmente puede configurarse para expirar después de cierto número de días. Si se deja en blanco, la clave no expira — una expiración silenciosa rompería el trabajo nocturno de un cliente meses después de haberla configurado.
Trata una clave como una contraseña
Una clave otorga acceso de lectura a todos los datos de compromiso de tu organización. Guárdala en un gestor de secretos, nunca en código del lado del cliente ni en un repositorio público, y revócala en el momento en que sospeches de una exposición. Cada creación y revocación queda registrada en tu registro de auditoría.
Lo que esta API no devuelve
La garantía de anonimato es una propiedad de la plataforma, no del panel, así que aplica aquí de forma idéntica. Este es el resumen honesto más breve de lo que no puedes obtener, ni siquiera con una clave válida.
- Ninguna respuesta individual. No existe un endpoint que devuelva las respuestas de una sola persona, porque la plataforma elimina el vínculo entre una respuesta y una persona en el momento en que la respuesta se guarda.
- Ningún resultado de grupos pequeños. Los agregados de un ciclo con menos de cinco respondientes distintos regresan como
suppressed: true, con solo los conteos de participación — que se conocen por la lista de envío, no por ninguna respuesta. - Ninguna forma de bajar el umbral. El piso de cinco está fijo en la plataforma desplegada y no puede cambiarlo un administrador, un parámetro de consulta, ni nosotros.
La segmentación por departamento sigue funcionando, porque un departamento es un atributo de grupo registrado al momento de enviar la invitación, no una identidad. Lee la explicación completa en la página de seguridad.
Cursores, no números de página
Los endpoints de listado devuelven una página de data y un next_cursor. Pasa ese cursor de vuelta para obtener la siguiente página; null significa que llegaste al final. Los cursores son estables ante inserciones, algo que la paginación por offset no es — una encuesta creada a mitad del recorrido no puede hacer que te saltes o repitas una fila.
# Primera página: 50 encuestas.
curl "https://app.bloomder.io/api/v1/surveys?limit=50" \
-H "Authorization: Bearer $BLOOMDER_KEY"
# Respuesta
{
"data": [ { "id": "clx…", "name": "Q3 Pulse", "status": "ACTIVE", … } ],
"next_cursor": "clx8f2k…"
}
# Siguiente página.
curl "https://app.bloomder.io/api/v1/surveys?limit=50&cursor=clx8f2k…" \
-H "Authorization: Bearer $BLOOMDER_KEY"
limit tiene un valor por defecto de 25 y un tope de 100. Un valor mayor se recorta, no se rechaza.
Actúa según el código, no el mensaje
Todos los errores devuelven el mismo formato. code es una cadena estable que forma parte del contrato; error es texto legible para humanos que puede cambiar de redacción en cualquier momento. Construye tu integración contra el código.
{
"error": "The public API is not included in this plan. It is part of the Enterprise plan — contact us to enable it.",
"code": "plan_required"
}
| Estado | Código | Qué significa |
|---|---|---|
| 400 | invalid_request | Un parámetro estaba mal formado. |
| 401 | invalid_api_key | La clave falta, es desconocida, fue revocada o expiró. Un solo código para los cuatro casos, deliberadamente: la respuesta no puede usarse para averiguar qué claves existieron alguna vez. |
| 402 | plan_required | El plan de la organización no incluye acceso a la API. |
| 404 | not_found | No existe ese recurso en esta organización. Un id que pertenece a otro cliente devuelve 404, nunca 403. |
| 429 | rate_limited | Se superó el límite de tasa. Respeta el encabezado Retry-After. |
| 500 | internal_error | Algo falló de nuestro lado. El cuerpo trae un request_id — menciónalo en una solicitud de soporte y podremos encontrar la línea exacta del registro. |
120 solicitudes por minuto, por clave
El presupuesto es por clave, no por organización ni por IP: tu integración corre desde donde sea que esté tu infraestructura, y dos claves en una misma cuenta no deberían competir por el mismo límite.
X-RateLimit-LimityX-RateLimit-Windowvienen en cada respuesta, no solo en un 429, así que un cliente puede regular su ritmo antes de que lo rechacen.- En un 429,
Retry-Afterindica los segundos que hay que esperar. Respétalo en lugar de reintentar de inmediato. - ¿Necesitas más para una recarga masiva? Escribe a [email protected] y cuéntanos la forma del trabajo.
Qué podemos cambiar, y qué no
Una API es una promesa sobre el futuro, así que esta es la promesa exacta. Cada respuesta también trae X-Bloomder-Api-Version con la fecha del contrato desplegado.
Los cambios aditivos se publican en /v1 sin previo aviso
- Endpoints nuevos.
- Campos nuevos en una respuesta existente. Interpreta con tolerancia: un campo desconocido no es un error.
- Valores nuevos en un campo tipo enum, cuando el campo ya documenta que puede crecer.
Los cambios que rompen compatibilidad nunca se publican en /v1
Quitar un campo, renombrarlo, cambiar su tipo, o cambiar el significado de un valor existente — todo eso crea /api/v2 en su lugar. Cuando eso pasa, /v1 sigue funcionando durante al menos seis meses y empieza a devolver un encabezado Sunset con la fecha en que se detiene. También te lo haremos saber por correo antes de que aparezca el encabezado.
El documento OpenAPI es la especificación
Esta página explica la API; openapi.json la define, y no necesita una clave para leerse. Apunta ahí a Postman, Insomnia o el generador que prefieras.
Todos los endpoints, en una tabla
Todas las rutas son relativas a https://app.bloomder.io/api/v1. No hay endpoints de escritura.
| Endpoint | Devuelve | Parámetros |
|---|---|---|
| GET/surveys | Tus encuestas, de la más reciente a la más antigua, con conteos de preguntas y ciclos. | limit, cursor |
| GET/surveys/{id} | Una encuesta con sus preguntas, su audiencia (departamentos, categorías, divisiones) y su calendario. | — |
| GET/surveys/{id}/runs | Los ciclos de la encuesta con invitaciones enviadas, respuestas recibidas y tasa de respuesta. | limit, cursor |
| GET/surveys/{id}/results | Resultados agregados de un ciclo: distribuciones y promedios por pregunta, NPS, promedio de bienestar, desglose por departamento. Suprimido por debajo de cinco respondientes. | run_id (se omite para usar el ciclo más reciente) |
| GET/employees | Las personas de tu lista con su departamento, categoría y división. Sin datos de respuestas. | limit, cursor, include_inactive |
| GET/departments | Tus departamentos. | — |
| GET/categories | Tus categorías de empleados, usadas para segmentar encuestas. | — |
| GET/divisions | Tus divisiones. | — |
| GET/action-items | Elementos de acción con prioridad, estado, responsable y fecha límite. | limit, cursor |
| GET/metrics/dashboard | Los mismos agregados que renderiza el panel para una ventana de tiempo. | range (7, 28, 90, 180, 365, all, Q1–Q4), department_id |
| GET/openapi.json | El documento OpenAPI 3.1. No requiere autenticación. | — |
Un ejemplo completo
Obtén los resultados más recientes de cada encuesta activa — la forma que toman la mayoría de las actualizaciones de BI.
#!/usr/bin/env bash
# Requiere: curl, jq. Define BLOOMDER_KEY en tu entorno.
set -euo pipefail
BASE="https://app.bloomder.io/api/v1"
AUTH=(-H "Authorization: Bearer $BLOOMDER_KEY")
curl -s "$BASE/surveys?limit=100" "${AUTH[@]}" \
| jq -r '.data[] | select(.status == "ACTIVE") | .id' \
| while read -r id; do
curl -s "$BASE/surveys/$id/results" "${AUTH[@]}" \
| jq '{survey: .survey_name, rate: .run.response_rate, suppressed, nps: .nps_score}'
done
¿Listo para ponerla en marcha?
El acceso a la API es parte del plan Enterprise, un contrato anual personalizado. Habla con nosotros sobre lo que estás construyendo y lo configuramos; una vez activo, creas claves desde la configuración de tu cuenta.
¿Preguntas sobre una integración específica? Escribe a [email protected].