Skip to content

Origen — GoHighLevel API

Conexión

ItemValor
Base URLhttps://services.leadconnectorhq.com
AuthAuthorization: Bearer pit-... (Private Integration Token)
Header obligatorioVersion: 2021-07-28
Content-Typeapplication/json (en POST)
ScopeToken Location-scoped (sub-cuenta única)

Endpoints utilizados

Sub-account / Location

  • GET /locations/{id} — info general (nombre, timezone, currency, dirección)
  • GET /locations/{id}/customFields — definiciones de custom fields (227 docs)
  • GET /locations/{id}/customValues — valores constantes a nivel location
  • GET /locations/{id}/tags — tags maestros

Users

  • GET /users/?locationId={id} — usuarios de la location

Contactos

  • POST /contacts/search — listado paginado con searchAfter
  • GET /contacts/{id} — detalle completo de un contacto
  • GET /contacts/{id}/notes — notas de un contacto
  • GET /contacts/{id}/tasks — tasks de un contacto
  • GET /contacts/{id}/appointments — appointments del contacto

Oportunidades

  • GET /opportunities/pipelines?locationId={id} — todos los pipelines y stages
  • GET /opportunities/search?location_id={id} — búsqueda paginada cursor
  • GET /opportunities/{id} — detalle

Conversaciones / mensajes

  • GET /conversations/search?locationId={id} — listado paginado
  • GET /conversations/{id} — detalle
  • GET /conversations/{id}/messages — mensajes con lastMessageId como cursor

Calendarios

  • GET /calendars/?locationId={id} — lista de calendarios
  • GET /calendars/events?calendarId={id}&startTime={ms}&endTime={ms} — eventos por calendar (rango epoch ms)

Formularios

  • GET /forms/?locationId={id} — formularios
  • GET /forms/submissions?locationId={id}&formId={id} — respuestas

Paginación

GHL usa cursor pagination en casi todos los endpoints:

http
POST /contacts/search
{
  "locationId": "SW4v78LtTjzKHd3cnJ48",
  "pageLimit": 100,
  "page": 1
}

Respuesta incluye searchAfter: [timestamp, id] en el último hit. Para la siguiente página:

json
{
  "locationId": "SW4v78LtTjzKHd3cnJ48",
  "pageLimit": 100,
  "searchAfter": [1777138051687, "kkzYOo4eCGQOvJYNQYXo"]
}

El parámetro page es legacy; preferir searchAfter para datasets > 10k.

Rate limits

GHL no documenta los límites públicamente. Empíricamente:

  • ~10 req/s estables sin problema
  • Bursts de 30+ req/s disparan 429
  • El script aplica throttle de 100ms entre requests (10 RPS) y backoff exponencial en 429.

Forma de los recursos clave

Contact

json
{
  "id": "8McTOURh47cMDDqn3QkN",
  "dateAdded": "2025-10-25T19:27:11.308Z",
  "dateUpdated": "2026-03-10T15:25:53.160Z",
  "type": "lead",
  "locationId": "SW4v78LtTjzKHd3cnJ48",
  "firstName": "Yordan",
  "lastName": "Fuentes Reyna",
  "email": "yordanfr24@gmail.com",
  "phone": "+18326574289",
  "country": "US",
  "address1": "701 Ridgewood Dr",
  "city": "Nacogdoches",
  "state": "Texas",
  "postalCode": "75964",
  "dateOfBirth": "2001-01-24",
  "companyName": "Geico",
  "assignedTo": "fRhUw2lnNJAGRH6IJQVT",
  "tags": ["[device] - dunia", "commercial auto"],
  "dndSettings": { "SMS": {...}, "Email": {...} },
  "customFields": [
    { "id": "T0W74DhZbxPxAcUgtqwE", "value": ["Male"] }
  ],
  "additionalEmails": [],
  "additionalPhones": []
}

Opportunity

json
{
  "id": "tHSI4my59X1us9K9EqgJ",
  "name": "Alberto Ramirez",
  "monetaryValue": 0,
  "pipelineId": "o41xJFtUsz8oECejn33f",
  "pipelineStageId": "58fff988-b47b-411e-9650-afb6c5c42f55",
  "assignedTo": "2B4Azd9QGTeWYOEwrWxc",
  "status": "open",
  "source": "InsureX",
  "lastStatusChangeAt": "2026-04-28T14:55:03.528Z",
  "createdAt": "2026-04-28T14:55:03.528Z",
  "contactId": "ZQnDlJv0fEdER2T3uJTH",
  "contact": { "id": "...", "name": "...", "email": "...", "phone": "..." },
  "customFields": []
}

Note

json
{
  "id": "yCFzMvXtro812ftGqRKC",
  "body": "Card on File\nName: Reyna Y Fuentes\n6011 4101 8496 3010\n...",
  "userId": "pwmwXD84OcNyFl05j2D7",
  "dateAdded": "2025-10-27T16:27:11.106Z",
  "contactId": "8McTOURh47cMDDqn3QkN",
  "pinned": false
}

Message

json
{
  "id": "6V72KyTd7nS5j7ZB1MrR",
  "direction": "inbound",
  "status": "delivered",
  "type": 20,
  "messageType": "TYPE_CUSTOM_SMS",
  "body": "Si esta automatico",
  "contactId": "8McTOURh47cMDDqn3QkN",
  "conversationId": "Druswwum0N8udEPIemFt",
  "dateAdded": "2026-04-28T01:15:24.161Z",
  "from": "+18326574289",
  "to": "Trebol Insurance"
}