alloop
Referencia de API

Leer tus datos

La API de lectura (/api/v1) devuelve la misma verdad que tu panel, en JSON. Pensada para conectar tus propias herramientas o dársela a una IA para que la analice.

La API de lectura te devuelve tus propios datos —clientes, atribución, personas, cohortes y actividad— en JSON estable, versionado bajo /api/v1. Es la misma verdad que ves en el panel, para que puedas conectar tus herramientas o dársela a una IA que la analice.

Antes de empezar

  • Base: https://track.alloop.ch
  • Autenticación obligatoria en toda la API de lectura (expone importes y datos de personas). Se autentica con HTTP Basic: usuario y contraseña, los que te damos al montar tu cuenta. En curl es la opción -u; en cualquier cliente HTTP, el modo "Basic auth". Sin ellos, la respuesta es 401.
  • Solo ves lo tuyo. Tu token está limitado a tus clientes; pedir el client_id de otra cuenta responde 404 (como si no existiera), nunca los datos de un tercero.

Estos endpoints devuelven datos de personas reales (nombre, email, importe). Trátalos como lo que son: información privada de tus clientes. No los expongas en una web pública ni los pegues en un canal compartido.

Endpoints

GET /api/v1/clients

Tus clientes (proyectos) con sus KPIs de cabecera. Es el nivel 0: por dónde empezar. La lista ya viene filtrada a lo que tus credenciales pueden ver.

curl -u "$ALLOOP_USER:$ALLOOP_PASSWORD" \
  https://track.alloop.ch/api/v1/clients

GET /api/v1/clients/{client_id}/attribution

De dónde vienen tus ventas: origen, canal y pieza que trajo cada ingreso. Responde a "¿qué está funcionando?".

ParámetroEnTipoReq.Por defectoQué hace
client_idrutatextosí—Tu cliente.
daysqueryenterono90Ventana en días hacia atrás.
curl -u "$ALLOOP_USER:$ALLOOP_PASSWORD" \
  "https://track.alloop.ch/api/v1/clients/tu-cliente/attribution?days=30"

El parámetro model decide a quién se le da el crédito: first (por defecto, quién captó) o last (quién cerró). Las dos reparten los mismos ingresos totales — no se suman entre sí. La respuesta incluye model para que sepas cuál estás leyendo.

ParámetroEnTipoReq.Por defectoQué hace
client_idrutatextosí—Tu cliente.
daysqueryenterono90Ventana en días.
modelquerytextonofirstfirst o last — ver quién captó y quién cerró.

GET /api/v1/clients/{client_id}/cohorts

Cohortes de valor: cuánto deja cada grupo de altas a lo largo del tiempo. Para ver si el cliente nuevo mejora o empeora mes a mes.

ParámetroEnTipoReq.Qué hace
client_idrutatextosíTu cliente.

GET /api/v1/clients/{client_id}/people

Las personas (tus clientes finales) con su origen. Es el nivel 1: de los KPIs a los nombres.

ParámetroEnTipoReq.Por defectoQué hace
client_idrutatextosí—Tu cliente.
limitqueryenterono50Cuántas personas devolver.

GET /api/v1/clients/{client_id}/people/{person_id}/timeline

El recorrido completo de una persona, en lenguaje llano y con el detalle debajo. Es el nivel 2: qué hizo esta persona concreta desde que llegó.

ParámetroEnTipoReq.Qué hace
client_idrutatextosíTu cliente.
person_idrutatextosíLa persona dentro de ese cliente.

GET /api/v1/clients/{client_id}/campus

Actividad del campus: KPIs, la serie diaria y qué alumnos están en riesgo. Solo aplica si usas el módulo de campus.

ParámetroEnTipoReq.Qué hace
client_idrutatextosíTu cliente.

GET /api/v1/clients/{client_id}/revenue

Tus ingresos separando captación (ventas nuevas) de retención (renovaciones). Se leen por separado a propósito: el ingreso inicial es contra lo que comparas tu gasto en anuncios, y el recurrente es dinero que ya no cuesta captar. En un único titular, un mes malo de captación queda tapado por la base que renueva. inicial + recurrente = bruto, siempre.

ParámetroEnTipoReq.Por defectoQué hace
client_idrutatextosí—Tu cliente.
daysqueryenterono30Ventana en días (máx. 3650).

GET /api/v1/clients/{client_id}/cohorts/ltv

El valor de vida por cohorte de alta: cuánto ha dejado, mes a mes, cada grupo que entró en un mes concreto. Sirve para ver si tus clientes nuevos valen más o menos que los de hace un año.

ParámetroEnTipoReq.Por defectoQué hace
client_idrutatextosí—Tu cliente.
monthsqueryenterono12Cuántos meses de cohortes.

GET /api/v1/clients/{client_id}/survey

Las respuestas a la pregunta "¿cómo nos conociste?" de tu página de gracias. Es la única señal que alcanza donde no llega la medición —quien entró sin enlace marcado—, así que se lee como segunda opinión, no como corrección de la atribución (por qué).

ParámetroEnTipoReq.Por defectoQué hace
client_idrutatextosí—Tu cliente.
daysqueryenterono90Ventana en días.

GET /api/v1/clients/{client_id}/ad-spend

Lo que llevas gastado en anuncios frente a lo que has ingresado, para el retorno real. Solo devuelve datos si tienes conectada la inversión publicitaria.

ParámetroEnTipoReq.Por defectoQué hace
client_idrutatextosí—Tu cliente.
daysqueryenterono30Ventana en días.

GET /api/v1/clients/{client_id}/funnels

Tus embudos y en qué punto se cae la gente. Devuelve la definición de todos y los conteos del que esté activo. por_defecto: true significa que aún no has creado ninguno y estás viendo el de ejemplo.

ParámetroEnTipoReq.Por defectoQué hace
client_idrutatextosí—Tu cliente.
daysqueryenterono30Ventana en días (máx. 365).
funnelquerytextonoel primeroEl id del embudo cuyos conteos quieres.

PUT /api/v1/clients/{client_id}/funnels

Reemplaza tus embudos. Se manda la lista entera, no un embudo suelto: el orden importa (el primero es el que se pinta por defecto). Mandar [] vuelve al embudo de ejemplo.

curl -u "$ALLOOP_USER:$ALLOOP_PASSWORD" -X PUT \
  -H "Content-Type: application/json" \
  -d '{"funnels":[{"name":"Reto","steps":[
        {"label":"Landing","match":{"events":["$pageview"],
                                    "url":{"op":"exact","value":"/reto/"}}},
        {"label":"Compraron","match":{"purchase":{"segment":"*"}}}]}]}' \
  https://track.alloop.ch/api/v1/clients/tu-cliente/funnels

Cada paso lleva un label y un match, que combina (con Y):

Clave del matchQué hace
eventsEl evento es uno de estos. Los nombres son los que tu web emite de verdad.
url{"op": "exact" | "starts_with" | "contains", "value": "/ruta/"}
purchase{"segment": "*"} (cualquier compra) o el id de uno de tus tipos de venta.
props[{"key": "canal", "op": "eq", "value": "whatsapp"}] — cualquier propiedad.

Si algo no es válido responde 400 con el motivo en llano, diciendo qué embudo y qué paso: corrígelo y repite. Máximo 5 embudos de 8 pasos, mínimo 2 pasos cada uno.

GET y PUT /api/v1/clients/{client_id}/purchase-segments

Cómo separas tus tipos de venta (ver si vendes más de una cosa). declarados: false significa que no has definido ninguno y todo cuenta junto, que es lo correcto para la mayoría.

[{"id": "cursos", "label": "Cursos", "primary": true,
  "events": ["purchase", "subscription_renewed"],
  "product": {"op": "in", "values": ["curso-b2", "curso-c1"]}}]

product.op admite in, not_in y any. PUT con [] vuelve al comportamiento por defecto.

Dárselo a una IA

Como la respuesta es JSON estable, puedes pegar el resultado de cualquiera de estos endpoints en Claude, ChatGPT o Gemini y pedirle que te lo analice ("¿qué canal me trae los clientes que más duran?"). No sustituye a tu panel, pero acelera las preguntas sueltas.

Pregúntale a tu IA

Esta documentación está pensada para leerse con una IA al lado. Abre tu asistente con el contexto de alloop ya cargado y pregúntale lo que necesites, en tu idioma.

Para qué NO sirve: una IA no ve tu panel, tus pagos ni tus datos, y puede equivocarse. Si un ingreso no aparece, algo toca tu producción o necesitas una respuesta oficial, escríbenos: esto no sustituye al soporte.

ClaudeChatGPTGemini

En esta página