POST
/meetings
Registra una reunión agendada en un sistema externo (ej. GoHighLevel, Calendly, representantes manuales) contra un lead existente de Nexor. La reunión aparece en la línea de tiempo del lead y en GET /leads/{id}/meetings.
Este endpoint es solo creación en v1 — cancelaciones, reagendamientos e inasistencias serán manejados por endpoints dedicados en una versión posterior.
Coincidencia de leads
Los leads se emparejan por email, con alcance a tu cliente:
- Si un lead coincide -> se usa.
- Si múltiples leads comparten el email -> gana el actualizado más recientemente.
- Si ningún lead coincide ->
404. Crea el lead primero vía POST /leads.
También puedes pasar lead_id directamente para omitir la coincidencia por email.
Idempotencia
Si proporcionas tanto external_calendar_provider como external_event_id, repetir la solicitud actualiza la reunión existente en lugar de crear un duplicado. Seguro para reintentos de webhook.
Cuerpo de la Solicitud
| Campo | Tipo | Requerido | Descripción |
|---|
lead_email | string | Sí* | Coincidencia. *No requerido si se proporciona lead_id. |
lead_id | string (uuid) | No | Omitir coincidencia por email. |
title | string | Sí | Título de la reunión |
starts_at | string (ISO 8601) | Sí | Si no tiene offset, se interpreta en timezone |
ends_at | string (ISO 8601) | Sí+ | +Requerido a menos que se proporcione duration_minutes |
duration_minutes | integer | Sí+ | +Requerido a menos que se proporcione ends_at |
timezone | string | No | Zona horaria IANA, por defecto UTC (ej. America/Santiago) |
meeting_url | string | No | Enlace de Meet / Zoom / Teams |
location_type | string | No | video | phone | in_person, por defecto video |
location_details | string | No | |
description | string | No | |
host_email | string | No | Email del usuario anfitrión (debe estar activo en tu cliente) |
meeting_type_id | string (uuid) | No | |
attendee_name | string | No | Por defecto el nombre completo del lead |
attendee_email | string | No | Por defecto el email coincidente |
attendee_phone | string | No | Por defecto el teléfono del lead |
additional_attendees | array | No | [{ name, email }] |
external_calendar_provider | string | No | ej. ghl, google, calendly |
external_event_id | string | No | ID del evento del proveedor (habilita dedup) |
status | string | No | scheduled (por defecto) o confirmed |
Ejemplo del Cuerpo de la Solicitud
Reunión mínima agendada, emparejada por email del lead:
{
"lead_email": "tony.stark@gmail.com",
"title": "Discovery Call",
"starts_at": "2026-04-20T14:00:00",
"ends_at": "2026-04-20T15:00:00",
"timezone": "America/Santiago",
"meeting_url": "https://meet.google.com/abc-xyz-123",
"location_type": "video",
"status": "scheduled"
}
Payload completo — webhook de GoHighLevel (vía Make), con clave de dedup y confirmación:
{
"lead_email": "tony.stark@gmail.com",
"title": "Llamada de descubrimiento con Tony Stark",
"starts_at": "2025-12-29T14:00:00",
"ends_at": "2025-12-29T15:00:00",
"timezone": "America/Santiago",
"meeting_url": "https://meet.google.com/oki-fjnk-oyu",
"location_type": "video",
"description": "Confirmation and reminder emails",
"attendee_name": "Tony Stark",
"external_calendar_provider": "ghl",
"external_event_id": "1RZJ24WY65VGQFyhN0vJ",
"status": "confirmed"
}
Enviar "status": "confirmed" almacena la reunión como scheduled y activa el flag interno confirmed_by_lead — el lead aparece como habiendo confirmado asistencia.
cURL
curl -X POST https://api.getnexor.ai/api/public/meetings \
-H "Content-Type: application/json" \
-H "X-API-Key: nxr_live_your_api_key" \
-d '{
"lead_email": "tony.stark@gmail.com",
"title": "Llamada de descubrimiento con Tony Stark",
"starts_at": "2025-12-29T14:00:00",
"ends_at": "2025-12-29T15:00:00",
"timezone": "America/Santiago",
"meeting_url": "https://meet.google.com/oki-fjnk-oyu",
"location_type": "video",
"description": "Confirmation and reminder emails",
"attendee_name": "Tony Stark",
"external_calendar_provider": "ghl",
"external_event_id": "1RZJ24WY65VGQFyhN0vJ",
"status": "confirmed"
}'
Respuestas
201 — Reunión creada
{
"success": true,
"meeting": {
"id": "event-uuid",
"lead_id": "lead-uuid",
"title": "Llamada de descubrimiento con Tony Stark",
"starts_at": "2025-12-29T17:00:00Z",
"ends_at": "2025-12-29T18:00:00Z",
"duration_minutes": 60,
"timezone": "America/Santiago",
"status": "confirmed",
"meeting_url": "https://meet.google.com/oki-fjnk-oyu",
"location_type": "video",
"location_details": null,
"host_name": null,
"meeting_type": null,
"attendee_name": "Tony Stark",
"attendee_email": "tony.stark@gmail.com",
"external_calendar_provider": "ghl",
"external_event_id": "1RZJ24WY65VGQFyhN0vJ",
"source": "api",
"created_at": "2026-04-15T12:00:00Z"
}
}
400 — Error de validación
401 — Error de autenticación — ver Autenticación
404 — Lead no encontrado para el email proporcionado
409 — external_event_id ya vinculado a un lead diferente
500 — Error interno del servidor
Última modificación el 18 de junio de 2026