Base URL https://api.afer.pro aferapp.com
CRM y marketing

Dashboard del CRM

POST https://api.afer.pro/consultarCRM

El dashboard comercial completo de un funnel: KPIs, rates de actividad, embudo por etapas, motivos de pérdida, puntos de dolor, playbooks, canales, comerciales y evolución.

Todas las métricas del panel de CRM de Afer, con sus mismos criterios, para un funnel (el indicado o el primero de la cuenta):

KPIs: abiertas/ganadas/perdidas con valor, win rate (sobre cerradas), ticket medio, ciclo medio de cierre en días, vida media de las abiertas, forecast ponderado por probabilidad y atascadas (abiertas sin actividad en 7 días).
Actividad (desde las acciones registradas): answer rate (llamadas contestadas / intentos), meeting rate (reuniones / conversaciones), show rate y no-show rate (sobre reuniones agendadas).
Embudo: por etapa, cuántas oportunidades la alcanzaron, cuántas están en ella, la conversión desde la etapa anterior y el motivo de pérdida dominante; etapa final "Ganadas" y etapas dormidas aparte.
Puntos de dolor: % de oportunidades con dolor documentado, win rate con/sin dolor (y la diferencia en puntos) y ranking por punto.
Playbooks: % de oportunidades con playbook aplicado, checklists rellenados, % de items contestados y afirmativos, win rate con/sin playbook y uso por playbook.
Desgloses: por canal de captación, por comercial (con sus acciones por tipo y acciones-por-ganada) y evolución mensual.

El rango de fechas filtra por fecha de creación de la oportunidad; la actividad, por fecha de la acción. Sin rango, se evalúa todo el histórico del funnel.

Autenticación

Envía tus claves API en las cabeceras X-API-KEY y X-API-SECRET. La cuenta sobre la que se opera se resuelve automáticamente a partir de la clave. Cómo obtener tus claves →

Este endpoint requiere autenticación con API key: sin credenciales responde 401.

Parámetros del cuerpo

El cuerpo de la petición es un objeto JSON con Content-Type: application/json.

funnel_fkint
opcional
Funnel a analizar (de listarFunnels). Por defecto, el primero de la cuenta.
fecha_iniciodate
opcional
Inicio del período (YYYY-MM-DD), por fecha de creación de la oportunidad.
fecha_findate
opcional
Fin del período (YYYY-MM-DD).

Ejemplo de petición

curl -X POST 'https://api.afer.pro/consultarCRM' \
  -H 'Content-Type: application/json' \
  -H 'X-API-KEY: afer_tk_TU_TOKEN' \
  -H 'X-API-SECRET: afer_sk_TU_SECRET' \
  -d '{
    "funnel_fk": 39,
    "fecha_inicio": "2026-01-01",
    "fecha_fin": "2026-08-18"
}'
<?php

$data = [
  'funnel_fk' => 39,
  'fecha_inicio' => '2026-01-01',
  'fecha_fin' => '2026-08-18',
];

$ch = curl_init('https://api.afer.pro/consultarCRM');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'X-API-KEY: afer_tk_TU_TOKEN',
    'X-API-SECRET: afer_sk_TU_SECRET',
]);

$respuesta = json_decode(curl_exec($ch), true);
curl_close($ch);
const respuesta = await fetch('https://api.afer.pro/consultarCRM', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-API-KEY': 'afer_tk_TU_TOKEN',
    'X-API-SECRET': 'afer_sk_TU_SECRET'
  },
  body: JSON.stringify({
      "funnel_fk": 39,
      "fecha_inicio": "2026-01-01",
      "fecha_fin": "2026-08-18"
  })
});

const resultado = await respuesta.json();

Respuesta

Ejemplo abreviado — cada bloque llega completo. puntos_dolor y playbooks llegan null si la cuenta todavía no usa esos módulos. Los porcentajes llegan null cuando no hay datos para calcularlos (evita leer un 0% como resultado real).

200 · application/json
{
    "errorCode": 200,
    "errorMsg": "",
    "data": {
        "funnel": {
            "funnel_fk": 39,
            "funnel": "Ventas web"
        },
        "fecha_inicio": "2026-01-01",
        "fecha_fin": "2026-08-18",
        "kpis": {
            "total": 120,
            "abiertas": 34,
            "valor_abierto": 186000,
            "ganadas": 52,
            "valor_ganado": 214000,
            "perdidas": 34,
            "valor_perdido": 92000,
            "win_rate_pct": 60,
            "ticket_medio": 4115.38,
            "ciclo_medio_dias": 23,
            "vida_media_abiertas_dias": 18,
            "forecast_ponderado": 74400,
            "atascadas_7_dias": 6
        },
        "actividad": {
            "llamadas_intentos": 480,
            "llamadas_contestadas": 312,
            "answer_rate_pct": 65,
            "reuniones": 96,
            "meeting_rate_pct": 31,
            "noshows": 14,
            "show_rate_pct": 87,
            "noshow_rate_pct": 13
        },
        "embudo": [
            {
                "etapa_fk": 219,
                "etapa": "Lead",
                "alcanzaron": 120,
                "en_etapa": 18,
                "valor": 492000,
                "conversion_prev_pct": null,
                "top_motivo_perdida": "No contesta"
            },
            {
                "etapa_fk": 220,
                "etapa": "Propuesta",
                "alcanzaron": 74,
                "en_etapa": 12,
                "valor": 380000,
                "conversion_prev_pct": 62,
                "top_motivo_perdida": "Precio"
            },
            {
                "etapa_fk": null,
                "etapa": "Ganadas",
                "alcanzaron": 52,
                "en_etapa": 52,
                "valor": 214000,
                "conversion_prev_pct": 84,
                "top_motivo_perdida": null
            }
        ],
        "etapas_dormidas": [
            {
                "etapa": "Nurturing",
                "cuenta": 9,
                "valor": 31000
            }
        ],
        "motivos_perdida": [
            {
                "motivo": "Precio",
                "cuenta": 14,
                "valor": 46000
            }
        ],
        "puntos_dolor": {
            "oportunidades_total": 120,
            "con_dolor_documentado": 78,
            "porc_documentado": 65,
            "win_rate_con_dolor_pct": 71,
            "win_rate_sin_dolor_pct": 42,
            "delta_puntos": 29,
            "por_punto": [
                {
                    "punto_dolor": "Pierde horas en partes de trabajo",
                    "oportunidades": 31,
                    "ganadas": 19,
                    "perdidas": 6,
                    "valor_ganado": 82000,
                    "win_rate_pct": 76
                }
            ]
        },
        "playbooks": {
            "oportunidades_total": 120,
            "con_playbook": 44,
            "porc_aplicado": 37,
            "instancias_rellenadas": 61,
            "items_contestados_pct": 82,
            "items_afirmativos_pct": 68,
            "win_rate_con_playbook_pct": 69,
            "win_rate_sin_playbook_pct": 51,
            "delta_puntos": 18,
            "por_playbook": [
                {
                    "playbook": "Discovery call",
                    "usos": 38,
                    "oportunidades": 30
                }
            ]
        },
        "por_canal": [
            {
                "canal": "Web",
                "total": 64,
                "abiertas": 18,
                "ganadas": 30,
                "perdidas": 16,
                "valor_pipeline": 96000,
                "valor_ganado": 122000,
                "win_rate_pct": 65
            }
        ],
        "por_comercial": [
            {
                "usuario": "Ana Gil",
                "total": 48,
                "abiertas": 12,
                "ganadas": 24,
                "perdidas": 12,
                "valor_ganado": 101000,
                "win_rate_pct": 67,
                "acciones_total": 214,
                "acciones_por_ganada": 8.9,
                "acciones": {
                    "Llamada contestada": 96,
                    "Reunión virtual": 41
                }
            }
        ],
        "evolucion": [
            {
                "mes": "2026-07",
                "creadas": 18,
                "ganadas": 7,
                "perdidas": 4,
                "valor_ganado": 29000,
                "valor_abierto": 24000
            }
        ]
    }
}

Errores

CasoResultado
Sin credenciales de API key errorCode 401.
La cuenta no tiene funnels, o funnel_fk no existe errorCode 404.
Notas
  • Criterios clave (los mismos que el panel interno): el win rate se calcula sobre cerradas, no sobre el total; el embudo asume que una oportunidad pasó por todas las etapas hasta donde llegó; atascadas se evalúa sobre las abiertas actuales del funnel, sin filtro de fechas.
  • Para el detalle multi-funnel ligero usa consultarOportunidades; este endpoint es el análisis profundo de un funnel.