Documentación técnica
Conectar sistemas externos con Cosmiq
Cosmiq corre sobre el motor de LeadConnector, así que su API pública es la misma que documenta HighLevel: mismos endpoints, mismos permisos, mismo flujo de autorización. Lo único que cambia son las URLs de marca blanca. Todo lo que hay en esta página está adaptado a Cosmiq y sirve tal cual para conectar cualquier sistema externo a una sub-cuenta.
Base de la API
services.leadconnectorhq.com
Marketplace
marketplace.leadconnectorhq.com
Versión estable
Version: 2021-07-28
Los valores en ámbar son marcadores. TU_CLIENT_ID,
TU_CLIENT_SECRET, los identificadores de sub-cuenta y las URLs de retorno salen de
tu propia cuenta. Ningún secreto debe viajar en código de navegador.
¿Cuál de los dos métodos me toca?
| Si estás… | Usa | Por qué |
|---|---|---|
| Conectando tu propio sistema a tu propia cuenta | Token de integración privada | Se genera desde la interfaz en un minuto. Sin flujo de consentimiento, sin servidor de callback. |
| Construyendo una app que instalarán otros | OAuth 2.0 | Cada cliente aprueba los permisos y puede revocarlos. Es el único camino para el marketplace. |
Token de integraciones privadas
Es una credencial estática que conectas a una sub-cuenta desde la interfaz, sin montar el flujo de OAuth. Sustituye a las antiguas claves de API y mejora sobre ellas en lo importante: puedes restringir exactamente qué permisos tiene en lugar de dar acceso total.
Cómo se crea
-
Abre Ajustes › Integraciones privadas
Dentro de la sub-cuenta con la que vas a trabajar. Por defecto solo los administradores de la agencia ven esta pantalla; el acceso se puede abrir usuario por usuario.
-
Crea la integración
Pulsa Crear nueva integración y ponle nombre y descripción. Escribe algo que un compañero entienda dentro de seis meses: «Sincronización con la web», no «token 3».
-
Elige los permisos
Marca solo los scopes que el sistema va a usar. Se pueden editar después sin regenerar el token, así que empieza corto y amplía si hace falta.
-
Copia el token
Se muestra una sola vez. Si cierras la ventana sin copiarlo, no hay forma de recuperarlo: toca revocarlo y crear otro. Guárdalo en tu gestor de secretos, nunca en el repositorio.
Cómo se usa
Va en la misma cabecera Authorization que un token de OAuth. Para la API son indistinguibles.
GET https://services.leadconnectorhq.com/contacts/?locationId=ID_DE_TU_SUBCUENTA Authorization: Bearer TU_TOKEN_PRIVADO Version: 2021-07-28 Accept: application/json Content-Type: application/json
En qué se diferencia de OAuth
| Token privado | OAuth 2.0 | |
|---|---|---|
| Cómo se obtiene | Desde la interfaz, a mano | Intercambio programático de un código |
| Caducidad | Fijo, no expira solo | 24 h, se renueva con el refresh token |
| Alcance | Una sub-cuenta | Agencia o sub-cuenta, según el tipo |
| Quién lo revoca | Tú, desde ajustes | El cliente, desinstalando la app |
| Sirve para el marketplace | No | Sí |
Rótalo cada 90 días. Un token estático que lleva años vivo es la credencial que aparece en un repositorio público. Al rotar, deja los dos activos durante los 7 días de transición y revoca el viejo cuando confirmes que nada lo usa.
OAuth 2.0
El flujo es Authorization Code. Lo necesitas si tu aplicación la van a instalar terceros: cada administrador aprueba los permisos sobre su propia sub-cuenta y puede retirarlos cuando quiera.
-
Registra tu aplicación
- Entra al Marketplace de desarrolladores en
marketplace.leadconnectorhq.com. - Crea una cuenta de desarrollador.
- Ve a My Apps y pulsa Create App.
- Completa el formulario; la app queda creada.
- Ábrela para configurar los permisos y generar
client_idyclient_secret.
Pide solo lo que vas a usar. Cada permiso extra alarga la pantalla de consentimiento y da una razón más para dudar.
- Entra al Marketplace de desarrolladores en
-
Arma la URL de autorización
Es la página a la que envías al administrador. Los permisos van separados por espacios.
# Flujo de marca blanca — el que corresponde a Cosmiqhttps://marketplace.leadconnectorhq.com/oauth/chooselocation ?response_type=code &redirect_uri=https://tu-servidor.pe/oauth/callback/cosmiq &client_id=TU_CLIENT_ID &scope=contacts.readonly contacts.write conversations/message.writeSi el usuario no ha iniciado sesión, el login se abre en una pestaña nueva. Añade
&loginWindowOpenMode=selfpara que lo haga en la misma. -
Recibes el código en tu callback
El admin elige la sub-cuenta y su navegador vuelve a tu
redirect_uricon un código de un solo uso.https://tu-servidor.pe/oauth/callback/cosmiq?code=7676cjcbdc6t76cdcbkjcd09821jknnkj
Caduca en minutos y solo se canjea una vez.
-
Canjéalo por un token de acceso
Desde tu servidor. El cuerpo va como
application/x-www-form-urlencoded.POST https://services.leadconnectorhq.com/oauth/token Content-Type: application/x-www-form-urlencoded Accept: application/json client_id=TU_CLIENT_ID &client_secret=TU_CLIENT_SECRET &grant_type=authorization_code &code=EL_CODIGO_DEL_PASO_3 &user_type=Location
# o Company, para token de agencia&redirect_uri=https://tu-servidor.pe/oauth/callback/cosmiqLa respuesta trae lo que hay que guardar:
{ "access_token": "…", "token_type": "Bearer", "expires_in": 86399, "refresh_token": "…", "scope": "contacts.readonly contacts.write", "userType": "Location", "locationId": "…",# solo en tokens de sub-cuenta"companyId": "…", "userId": "…"# quién instaló la app} -
Llama a la API
GET https://services.leadconnectorhq.com/contacts/?locationId=… Authorization: Bearer EL_ACCESS_TOKEN Version: 2021-07-28 Accept: application/json
Cada respuesta incluye un
traceIdúnico. Guárdalo en tus logs: es lo primero que pide soporte. -
De token de agencia a token de sub-cuenta
Un token de agencia administra la cuenta pero no lee datos de negocio. Para eso lo cambias por uno de la sub-cuenta concreta.
POST https://services.leadconnectorhq.com/oauth/location-token Authorization: Bearer TOKEN_DE_AGENCIA Version: 2021-07-28 Content-Type: application/x-www-form-urlencoded companyId=…&locationId=…
Con
GET /oauth/installed-locationsconsultas dónde está instalada tu app. -
Renueva antes de que te bloquee
- Llama al endpoint con el
access_tokenque tienes. - Si responde que expiró, pide uno nuevo con
grant_type=refresh_tokeny guarda los dos valores nuevos. - Repite la llamada original.
El refresh token también se renueva. Cada uso emite uno nuevo con un año por delante. Si guardas solo el
access_token, en 24 horas pierdes la conexión y el cliente tiene que reinstalar la app. - Llama al endpoint con el
Permisos (scopes)
Los permisos siguen el patrón recurso.readonly / recurso.write, y algunos
bajan un nivel más: conversations/message.write, locations/customFields.readonly.
Cada uno declara además si es de sub-cuenta, de agencia o de ambas.
.write no incluye .readonly. Si tu integración crea
contactos y luego los consulta, necesita los dos.
| Familia | Ejemplos | Nivel |
|---|---|---|
| Contactos | contacts.readonly · contacts.write | Sub-cuenta |
| Conversaciones | conversations.readonly · conversations/message.write | Sub-cuenta |
| Oportunidades | opportunities.readonly · opportunities.write | Sub-cuenta |
| Calendarios | calendars.readonly · calendars/events.write | Sub-cuenta |
| Facturación | invoices.write · payments/orders.readonly | Sub-cuenta |
| Campos y etiquetas | locations/customFields.write · locations/tags.readonly | Sub-cuenta |
| Sub-cuentas | locations.readonly | Sub-cuenta y agencia |
| Administración | locations.write · oauth.write · snapshots.readonly | Solo agencia |
Hay 91 permisos en total. El catálogo completo vive en la documentación del marketplace.
Descripción general del SDK
Hay clientes oficiales para tres lenguajes. Ahorran justo lo que suele salir mal a mano: el refresco de tokens, el almacenamiento por sub-cuenta y la validación de firmas de webhook.
| Lenguaje | Paquete | Versión mínima |
|---|---|---|
| Node.js | @gohighlevel/api-client | 18+ |
| Python | gohighlevel-api-client | 3.8+ |
| PHP | gohighlevel/api-client | 7.4+ |
Instalación
# Node.jsnpm install @gohighlevel/api-client# Pythonpip install gohighlevel-api-client# PHPcomposer require gohighlevel/api-client
Qué te resuelven
- Flujo de OAuth automático — el intercambio de código y el refresco de tokens sin escribirlo tú.
- Soporte para tokens privados — el mismo cliente sirve para los dos métodos de autenticación.
- Almacenamiento por sub-cuenta — gestiona un token distinto para cada
locationId, incluido el caso de instalación masiva. - Ayudas para webhooks — validación de firma y manejo de los eventos de instalación y desinstalación.
- Métodos tipados — autocompletado y errores en tiempo de compilación en lugar de cadenas sueltas.
Los paquetes se publican bajo la marca de HighLevel porque el motor es el mismo. Apuntan a
services.leadconnectorhq.com, así que funcionan sin cambios con una cuenta de Cosmiq.
Servidor MCP
MCP (Model Context Protocol) es el estándar que usan los asistentes de IA para conectarse a herramientas y datos externos. El servidor MCP de LeadConnector expone el CRM directamente a un asistente: puede buscar contactos, consultar oportunidades y ejecutar operaciones sin que escribas una sola llamada a la API.
| Endpoint | Cuándo |
|---|---|
| services.leadconnectorhq.com/mcp/anthropic/v2 | Recomendado. Optimizado para Claude. |
| services.leadconnectorhq.com/mcp/ | Original. Compatible con cualquier cliente MCP. |
Autenticación
Dos opciones. La primera es un inicio de sesión de un clic y es la recomendada:
- OAuth — el cliente MCP abre el flujo de consentimiento y guarda el token.
- Token de integración privada — para conexiones de servidor sin interfaz.
Authorization: Bearer pit-tu-token locationId: tu-location-id# opcional
Herramientas que expone
| Herramienta | Qué hace |
|---|---|
| search | Busca registros por nombre, correo, teléfono o etiqueta. |
| fetch | Trae el detalle completo de un registro. |
| search_operations | Descubre qué operaciones hay disponibles. |
| describe_operation | Inspecciona los parámetros que espera una operación. |
| execute_operation | Ejecuta la operación. |
| list_locations | Lista las sub-cuentas accesibles (conexiones de agencia). |
Cómo conectarlo
Claude (aplicación web o de escritorio)
Configuración → Conectores → Agregar conector personalizado, y pega la URL del endpoint.
Claude Code
claude mcp add --transport http leadconnector \ https://services.leadconnectorhq.com/mcp/anthropic/v2
Un asistente conectado puede escribir, no solo leer. execute_operation
alcanza cualquier operación que permitan los permisos del token. Conéctalo con un token de permisos
acotados antes que con uno de administrador.
Límites de tarifas
Dos límites simultáneos, aplicados por aplicación y por recurso — cada sub-cuenta y cada compañía tienen su propia cuota. Que tu app esté instalada en veinte sub-cuentas significa veinte cuotas independientes, no una repartida.
| Límite | Valor | Ámbito |
|---|---|---|
| Ráfaga | 100 peticiones / 10 segundos | Por app × recurso |
| Diario | 200 000 peticiones / día | Por app × recurso |
Cabeceras de control
Vienen en todas las respuestas. Léelas y frena antes de chocar, en lugar de esperar al error.
| Cabecera | Qué informa |
|---|---|
| X-RateLimit-Max | Máximo de peticiones en la ventana actual. |
| X-RateLimit-Remaining | Cuántas te quedan en esa ventana. |
| X-RateLimit-Interval-Milliseconds | Duración de la ventana de ráfaga, en milisegundos. |
| X-RateLimit-Limit-Daily | Tu cuota del día. |
| X-RateLimit-Daily-Remaining | Cuántas quedan hoy. |
Cómo convivir con ellos
- Encola y espacia. 100 por cada 10 segundos son 10 por segundo sostenidos: reparte, no dispares en ráfaga.
- Reintenta con espera creciente. Ante un rechazo por límite, duplica la espera en cada intento en lugar de insistir de inmediato.
- Cachea lo que no cambia. Campos custom, etapas de pipeline y etiquetas no necesitan consultarse en cada llamada.
- Las migraciones grandes van de noche y por lotes. Cargar 50 000 contactos a 10 por segundo son casi 90 minutos: planifícalo, no lo improvises.
Control de versiones
La versión viaja en la cabecera Version de cada petición. Sin ella la API responde
error, y ese es el fallo más común en una primera integración.
Version: 2021-07-28# estable, la que usa la mayoríaVersion: v3# versión nueva, respuestas normalizadas
| Versión | Esquema | Notas |
|---|---|---|
| v3 | Nombrada | La más reciente. Respuestas homogéneas en todos los módulos. |
| 2023-02-21 | Por fecha | Intermedia. |
| 2021-07-28 | Por fecha | La estable de referencia; casi todos los ejemplos la usan. |
| 2021-04-15 | Por fecha | Antigua. |
Política de retirada
Cuando sale una versión nueva, la anterior entra en ventana de mantenimiento: sigue recibiendo correcciones críticas y parches de seguridad, pero ninguna función nueva. Al llegar su fecha de retirada, la API deja de aceptar esa cabecera y las integraciones que la usen dejan de funcionar.
Fija una versión explícita en tu código y migra a conciencia. Una integración que no declara versión, o que asume la última, se rompe sola el día que cambie el valor por defecto.
Registro de cambios
El changelog recoge cada modificación de la API: endpoints nuevos, propiedades retiradas, valores de enumeración añadidos y cambios de comportamiento. Se ordena por fecha, de lo más reciente hacia atrás, y dentro de cada fecha por módulo.
Los cambios se marcan con tres símbolos: ⚠ ruptura + añadido − retirado. Los de ruptura son los únicos que exigen acción inmediata.
| Fecha | Módulo | Qué cambió |
|---|---|---|
| 2026-08-25 | Chat Widget | Reestructurado el esquema de ajustes. Se retiran aTwoPCompliance,
useEmailField y widgetId; se añaden opciones de tipografía y tema,
y más valores de idioma y posición. Ruptura |
| 2026-08-21 | Ad Publishing | Códigos de estado normalizados: los endpoints de acción devuelven 200 en lugar de 201. Añadidos parámetros de paginación en Facebook, Google y LinkedIn. Ruptura |
| 2026-08-19 | SaaS | Declaración explícita del tipo de contenido JSON en planes de agencia, suscripciones y facturación. |
| 2026-08-18 | Knowledge Base | La ruta pasa de /knowledge-base a /knowledge-bases, con
compatibilidad hacia atrás: las dos siguen funcionando. |
| 2026-08-13 | Ad Publishing | Parámetros de consulta afinados, valores de segmentación restringidos y nuevas propiedades de mapeo de valores personalizados. |
Antes de cada despliegue, revisa si hay entradas nuevas marcadas como ruptura en los módulos que tocas. Es más barato que descubrirlo por un error en producción.
Lista de países
El campo country de un contacto espera un código de dos letras (ISO 3166-1 alfa-2),
no el nombre del país. Enviar "Perú" en lugar de "PE" es motivo de error
de validación.
Perú
PE
México
MX
Colombia
CO
Chile
CL
Argentina
AR
Ecuador
EC
España
ES
Estados Unidos
US
Ver los 247 códigos Búscalo por nombre o por código
| AF | Afghanistan |
| AX | Aland Islands |
| AL | Albania |
| DZ | Algeria |
| AS | American Samoa |
| AD | AndorrA |
| AO | Angola |
| AI | Anguilla |
| AQ | Antarctica |
| AG | Antigua and Barbuda |
| AR | Argentina |
| AM | Armenia |
| AW | Aruba |
| AU | Australia |
| AT | Austria |
| AZ | Azerbaijan |
| BS | Bahamas |
| BH | Bahrain |
| BD | Bangladesh |
| BB | Barbados |
| BY | Belarus |
| BE | Belgium |
| BZ | Belize |
| BJ | Benin |
| BM | Bermuda |
| BT | Bhutan |
| BO | Bolivia |
| BA | Bosnia and Herzegovina |
| BW | Botswana |
| BV | Bouvet Island |
| BR | Brazil |
| IO | British Indian Ocean Territory |
| BN | Brunei Darussalam |
| BG | Bulgaria |
| BF | Burkina Faso |
| BI | Burundi |
| KH | Cambodia |
| CM | Cameroon |
| CA | Canada |
| CV | Cape Verde |
| KY | Cayman Islands |
| CF | Central African Republic |
| TD | Chad |
| CL | Chile |
| CN | China |
| CX | Christmas Island |
| CC | Cocos (Keeling) Islands |
| CO | Colombia |
| KM | Comoros |
| CG | Congo |
| CD | Congo |
| CK | Cook Islands |
| CR | Costa Rica |
| CI | Cote D"Ivoire |
| HR | Croatia |
| CU | Cuba |
| CY | Cyprus |
| CZ | Czech Republic |
| DK | Denmark |
| DJ | Djibouti |
| DM | Dominica |
| DO | Dominican Republic |
| EC | Ecuador |
| EG | Egypt |
| SV | El Salvador |
| GQ | Equatorial Guinea |
| ER | Eritrea |
| EE | Estonia |
| ET | Ethiopia |
| FK | Falkland Islands (Malvinas) |
| FO | Faroe Islands |
| FJ | Fiji |
| FI | Finland |
| FR | France |
| GF | French Guiana |
| PF | French Polynesia |
| TF | French Southern Territories |
| GA | Gabon |
| GM | Gambia |
| GE | Georgia |
| DE | Germany |
| GH | Ghana |
| GI | Gibraltar |
| GR | Greece |
| GL | Greenland |
| GD | Grenada |
| GP | Guadeloupe |
| GU | Guam |
| GT | Guatemala |
| GG | Guernsey |
| GN | Guinea |
| GW | Guinea-Bissau |
| GY | Guyana |
| HT | Haiti |
| HM | Heard Island and Mcdonald Islands |
| VA | Holy See (Vatican City State) |
| HN | Honduras |
| HK | Hong Kong |
| HU | Hungary |
| IS | Iceland |
| IN | India |
| ID | Indonesia |
| IR | Iran |
| IQ | Iraq |
| IE | Ireland |
| IM | Isle of Man |
| IL | Israel |
| IT | Italy |
| JM | Jamaica |
| JP | Japan |
| JE | Jersey |
| JO | Jordan |
| KZ | Kazakhstan |
| KE | Kenya |
| KI | Kiribati |
| KP | Korea |
| KR | Korea |
| XK | Kosovo |
| KW | Kuwait |
| KG | Kyrgyzstan |
| LA | Lao People's Democratic Republic` |
| LV | Latvia |
| LB | Lebanon |
| LS | Lesotho |
| LR | Liberia |
| LY | Libyan Arab Jamahiriya |
| LI | Liechtenstein |
| LT | Lithuania |
| LU | Luxembourg |
| MO | Macao |
| MK | Macedonia |
| MG | Madagascar |
| MW | Malawi |
| MY | Malaysia |
| MV | Maldives |
| ML | Mali |
| MT | Malta |
| MH | Marshall Islands |
| MQ | Martinique |
| MR | Mauritania |
| MU | Mauritius |
| YT | Mayotte |
| MX | Mexico |
| FM | Micronesia |
| MD | Moldova |
| MC | Monaco |
| MN | Mongolia |
| ME | Montenegro |
| MS | Montserrat |
| MA | Morocco |
| MZ | Mozambique |
| MM | Myanmar |
| NA | Namibia |
| NR | Nauru |
| NP | Nepal |
| NL | Netherlands |
| AN | Netherlands Antilles |
| NC | New Caledonia |
| NZ | New Zealand |
| NI | Nicaragua |
| NE | Niger |
| NG | Nigeria |
| NU | Niue |
| NF | Norfolk Island |
| MP | Northern Mariana Islands |
| NO | Norway |
| OM | Oman |
| PK | Pakistan |
| PW | Palau |
| PS | Palestinian Territory |
| PA | Panama |
| PG | Papua New Guinea |
| PY | Paraguay |
| PE | Peru |
| PH | Philippines |
| PN | Pitcairn |
| PL | Poland |
| PT | Portugal |
| PR | Puerto Rico |
| QA | Qatar |
| RE | Reunion |
| RO | Romania |
| RU | Russian Federation |
| RW | Rwanda |
| SH | Saint Helena |
| KN | Saint Kitts and Nevis |
| LC | Saint Lucia |
| MF | Saint Martin |
| PM | Saint Pierre and Miquelon |
| VC | Saint Vincent and the Grenadines |
| WS | Samoa |
| SM | San Marino |
| ST | Sao Tome and Principe |
| SA | Saudi Arabia |
| SN | Senegal |
| RS | Serbia |
| SC | Seychelles |
| SL | Sierra Leone |
| SG | Singapore |
| SX | Sint Maarten |
| SK | Slovakia |
| SI | Slovenia |
| SB | Solomon Islands |
| SO | Somalia |
| ZA | South Africa |
| GS | South Georgia and the South Sandwich Islands |
| ES | Spain |
| LK | Sri Lanka |
| SD | Sudan |
| SR | Suriname |
| SJ | Svalbard and Jan Mayen |
| SZ | Swaziland |
| SE | Sweden |
| CH | Switzerland |
| SY | Syrian Arab Republic |
| TW | Taiwan |
| TJ | Tajikistan |
| TZ | Tanzania |
| TH | Thailand |
| TL | Timor-Leste |
| TG | Togo |
| TK | Tokelau |
| TO | Tonga |
| TT | Trinidad and Tobago |
| TN | Tunisia |
| TR | Turkey |
| TM | Turkmenistan |
| TC | Turks and Caicos Islands |
| TV | Tuvalu |
| UG | Uganda |
| GB | UK |
| UA | Ukraine |
| AE | United Arab Emirates |
| US | United States |
| UM | United States Minor Outlying Islands |
| UY | Uruguay |
| UZ | Uzbekistan |
| VU | Vanuatu |
| VE | Venezuela |
| VN | Viet Nam |
| VG | Virgin Islands |
| VI | Virgin Islands |
| WF | Wallis and Futuna |
| EH | Western Sahara |
| YE | Yemen |
| ZM | Zambia |
| ZW | Zimbabwe |
Ningún país coincide con esa búsqueda.
Preguntas frecuentes
¿Cómo escucho los eventos de webhook?
- Registra una aplicación en el marketplace.
- En sus ajustes, indica la URL donde quieres recibir los eventos.
- En la misma pantalla, añade los permisos que el evento requiere. Sin el permiso correspondiente el evento no se envía.
- Pide al administrador de la agencia o de la sub-cuenta que abra la página de la app y pulse Add App.
- Al seleccionar la sub-cuenta, se le redirige a tu URL de retorno con el código de autorización.
- Canjea el código por el token de acceso.
- A partir de ahí empiezas a recibir los eventos de esa sub-cuenta.
¿Cuánto duran los tokens?
El de acceso, 24 horas. El de refresco, un año — y se renueva cada vez que lo usas, así que una integración activa nunca lo pierde. Una que lleva más de un año parada, sí.
¿Qué hago cuando un token expira?
Envuelve todas tus llamadas en una función que, ante un error de token expirado, pida uno nuevo con el refresh token, guarde el par nuevo y repita la petición. Escríbela una vez y úsala en todas partes.
¿Por qué mi token de agencia no lee contactos?
Porque no le corresponde. Un token de agencia administra la cuenta; los datos de negocio viven en
las sub-cuentas. Cámbialo por uno de sub-cuenta con POST /oauth/location-token.
¿Puedo usar un token privado para una app del marketplace?
No. El token privado es para tus propias integraciones, en tu propia cuenta. Una app que instalen terceros necesita el flujo de OAuth: es lo que permite al cliente aprobar y revocar el acceso.
¿Qué hago con el traceId?
Guárdalo en tus logs junto a cada petición fallida. Identifica de forma única esa llamada y es lo primero que va a pedirte soporte.
Si te atascas y no encuentras respuesta aquí, escribe a soporte con el traceId, la
ruta que llamaste y la hora aproximada. Con esos tres datos se resuelve casi todo en el primer intercambio.
Documentación del marketplace
El marketplace es donde se publican las aplicaciones que otros pueden instalar. Más allá de la autorización, cubre las piezas que convierten una integración en un producto.
Proveedores de conversación
Registra tu propio proveedor de SMS, correo o llamadas. Los mensajes salen por tu infraestructura y entran al inbox como cualquier otro.
Autenticación externa
Pide las credenciales de tu sistema antes de instalar la app: clave de API, usuario y contraseña, o un OAuth propio.
Páginas y JS personalizados
Añade pantallas propias dentro de la interfaz. Se identifican con un secreto compartido que confirma qué usuario y qué sub-cuenta están mirando.
Facturación externa
Cobra por tu app dentro de la plataforma, con planes propios y eventos de cambio de plan.
Autenticación de webhooks
Cada entrega va firmada. Verifica la cabecera x-wh-signature contra la clave
pública antes de confiar en el contenido.
Acciones y disparadores
Aporta pasos propios a los flujos de automatización, para que tu integración se use sin escribir código.
Un webhook sin verificar es una puerta abierta. Cualquiera que conozca tu URL puede enviarte un payload falso. Comprueba la firma antes de escribir nada en tu base de datos.