Integra Chat33
con tu stack.
Píxel de seguimiento, eventos de webhook, postbacks de instalación de MMP y seguimiento de ingresos. Todo lo que necesitas para conectar Chat33 a tu sitio web o tu app.
Primeros pasos
Para usar las integraciones para desarrolladores de Chat33 necesitas un token de MMP. Lo encuentras en tu panel, en Configuración → Integraciones.
1. Obtén tu token
Ve a Configuración → Integraciones → Token de MMP. Haz clic en "Generar token" si aún no tienes uno.
2. Elige tu integración
Sitio web / app web
Usa el píxel de seguimiento para medir vistas de página, registros y compras.
App móvil
Usa los postbacks de MMP (AppsFlyer, Adjust, Branch, Tenjin, Singular) para medir instalaciones.
Píxel de seguimiento
Registra eventos del sitio web y atribúyelos a conversaciones de DM
Instalación
Agrega esta etiqueta script a tu sitio web dentro de <head> o antes de </body>. Reemplaza YOUR_PIXEL_KEY con la clave del píxel de Configuración, Integraciones. Nunca uses aquí tu token de MMP: es secreto.
<script src="https://chat33.io/pixel.js" data-token="YOUR_PIXEL_KEY"></script>Registrar eventos
El píxel registra las vistas de página automáticamente. Para registrar eventos personalizados (compras, registros, etc.), usa el método chat33.track():
// Track a purchase with value
chat33.track("purchase", {
value: 49.99,
currency: "USD",
product: "Pro Plan"
});
// Track a signup
chat33.track("signup");
// Track a lead
chat33.track("lead", { source: "landing_page" });
// Track any custom event
chat33.track("tutorial_complete", { step: 5 });Cómo funciona
Enlaces inteligentes
Chat33 agrega ?cid=xxx a los enlaces con seguimiento en los DMs
Atribución automática
El píxel lee el ID del contacto en la URL y lo conserva entre páginas
Etiquetado automático
Eventos como 'purchase' etiquetan automáticamente al contacto en tu CRM
Referencia de la API
| Método | Parámetros | Descripción |
|---|---|---|
| chat33.track(event, metadata?) | event: string, metadata: object | Enviar un evento personalizado |
| chat33.identify(contactId) | contactId: string | Definir manualmente el ID del contacto |
| chat33.getContactId() | — | Devuelve el ID del contacto actual |
API de eventos de webhook
Envía eventos personalizados desde tu servidor a Chat33
Endpoint
POST https://chat33.io/api/webhooks/events?token=YOUR_TOKEN
Content-Type: application/json
{
"event": "purchase",
"contactId": "cm1abc123...",
"value": 49.99,
"currency": "USD",
"metadata": {
"product": "Pro Plan",
"source": "checkout"
}
}Cuerpo de la solicitud
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| event | string | Sí | Nombre del evento (purchase, signup, lead, etc.) |
| contactId | string | No | ID de contacto de Chat33 para la atribución |
| value | number | No | Valor monetario del evento |
| currency | string | No | Código de moneda (USD, EUR, etc.) |
| metadata | object | No | Cualquier dato adicional |
Ejemplos
# cURL
curl -X POST "https://chat33.io/api/webhooks/events?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"event":"purchase","value":29.99,"currency":"USD"}'// Node.js / fetch
await fetch("https://chat33.io/api/webhooks/events?token=YOUR_TOKEN", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
event: "purchase",
contactId: "cm1abc123...",
value: 29.99,
currency: "USD",
}),
});Límite de frecuencia: 100 eventos por minuto por token. Los eventos se guardan como eventos de estadísticas y los contactos se etiquetan automáticamente según el nombre del evento (por ejemplo, "purchase" → etiqueta "Purchased").
API de publicación en redes
Programa y publica contenido en Instagram, Facebook, TikTok, YouTube, X (Twitter), LinkedIn, Bluesky y Threads
Autenticación
Genera una clave de API en Configuración → Claves de API. Inclúyela como encabezado x-api-key en todas las solicitudes.
# All API requests require this header:
x-api-key: sk_live_your_api_key_herePlataformas compatibles
Fotos, reels, carruseles (mediante la IG Graph API)
Texto, fotos y videos con programación nativa
TikTok
Videos y publicaciones de fotos con la Content Posting API
YouTube
Subida de videos con publicación programada nativa
X (Twitter)
Texto, fotos, video e hilos con la X API v2 (usa créditos)
Texto, tarjetas de enlace, hasta 9 imágenes o un video, publicados en el perfil del propio miembro
Bluesky
Texto, tarjetas de enlace, hasta 4 imágenes o un video, mediante el AT Protocol
Threads
Texto, imágenes, video, carruseles de hasta 20, encuestas y etiquetas de tema
Crear una publicación
curl -X POST "https://chat33.io/api/v1/posts" \
-H "x-api-key: sk_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"accountIds": ["channel_id_here"],
"text": "Check out our new product! #launch",
"mediaUrls": ["https://your-blob-url.com/image.jpg"],
"mediaType": "image"
}'Opciones por plataforma (platformConfig)
Los ajustes de cada plataforma van bajo una clave con el nombre de la plataforma. Solo se leen las claves de las plataformas incluidas en accountIds, así que una misma solicitud puede llevar opciones para varias a la vez. Todas las plataformas aceptan un reemplazo de text, de modo que una misma publicación puede leerse distinto en cada red.
Dos comportamientos que conviene conocer antes de tu primera llamada: youtube.madeForKids se rechaza si falta, en lugar de usar un valor por defecto, porque YouTube exige la declaración en cada subida. Y una publicación de TikTok sin objeto consent queda en los borradores de la cuenta en lugar de publicarse.
{
"instagram": {
"text": "...", // caption for this platform only
"firstComment": "#tags #here" // posted right after publish
},
"facebook": {
"text": "..."
},
"linkedin": {
"text": "...",
"visibility": "PUBLIC", // or "CONNECTIONS" (1st-degree only)
"articleUrl": "https://...", // link card, ignored when the post has media
"mediaTitle": "...",
"mediaDescription": "..."
},
"youtube": {
"madeForKids": false, // REQUIRED for any YouTube channel
"privacyStatus": "public", // or "unlisted" / "private"
"title": "...",
"description": "...",
"tags": ["one", "two"], // up to 30
"categoryId": "22", // default: People & Blogs
"notifySubscribers": true
},
"x": {
"text": "...",
"thread": true, // split text into a thread
"splitOn": "---",
"replyControl": "everyone" // or "following" / "mentionedUsers"
},
"tiktok": {
"text": "...",
"consent": {
"publishMode": "DIRECT_POST", // or "MEDIA_UPLOAD" (drafts)
"privacyLevel": "SELF_ONLY", // required for DIRECT_POST
"disableComment": false,
"disableDuet": false,
"disableStitch": false,
"aiGenerated": false
}
}
}Detalles de LinkedIn
- Las publicaciones se hacen en el perfil propio del miembro autenticado. Las páginas de empresa requieren la Community Management API de LinkedIn, que es una revisión aparte y aún no es compatible.
- Una publicación lleva hasta 9 imágenes o 1 video, nunca ambos. Si se excede el límite se rechaza, no se recorta en silencio.
- El texto tiene un tope de 3,000 caracteres. Video de 200 MB, imágenes de 10 MB cada una.
articleUrlsolo aplica a publicaciones de texto. Si hay multimedia, esta tiene prioridad y el enlace se ignora.- El acceso vence a los 60 días y LinkedIn no emite token de actualización, así que la cuenta debe reconectarse manualmente. Al vencer, publicar devuelve un error claro de reconexión.
- LinkedIn limita a 150 solicitudes de API por miembro al día, y cada imagen cuesta dos llamadas extra, así que el tope es de solicitudes, no de publicaciones.
Programar una publicación
curl -X POST "https://chat33.io/api/v1/posts" \
-H "x-api-key: sk_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"accountIds": ["ig_channel_id", "fb_channel_id"],
"text": "Coming soon!",
"mediaUrls": ["https://your-blob-url.com/video.mp4"],
"mediaType": "video",
"scheduledAt": "2026-04-15T14:00:00Z",
"callbackUrl": "https://your-server.com/webhook"
}'Subir archivos multimedia
La subida multipart tiene un tope estricto de 4.5 MB. Los cuerpos más grandes se rechazan con 413 FUNCTION_PAYLOAD_TOO_LARGE antes de llegar a la API. Para algo más grande, importa desde una URL pública u obtén una URL prefirmada y sube directo al almacenamiento.
# Small files (< 4.5MB): multipart upload
curl -X POST "https://chat33.io/api/v1/media/upload" \
-H "x-api-key: sk_live_your_key" \
-F "file=@photo.jpg"
# Large files, already on a public URL: URL ingestion (up to 4GB)
curl -X POST "https://chat33.io/api/v1/media/upload" \
-H "x-api-key: sk_live_your_key" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/large-video.mp4", "filename": "video.mp4"}'
# Large LOCAL file: presigned direct upload (up to 500MB per PUT)
# 1. ask for an upload URL
curl -X POST "https://chat33.io/api/v1/media/upload-url" \
-H "x-api-key: sk_live_your_key" \
-H "Content-Type: application/json" \
-d '{"filename": "video.mp4", "contentType": "video/mp4", "size": 16352652}'
# -> {"uploadUrl": "https://...", "headers": {"content-type": "video/mp4"}, ...}
# 2. PUT the bytes straight to storage (never touches the API)
curl -X PUT "<uploadUrl>" \
-H "Content-Type: video/mp4" \
--data-binary @video.mp4
# -> {"url": "https://....public.blob.vercel-storage.com/...", ...}
# pass that url in mediaUrls when creating the postReferencia de la API
| Método | Endpoint | Descripción |
|---|---|---|
POST | /api/v1/posts | Crear y poner en cola publicaciones |
GET | /api/v1/posts | Listar publicaciones (paginadas, filtrables) |
GET | /api/v1/posts/:id | Obtener los detalles de una publicación |
PATCH | /api/v1/posts/:id | Editar una publicación en borrador o en cola, o cancelarla |
DELETE | /api/v1/posts/:id | Eliminar un borrador o cancelar una publicación |
POST | /api/v1/posts/:id/duplicate | Clonar una publicación |
POST | /api/v1/media/upload | Subir multimedia (archivo de menos de 4.5 MB o URL pública) |
POST | /api/v1/media/upload-url | URL prefirmada para subir directamente un archivo local grande |
Cuerpo de la solicitud: crear publicación
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| accountIds | string[] | Sí | IDs de los canales donde publicar (máximo 10) |
| text | string | No | Texto o descripción de la publicación |
| mediaUrls | string[] | No | URL de los archivos multimedia (subidos con /media/upload) |
| mediaType | string | No | image, video, reel o carousel |
| scheduledAt | string | No | Fecha y hora ISO 8601 para programar |
| callbackUrl | string | No | URL de webhook para las notificaciones de publicación |
| platformConfig | object | No | Opciones específicas de cada plataforma (título de YouTube, privacidad, etc.) |
| coverImageUrl | string | No | Imagen de portada o miniatura de los videos |
Límites de frecuencia: 50 publicaciones por minuto por organización. Límites diarios por canal: Instagram (25), Facebook (50), TikTok (20), YouTube (100), X (300).
Callbacks: Cuando una publicación se publica o falla, se envía una solicitud POST a tu callbackUrl con el ID de la publicación, el estado y la URL de la publicación externa.
Especificación OpenAPI 3.1
Explorador interactivo de endpoints y JSON legible por máquinas para generación de código, n8n y MCP.
Documentación para IA · llms.txt
Documentación en Markdown para Claude, ChatGPT y Cursor. Cópiala y pégala para que la IA genere llamadas correctas a la API.
Nodo de n8n · nodo de la comunidad
Nodo oficial de la comunidad de n8n. Lista cuentas, crea y programa publicaciones y sube multimedia desde cualquier flujo de n8n. Instala n8n-nodes-chat33 desde Settings → Community Nodes.
Servidor MCP
Conecta Claude, Cursor o cualquier cliente MCP a Chat33. Publica, consulta estadísticas y crea automatizaciones de DM con lenguaje natural.
Conectar las cuentas de tus usuarios
Deja que tus propios usuarios conecten sus cuentas de Instagram, Facebook, TikTok, YouTube, X, LinkedIn, Bluesky o Threads a través de Chat33 y publica por ellos mediante la API
La API de conexión para desarrolladores emite un enlace de un solo uso que lleva a uno de tus usuarios a la pantalla de consentimiento OAuth de la propia plataforma, en tu nombre, sin tocar nunca su contraseña. Cuando aprueba, la cuenta conectada se comporta como cualquier otra en la API de publicación en redes de arriba: publicas en ella, lees sus estadísticas donde la plataforma las ofrece y la desconectas, siempre limitada al usuario final ("perfil") al que pertenece.
Cómo funciona
- Crea un perfil para el usuario (
POST /v1/profiles) o reutiliza uno, identificado por tu propioexternalId. - Solicita un enlace de conexión para ese perfil y una plataforma (
POST /v1/connect). Es válido una sola vez, durante 15 minutos. - Envía al usuario a la
urldevuelta. Aprueba en la pantalla de la propia plataforma, que nombra a Chat33 como la app que pide acceso: es lo esperado y nadie ve su contraseña. - Vuelve a tu
redirectUrlconstatus,profileIdyaccountIds(ostatus=error&code=…si canceló o algo salió mal; un consentimiento cancelado no gasta el enlace).
Crear un perfil
curl -X POST "https://chat33.io/api/v1/profiles" \
-H "x-api-key: sk_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Fitness",
"externalId": "user_482"
}'Crear un enlace de conexión
curl -X POST "https://chat33.io/api/v1/connect" \
-H "x-api-key: sk_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"profileId": "prof_abc123",
"platform": "instagram",
"redirectUrl": "https://yourapp.com/oauth/done",
"skipIntro": false
}'
# -> {"url": "https://chat33.io/connect/...", "expiresAt": "...", "platform": "instagram", "profileId": "prof_abc123"}
# send your user to that url
# skipIntro: true returns a url that goes straight to the platform's consent screenLo que ve tu usuario
Una página alojada por Chat33 que nombra tu app, seguida de la pantalla de inicio de sesión y consentimiento de la propia plataforma, que nombra a Chat33 como la app que pide acceso, no a la tuya. Así funciona OAuth por debajo y es lo esperado. Puede revocar el acceso desde la propia plataforma en cualquier momento.
Para omitir la página de introducción y enviar a tu usuario directo a la pantalla de consentimiento de la plataforma, pasa "skipIntro": true al crear el enlace. El enlace pasa a ser una redirección inmediata: el mismo token, los mismos 15 minutos de vigencia, el mismo regreso a tu redirectUrl. Si la omites, avísale a tu usuario en tu propia pantalla que la página de consentimiento nombrará a Chat33, y prefiere enviarlo con un clic en un botón en lugar de un enlace en un correo: los clientes de correo y las apps de chat precargan los enlaces, y la precarga de un enlace con skipIntro abre el diálogo de la plataforma en el escáner (no gasta el token).
$1 por cupo de conexión cada 30 días. Un cupo se compra con tus créditos prepagados en el momento en que se conecta una cuenta (o por adelantado con Comprar cupos) y se renueva cada 30 días mientras la cuenta siga conectada. Sin prorrateo ni reembolsos, pero el cupo que se libera al desconectar sigue siendo tuyo hasta que vence y la siguiente cuenta que conectes lo toma. Si tu saldo no cubre una renovación, la cuenta sigue funcionando 7 días mientras el monto figura como pendiente; después se pausa hasta que recargues. Las cuentas en pausa no se cobran.
Reglas
- Una cuenta real existe una sola vez en todo Chat33: no se puede conectar una segunda vez, ni por ti ni por nadie más, ya sea mediante la API o desde el panel de Chat33.
- Las cuentas conectadas por la API nunca cuentan para el límite de canales del plan de tu organización.
- Chat33 no guarda ni automatiza los mensajes y comentarios entrantes de estas cuentas (la v1 es solo de publicación).
- Facebook conecta todas las páginas a las que el usuario da acceso; cada página es su propia cuenta y su propio cupo.
- Instagram se conecta mediante Instagram Login, para cuentas de empresa o de creador.
- Las publicaciones en X desde cuentas conectadas también descuentan de tu saldo de créditos, igual que las de las cuentas de tu propio panel.
Cuentas en pausa
Una cuenta cuyo cupo estuvo sin pagar durante 7 días se pausa: publicar devuelve 402 account_paused con los accountIds afectados; se reanuda automáticamente cuando recargas. POST /v1/posts, POST /v1/posts/validate y POST /v1/posts/:id/duplicate lo verifican de entrada, antes de poner nada en cola.
// 402
{
"error": "ACCOUNT_PAUSED",
"code": "account_paused",
"message": "These accounts are paused until outstanding connection charges are paid. Top up credits.",
"accountIds": ["chan_abc123"]
}Referencia de la API
| Método | Endpoint | Descripción |
|---|---|---|
GET | /api/v1/profiles | Listar a tus usuarios finales |
POST | /api/v1/profiles | Crear (o encontrar, por externalId) un usuario final |
GET | /api/v1/profiles/:id | Obtener un perfil y sus cuentas |
PATCH | /api/v1/profiles/:id | Actualizar el nombre o el externalId de un perfil |
DELETE | /api/v1/profiles/:id | Desconectar sus cuentas y eliminar el perfil |
POST | /api/v1/connect | Crear un enlace de conexión de un solo uso para un perfil |
GET | /api/v1/accounts?source=api | Listar todas las cuentas que conectaron tus usuarios, en todos los perfiles |
GET | /api/v1/accounts?profileId= | Listar las cuentas conectadas de un perfil |
DELETE | /api/v1/accounts/:id | Desconectar una cuenta |
GET | /api/v1/posts?profileId= | Listar las publicaciones de un perfil |
GET | /api/v1/analytics/posts?profileId= | Estadísticas agregadas de las publicaciones de un perfil |
GET | /api/v1/billing/connections | Saldo de créditos, pendiente e historial de cupos |
POST | /api/v1/billing/slots | Comprar cupos de conexión por adelantado |
Eres responsable del contenido que publiques a través de las cuentas de tus usuarios y de contar con su consentimiento. Chat33 puede desactivar las claves de API que pongan en riesgo sus apps de plataforma.
Activa el permiso
Obtén el permiso connect:write: crea una clave en Configuración → Claves de API y marca Conectar las cuentas de tus usuarios. Viene desactivado por defecto en todas las claves.
Postbacks de instalación de MMP
Mide las instalaciones de la app desde AppsFlyer, Adjust, Branch, Tenjin o Singular
URL de postback
Configura esta URL en el panel de tu MMP como endpoint de postback. Reemplaza YOUR_SECRET con tu secreto de webhook de MMP de Configuración.
https://chat33.io/api/webhooks/mmp?secret=YOUR_SECRETMMP compatibles
AppsFlyer
Lee event_type, app_id, appsflyer_id, af_sub1/af_sub2 para la atribución
Adjust
Lee activity_kind (install, rejected_install, event), label y adid del callback, por GET o POST. Para los ingresos de compras agrega el marcador revenue_float (no revenue, que está en centavos) y currency
Branch
Lee los eventos de webhook (INSTALL, PURCHASE), los IDs de dispositivo en user_data y el creador y la publicación que Chat33 agrega a los datos del enlace
Tenjin
Lee campaign_id, site_id para la atribución
Singular
Lee network, source para la atribución
Configuración del enlace inteligente
Usa el paso Enviar un enlace de descarga de la app en tus automatizaciones. Envía a los usuarios de iPhone al enlace de la App Store y a los de Android al de Google Play, y cuenta cada toque en tu panel, por automatización. Pega el enlace de seguimiento de tu MMP (OneLink, Adjust, Branch, Singular o Tenjin) con un nombre de campaña por publicación, y tu MMP reporta las instalaciones por publicación. En las campañas con creadores de Chat33, los IDs del contacto y del creador se agregan al enlace automáticamente.
Agrega el paso de descarga
En tu automatización, agrega Enviar un enlace de descarga de la app con los enlaces de seguimiento de tu MMP
Configura el MMP
Configura la URL de postback en AppsFlyer, Adjust, Branch (un webhook para el evento Install), Tenjin o Singular
Mide las instalaciones
Toques por automatización en Chat33, instalaciones por campaña en tu MMP y totales de instalaciones en tu panel
¿Sin MMP? Usa los enlaces de campaña de las tiendas
Apple y Google cuentan las instalaciones por campaña sin costo. Pon un nombre de campaña en cada enlace de tienda, uno por publicación, y pega los enlaces en el paso de descarga. Las instalaciones aparecen en App Store Connect (App Analytics, Sources, Campaigns) y en Play Console (informes de adquisición por campaña UTM), aproximadamente un día después y de forma agregada.
App Store: genéralo en App Store Connect o constrúyelo
https://apps.apple.com/app/apple-store/id<APP_ID>?pt=<PROVIDER_TOKEN>&ct=<campaign_name>&mt=8Google Play: las etiquetas UTM van dentro de referrer, codificadas como URL
https://play.google.com/store/apps/details?id=<PACKAGE>&referrer=utm_source%3Dchat33%26utm_medium%3Ddm%26utm_campaign%3D<campaign_name>Paso a paso: seguimiento gratuito de instalaciones sin MMP.
Seguimiento de enlaces
Mide los clics en los enlaces enviados mediante automatizaciones de DM
Cómo funciona
Cuando usas enlaces con seguimiento en tus automatizaciones, Chat33 los envuelve en una URL de redirección que registra el clic antes de reenviar al destino. El ID del contacto se agrega como parámetro de consulta para que las páginas siguientes puedan identificar al visitante.
# Original URL in your flow:
https://yoursite.com/signup
# What gets sent to the user:
https://chat33.io/api/t?url=https://yoursite.com/signup&cid=cm1abc...&fid=flow123
# User is redirected to:
https://yoursite.com/signup?cid=cm1abc...&fid=flow123Parámetros de URL agregados
| Parámetro | Descripción |
|---|---|
| cid | ID de contacto de Chat33 |
| fid | ID de la automatización que generó el enlace |
| ch | ID del canal |
Consejo: Combina el seguimiento de enlaces con el píxel de seguimiento. Cuando un usuario hace clic en un enlace con seguimiento y llega a tu sitio, el píxel lee automáticamente el parámetro cid y atribuye a ese contacto todos los eventos siguientes.
Generador de enlaces de campaña UTM
Genera URL con parámetros UTM para Google Analytics
Consejo: Usa enlaces UTM en los mensajes de tus automatizaciones de Chat33. Combinados con el píxel de seguimiento, verás el recorrido completo desde el DM hasta la conversión en Google Analytics.
Enlaces de campaña de las tiendas de apps
Genera enlaces de descarga con seguimiento para la App Store de Apple y Google Play
Lo encuentras en tu URL de App Store Connect: apps.apple.com/app/id[ESTE_NUMERO]
Para las campañas de Chat33: Usa estos enlaces en tus automatizaciones de DM con el paso Enviar un enlace para descargar la app. Chat33 agregará automáticamente el ID del contacto y el del creador para que las instalaciones se atribuyan a tu campaña.
Integración con MMP: Si usas AppsFlyer, Adjust, Branch, Tenjin o Singular, usa en su lugar sus URL de OneLink o de seguimiento y configura la URL de postback de Chat33 en el panel de tu MMP. Consulta la sección Postbacks de MMP.
¿Necesitas ayuda con la integración?
Nuestro equipo puede ayudarte a configurar el seguimiento y a sacarle el máximo partido a las herramientas para desarrolladores de Chat33.