Documentación API — Growth54
https://api.growth54.com
Growth54 es una plataforma de control empresarial multiempresa orientada a automatización, contenido y crecimiento asistido por IA. Su API REST permite que el panel web, los agentes de inteligencia artificial y los workflows de n8n lean y escriban datos de cada empresa registrada.
La API tiene cuatro capas de acceso según quién llama: usuarios del panel (Sanctum), administradores master, automatizaciones de n8n (solo lectura) y agentes de IA (escritura de resultados). Esta separación permite que cada integración tenga exactamente los permisos que necesita.
Esta guía cubre todos los endpoints disponibles, explica el propósito de cada módulo y documenta el brief técnico para construir los agentes n8n del módulo RRSS.
Convenciones
Reglas que aplican a todas las llamadas, independientemente del módulo o tipo de acceso. Leer esto antes de integrar cualquier endpoint.
N8N_API_TOKEN o AGENT_API_TOKEN están vacíos en el .env, esas rutas aceptan llamadas sin token. Esto facilita las pruebas iniciales. Para pasar a producción: definir ambas variables en el .env del backend y reiniciar los contenedores Docker.
Headers obligatorios en toda llamada
Accept: application/json
Content-Type: application/json
Códigos de error comunes
- 401 — Token no enviado o inválido.
- 403 — Sin permiso para esa acción.
- 422 — Datos incorrectos o empresa activa no asignada.
- 404 — Recurso no existe o no pertenece a tu empresa.
Tipos de acceso
La API distingue cuatro tipos de caller, cada uno con su propio prefijo de ruta y mecanismo de autenticación. La separación es intencional: un agente de IA solo puede escribir datos de resultados, no acceder a la configuración del usuario; un workflow de n8n solo puede leer, no modificar.
| Tipo | Prefijo | Quién lo usa |
|---|---|---|
| Usuario del panel | /api/auth/* | Frontend — token Sanctum |
| Admin master | /api/admin/* | Administrador de plataforma |
| n8n / automatizaciones | /api/n8n/* | Workflows — solo lectura |
| Agentes de IA | /api/agent/* | Agentes — escritura de datos |
| Público | /api/public/* | Sin token, con rate limit |
422. Se cambia con POST /api/auth/switch-company pasando el company_id deseado.
Registro público
sin token · rate 5/minEstos endpoints no requieren autenticación. Están diseñados para recibir leads desde formularios externos — una landing page en WordPress, un anuncio con formulario, etc. El rate limiting de 5 solicitudes por minuto evita que se use como vector de spam. Al registrar un cliente, el sistema crea el usuario en estado pendiente y lo asigna al flujo de onboarding.
Registra un cliente desde formulario externo (WordPress, landing page, etc.).
curl -s -X POST "https://api.growth54.com/api/public/register-client" \
-H "Accept: application/json" -H "Content-Type: application/json" \
-d '{"name":"Juan García","email":"juan@empresa.com"}' | jq
Verifica que la app, base de datos y caché respondan.
curl -s "https://api.growth54.com/api/health" | jq
Login de usuario
SanctumEl flujo estándar para el panel web. El login devuelve un token Bearer de Laravel Sanctum que se incluye en todas las llamadas posteriores. El token no expira automáticamente — se invalida llamando a logout. Después del login, el primer paso es llamar a switch-company para activar la empresa con la que se quiere trabajar.
curl -s -X POST "https://api.growth54.com/api/auth/login" \
-H "Accept: application/json" -H "Content-Type: application/json" \
-d '{"email":"user@demo.com","password":"secret"}' | jq
Datos del usuario autenticado.
Cambia la empresa activa. Necesario antes de usar módulos.
curl -s -X POST "https://api.growth54.com/api/auth/switch-company" \
-H "Authorization: Bearer <token>" -H "Content-Type: application/json" \
-d '{"company_id": 1}' | jq
Invalida el token actual.
Admin master
is_master = truecurl -s -X POST "https://api.growth54.com/api/admin/login" \
-H "Content-Type: application/json" \
-d '{"email":"admin@demo.com","password":"secret"}' | jq
GET lista · POST crear · GET/{id} · PUT actualizar · DELETE
Al crear con owner_user_id asigna rol owner automáticamente.
Onboarding
auth:sanctumEl proceso que sigue un usuario recién registrado. Tiene dos caminos: crear una empresa nueva (y quedar como owner) o unirse a una empresa existente usando un código de invitación (y quedar como collaborator). Los códigos de invitación los generan los owners o admins de la empresa, y se pueden limitar en número de usos y fecha de expiración.
Crea empresa y asigna al usuario como owner.
curl -s -X POST "https://api.growth54.com/api/onboarding/companies" \
-H "Authorization: Bearer <token>" -H "Content-Type: application/json" \
-d '{"name":"Mi Empresa","industry":"Legal","website":"https://mi.com"}' | jq
Unirse con código de invitación. Rol: collaborator.
-d '{"code":"ABC123"}'
Genera código de invitación. Solo owner o admin.
-d '{"max_uses": 10, "expires_in_days": 30}'
Keywords
auth:sanctumLas keywords son el punto de partida del motor de contenido SEO. Cada empresa mantiene un banco de palabras clave clasificadas por dificultad, intención de búsqueda y fuente de origen. Los agentes de IA usan este banco para generar artículos relevantes y posicionar el sitio de la empresa. Las keywords pueden agregarse manualmente desde el panel o en bulk desde un workflow de n8n que haya hecho keyword research.
/api/agent/keywords/bulk → el usuario las revisa en el panel → aprueba las que le interesan → el agente generador de artículos las convierte en contenido.Lista keywords de la empresa activa.
Totales por dificultad, intención, etc.
Crea keyword manual. Valores: dificultad_nivel: baja/media/alta · intencion: informacional/transaccional/comercial/local
-d '{"keyword":"abogado laboral","dificultad_nivel":"media","intencion":"comercial","fuente":"Google"}'
Dispara el agente de keyword research para la empresa activa.
Dispara generación de artículo para una keyword específica.
Artículos
auth:sanctumLos artículos son el contenido SEO generado por los agentes a partir de las keywords. Cada artículo parte de una keyword, el agente genera el HTML completo y lo guarda como borrador. Desde el panel, el equipo lo revisa, edita si necesita y lo marca como revisado. Luego puede publicarse directamente en WordPress mediante la integración CMS. El listado no incluye el HTML para no sobrecargar la respuesta — se obtiene con el endpoint de detalle.
Lista (sin HTML). estado: borrador/revisado/publicado
Detalle completo con HTML.
Marca como publicado y asigna fecha.
Auditorías
auth:sanctumLas auditorías son reportes de análisis completos generados por agentes. A diferencia de la auditoría inicial (que es única por empresa), aquí puede haber múltiples auditorías acumuladas — por ejemplo, un análisis competitivo mensual, una revisión técnica post-migración, etc. Cada auditoría contiene un reporte HTML completo que se muestra en el panel.
Lista (sin HTML).
Detalle con HTML del reporte.
Auditoría inicial
auth:sanctumCada empresa tiene exactamente una auditoría inicial: el diagnóstico de punto de partida que se hace cuando el cliente comienza a usar Growth54. Analiza el sitio web, evalúa el SEO técnico, identifica oportunidades y genera un score. Este score sirve como línea base para medir el progreso en el tiempo. El agente n8n la genera automáticamente; si se vuelve a ejecutar, sobreescribe la anterior (upsert).
Dispara el workflow n8n. El agente guarda el resultado vía /api/agent/auditoria-inicial.
Páginas / URLs
auth:sanctumRegistro de las URLs del sitio web de la empresa. Permite hacer seguimiento del posicionamiento por página individual y auditar cada URL de forma independiente. Las páginas se pueden agregar manualmente o descubrirse automáticamente mediante un crawl del sitio. Una vez registradas, el agente de auditoría SEO puede analizar cada URL y devolver recomendaciones específicas.
Registra nueva URL del sitio.
Descubrimiento automático de páginas.
Dispara auditoría SEO para una URL específica.
Productos y servicios
auth:sanctumCatálogo de lo que vende la empresa. Los agentes de IA leen este catálogo antes de generar contenido para que los artículos, posts e ideas mencionen los productos reales del negocio y no generen texto genérico. Por ejemplo, un agente de RRSS que sabe que la empresa ofrece "auditoría gratuita de 30 minutos" puede incluirlo como CTA en los posts. Sin este catálogo, el agente genera contenido sin contexto comercial.
Competidores
auth:sanctumCMS Integrations
auth:sanctumConexiones con el sitio web de la empresa para publicar contenido directamente desde Growth54. Por ahora soporta WordPress vía su API REST. El flujo es: el equipo guarda las credenciales WordPress de la empresa (URL, usuario, application password) → el agente generador de artículos las usa para hacer un POST directo al CMS y publicar el artículo sin intervención manual. Las credenciales siempre requieren token aunque el servidor esté en modo provisional.
Credenciales CMS para que el agente pueda publicar. Siempre requiere token aunque el servidor esté en modo provisional.
Agent Endpoints
auth:sanctumRegistro global de los webhooks de n8n disponibles en la plataforma. Cada agente tiene una key única (por ejemplo rrss_strategist) y una URL de webhook. Cuando el usuario hace clic en "Ejecutar agente" en el panel, el backend busca la key correspondiente en esta tabla, obtiene el webhook y lo llama. Si el webhook no está registrado o el agente está inactivo, la llamada falla con 422 y el panel muestra un mensaje indicando que hay que configurarlo en esta sección. Esto permite cambiar o actualizar los workflows de n8n sin tocar el código del backend.
Activa o desactiva el agente.
Prueba la conectividad con el webhook.
RRSS — Canales sociales
auth:sanctumEl módulo RRSS gestiona toda la operación de redes sociales de la empresa: desde la estrategia hasta la publicación y las métricas. Esta primera sección configura qué plataformas usa la empresa y con qué cuenta. Es el dato de partida que leen todos los agentes RRSS: sin canales configurados, los agentes no saben en qué plataformas generar contenido ni qué handle mencionar.
Upsert — actualiza el estado completo de los canales.
-d '{"channels":[{"platform":"instagram","active":true,"handle":"@miempresa"},{"platform":"linkedin","active":true}]}'
RRSS — Estrategia
auth:sanctumUna empresa tiene exactamente una estrategia RRSS. El PUT es upsert.
data: null si no existe aún.
-d '{
"objetivo":"Generar leads calificados","audiencia":"Dueños PYME 28-45 LATAM",
"tono":"Profesional pero cercano","frecuencia":"6 posts semanales",
"cta_principal":"Agendar llamada gratuita","embudo":"RRSS → Website → Lead → CRM",
"plataformas":["Facebook","Instagram","LinkedIn"],
"pilares":["Educación","Casos de éxito","Detrás de cámaras"],
"kpis":["Alcance orgánico","Engagement","Leads generados"]
}'
RRSS — Ideas
auth:sanctumEl banco de ideas es el primer paso del pipeline de contenido social. Una idea es simplemente un tema propuesto: "5 errores que cometen las PYMEs en Instagram". Puede crearla manualmente el equipo, o puede generarlas el agente Content AI en bulk. El equipo revisa el banco y aprueba las que le parecen buenas — las aprobadas son las que el agente luego convierte en posts completos. Las descartadas quedan registradas para no proponer el mismo tema de nuevo.
Filtros: ?status=aprobado · ?platform=Instagram
-d '{"topic":"5 errores de PYMEs en Instagram","platform":"Instagram","keyword":"marketing PYME"}'
{"status":"aprobado"}
RRSS — Posts
auth:sanctumUn post es el contenido final listo para publicar. Cada post tiene copy adaptado para cada plataforma (Instagram, Facebook, LinkedIn), hooks alternativos para el inicio del texto, un CTA específico y opcionalmente una imagen o prompt para generarla con IA. El ciclo de vida es: el agente genera el borrador → el equipo lo revisa en el panel → lo aprueba → le asigna una fecha → queda programado. Cuando se publica, el sistema registra automáticamente quién lo aprobó y la fecha de publicación.
Filtros: ?status=borrador · ?platform=LinkedIn
Al aprobar → guarda approved_by_user_id. Al publicar → guarda fecha_publicada.
-d '{"status":"aprobado"}'
Programa post. Cambia status a programado. La fecha debe ser futura.
-d '{"fecha_programada":"2026-05-20T10:00:00"}'
RRSS — Métricas
auth:sanctumEl cierre del ciclo: después de publicar, el agente Analytics AI recoge los números reales de cada plataforma (alcance, impresiones, engagement, clics a perfil, leads generados) y los carga en la base de datos. La vista de métricas del panel muestra estos datos agrupados por plataforma y calcula promedios. También muestra el top 10 de posts por engagement, lo que permite al equipo identificar qué tipo de contenido funciona mejor para esa empresa.
Resumen por plataforma. Filtros: ?platform=Instagram · ?from=2026-05-01 · ?to=2026-05-31
// Respuesta:
{"data":[{"platform":"Instagram","alcance_total":12430,"impresiones_total":38000,
"engagement_total":584,"engagement_rate_avg":4.7,"clics_total":384,"leads_total":17}]}
Top 10 posts por engagement.
RRSS — Triggers de agentes
auth:sanctumCuando el usuario hace clic en "Ejecutar agente" en el panel, el frontend llama uno de estos endpoints. El backend busca la key del agente en la tabla agent_endpoints, obtiene la URL del webhook de n8n y lo dispara pasándole el company_id. Si el webhook no está configurado, responde con 422 y un mensaje indicando que hay que configurarlo en Panel › Configuración › Agentes. El agente trabaja de forma asíncrona: el webhook responde inmediatamente con 200 y n8n procesa en segundo plano.
Key: rrss_strategist
Key: rrss_content_ai
-d '{"mode":"ideas","idea_id":null}'
-d '{"mode":"post","idea_id":5}'
Key: rrss_analytics
n8n — Lectura general
Bearer N8N_TOKENEstos endpoints existen para que los workflows de n8n puedan leer el contexto de la empresa antes de generar contenido. Un agente que va a escribir artículos necesita saber la industria de la empresa, sus keywords, sus productos. Un agente RRSS necesita saber en qué plataformas está activa la empresa y cuál es su tono de comunicación. Todos son de solo lectura — los agentes leen desde aquí y escriben los resultados a través de los endpoints /api/agent/*.
Lista todas las empresas.
Perfil de empresa (sin datos sensibles).
Filtros: ?estado=activa · ?origen=manual
Solo keywords sin artículo.
Detalle con HTML del reporte.
n8n — Lectura RRSS
Bearer N8N_TOKENBase: /api/n8n/companies/{id}/rrss/
Canales activos con handle, objetivo, frecuencia y rol en el embudo.
null si no existe.
Solo ideas con status aprobado.
Posts con status aprobado o programado.
Agent — Escritura general
Bearer AGENT_TOKENUna vez que el agente termina su trabajo (generar keywords, escribir artículos, crear auditorías), usa estos endpoints para guardar los resultados en Growth54. Se identifican por el AGENT_API_TOKEN, distinto al token de usuario, lo que significa que el agente puede escribir datos sin tener una sesión de usuario activa. Todos los registros creados por esta vía quedan marcados con generated_by = 'n8n' para distinguirlos de los creados manualmente.
Inserta o actualiza keywords en bulk. skip_existing: true no toca las existentes.
-d '{"empresa_id":1,"skip_existing":true,"keywords":[
{"keyword":"abogado laboral","dificultad_nivel":"media","intencion":"comercial","fuente":"Google"}
]}'
-d '{"empresa_id":1,"articulos":[{"keyword_id":10,"titulo":"Guía de contrato","contenido_html":"<h1>...","estado":"borrador"}]}'
Guarda o actualiza la auditoría inicial (upsert por empresa).
Agent — Escritura RRSS
Bearer AGENT_TOKENTodos los registros creados quedan con generated_by = 'n8n' automáticamente.
-d '{"company_id":3,"objetivo":"...","audiencia":"...","tono":"...",
"plataformas":["Instagram","LinkedIn"],"pilares":["Educación"],"kpis":["Alcance"]}'
Bulk. Respuesta: {"ok":true,"created":N}
-d '{"company_id":3,"ideas":[{"topic":"5 errores PYME","platform":"Instagram","keyword":"marketing"}]}'
Bulk. Llegan con status = borrador.
-d '{"company_id":3,"posts":[{
"tema":"5 errores PYME","platform":"Instagram","social_idea_id":5,
"copy_instagram":"¿Tu negocio está en IG pero no consigue resultados?\n...",
"copy_linkedin":"En 2026, producir sin estrategia es el error más común...",
"hooks":["Hook alternativo 1","Hook alternativo 2"],
"cta":"Comenta o DM para auditoría gratuita.",
"imagen_prompt":"Minimalist flat design 5 warning signs PYME"
}]}'
-d '{"company_id":3,"metricas":[{
"platform":"Instagram","period_start":"2026-05-01","period_end":"2026-05-31",
"social_post_id":12,"alcance":3420,"impresiones":10500,
"engagement_count":212,"engagement_rate":6.2,"clics":89,"leads":4
}]}'
Agentes n8n — Config inicial
Todos los workflows empiezan con un nodo Set llamado Config.
BASE_URL = https://api.growth54.com ← producción
https://xxx.ngrok-free.app ← local con ngrok
AGENT_TOKEN = (AGENT_API_TOKEN del .env)
N8N_TOKEN = (N8N_API_TOKEN del .env)
COMPANY_ID = {{ $json.company_id }} ← viene del trigger del panel
Authorization: Bearer <N8N_TOKEN>Escritura →
Authorization: Bearer <AGENT_TOKEN>
| Agente | Key |
|---|---|
| Strategist AI | rrss_strategist |
| Content AI (ideas + post) | rrss_content_ai |
| Analytics AI | rrss_analytics |
Strategist AI
rrss_strategistLee perfil y canales, genera estrategia RRSS completa, la guarda. El equipo puede editarla desde el panel.
company_idGET /api/n8n/companies/{id} — nombre, industria, paísGET /api/n8n/companies/{id}/rrss/canalesGET /api/n8n/companies/{id}/rrss/estrategia — puede ser nullPOST /api/agent/rrss/estrategiaEres un estratega RRSS experto en PYMEs latinoamericanas.
Empresa: {nombre} — {industria} — {país}
Canales activos: {plataforma, handle, objetivo, frecuencia}
Estrategia actual: {existente o "ninguna"}
Responde SOLO en JSON:
{"objetivo":"...","audiencia":"...","tono":"...","frecuencia":"...",
"cta_principal":"...","embudo":"...","plataformas":[],"pilares":[],"kpis":[]}
Content AI — modo Ideas
mode: ideasGenera 10 ideas basadas en la estrategia y canales. Llegan con status = idea para revisión del equipo.
company_id, mode = "ideas"GET perfil + canales + estrategiaPOST /api/agent/rrss/ideas — bulk, respuesta: {"ok":true,"created":10}Genera 10 ideas de contenido para {nombre} ({industria}, {país}).
Objetivo: {objetivo} | Pilares: {pilares} | Canales: {plataformas}
Sé específico. Fechas: próximos 30 días.
Responde SOLO en JSON:
{"ideas":[{"topic":"...","platform":"Instagram|Facebook|LinkedIn",
"keyword":"...","fecha_propuesta":"YYYY-MM-DD"}]}
Content AI — modo Post
mode: postToma una idea aprobada y genera el post completo: copy por plataforma, hooks y CTA. Llega como borrador.
company_id, mode = "post", idea_idGET perfil + estrategia + idea específicaPOST /api/agent/rrss/posts — borrador con social_idea_id enlazadoEres copywriter experto en RRSS para PYMEs de LATAM.
Empresa: {nombre} | Tono: {tono} | CTA: {cta_principal}
Tema: {topic} | Plataforma: {platform} | Keyword: {keyword}
Responde SOLO en JSON:
{"copy_instagram":"texto con emojis y hashtags","copy_facebook":"texto conversacional",
"copy_linkedin":"tono profesional","hooks":["hook1","hook2"],
"cta":"llamada a la acción","imagen_prompt":"descripción en inglés para DALL-E"}
Analytics AI
rrss_analyticsLee métricas de las plataformas y las carga al backend.
company_idGET /api/n8n/companies/{id}/rrss/canales — handles y plataformasGET /api/n8n/companies/{id}/rrss/posts — para linkear métricas por postPOST /api/agent/rrss/metricasOrden de construcción recomendado
| # | Agente | Por qué primero |
|---|---|---|
| 1 | Content AI — Ideas | Valor inmediato. El cliente ve ideas en segundos. |
| 2 | Content AI — Post | Amplía el anterior. Misma key, mismo workflow. |
| 3 | Strategist AI | Requiere canales bien configurados primero. |
| 4 | Analytics AI (Sheets) | Mínimo viable. Sin OAuth por empresa. |
| 5 | Analytics AI (APIs) | Automatización total. Iteración avanzada. |
- No enviar
company_id/empresa_iden el body → 422 statuscon valor fuera del enum → 422fecha_programadaen el pasado → rechazada- Omitir
Authorizationheader → 401
Casos de uso
GET /api/n8n/companies→ obtenerempresa_idPOST /api/agent/keywords/bulk→ insertar keywords
GET /api/n8n/companies/{id}/keywords/pending-articulos- El agente genera HTML para cada keyword
POST /api/agent/articulos
- Panel llama
POST /api/rrss/run-content-aiconmode: ideas - n8n lee estrategia y canales → IA genera ideas →
POST /api/agent/rrss/ideas - El equipo aprueba desde el panel →
PUT /api/rrss/ideas/{id}/status
Planes de Suscripción
Documentación completa de los planes disponibles en Growth54: funcionalidades incluidas, límites por plan y comparativa. Relevante para el equipo comercial y para entender qué módulos están disponibles para cada cliente.
💳 Abrir documento de planes →Checklist rápido
- Insertar datos desde n8n:
/api/n8n/companies→ id →/api/agent/* - Acceso de usuario: login → switch-company → usar módulos
- Activar protección: definir
N8N_API_TOKENyAGENT_API_TOKENen.env - Siempre enviar:
Accept: application/jsonyContent-Type: application/json
POST /api/dev/purge-current-company elimina todos los datos de la empresa activa. Nunca en producción.