Definición
Crear automatización
Crea una automatización con trigger webhook, cron, Gmail o evento de registro y uno o más pasos.
POST
/
workflows
curl --request POST \
--url https://api.insuranceboosters.com/api/v1/workflows \
--header 'Content-Type: application/json' \
--header 'x-ib-api-key: <api-key>' \
--data '
{
"name": "Notificar pago recibido",
"trigger": {
"type": "webhook"
},
"steps": [
{
"name": "Esperar",
"actionKey": "system.delay",
"input": {
"mode": "duration",
"amount": 1,
"unit": "seconds"
}
},
{
"name": "Avisar sistema externo",
"actionKey": "http.request",
"input": {
"method": "POST",
"url": "https://ejemplo.com/hooks/pago",
"headers": {
"Content-Type": "application/json"
},
"body": {
"evento": "pago_recibido",
"referencia": "{{trigger.body.referencia}}"
}
}
}
]
}
'{
"id": "<string>",
"name": "<string>",
"status": "enabled",
"trigger": {
"type": "webhook",
"secret": "<string>"
},
"steps": [
{
"actionKey": "browser.use",
"task": "<string>",
"resultSchema": {
"type": "object"
},
"wait": {
"initialDelaySeconds": 30,
"pollIntervalSeconds": 15,
"timeoutSeconds": 3600
},
"id": "<string>",
"name": "<string>"
}
],
"createdAt": 123,
"lastUpdatedAt": 123,
"publishedVersionId": "<string>",
"latestVersionNumber": 123,
"cronState": {
"lastFiredAt": 123,
"nextDueAt": 123
}
}{
"error": "<string>"
}{
"message": "Invalid API key."
}{
"error": "<string>"
}Crea una automatización en borrador. Para que acepte disparos debes publicarla y activarla.
No envíes
Se dispara automáticamente cuando se crea un registro en el tablero seleccionado.
Se dispara automáticamente cuando cambian los campos o el alcance de un registro en el tablero seleccionado. Cambios que solo afectan otros metadatos no generan una ejecución.
Obtén el
Paso
Guía completa: Usar navegador.
Paso
Un mismo paso admite hasta 20 preguntas y se evalúan juntas. Los pasos
siguientes leen cada respuesta con Paso
Paso
Paso
Publica como archivos todos los PDF de recibos pendientes encontrados para
esas pólizas. Paso
Guía completa: Esperar.
Paso
Guía completa: Solicitud HTTP.
Paso
Guía completa (objetos disponibles, buenos/malos ejemplos): Paso JavaScript.
Paso
Guía completa: Enviar correo con Gmail.
Para pasar variables entre pasos (
Respuesta exitosa (
Guarda
Publica y activa la automatización antes de actualizar el registro que debe dispararla.
Endpoint
POST /workflows
Body
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
name | string | Sí | Nombre visible. |
status | string | No | enabled o disabled. Recomendado: crear en disabled. |
trigger | object | Sí | webhook, cron, gmail_email_received, database_record_created o database_record_updated. |
steps | array | Sí | Uno o más pasos ordenados. |
Trigger webhook
{ "type": "webhook" }
secret: la API lo genera y lo devuelve en la respuesta.
Trigger cron
{
"type": "cron",
"cron": "0 9 * * *",
"timezone": "America/Mexico_City"
}
Trigger al crear un registro
{
"type": "database_record_created",
"databaseId": "<database-id>"
}
Trigger al actualizar un registro
{
"type": "database_record_updated",
"databaseId": "<database-id>"
}
databaseId con Listar tableros. Para ambos triggers puedes acceder al registro con {{trigger.body.record}}; sus campos están en {{trigger.body.record.values.<fieldId>}}.
Trigger de correo Gmail
{
"type": "gmail_email_received",
"credentialKey": "<gmail-credential-key>"
}
credentialKey es obligatorio: cada trigger escucha una sola cuenta Gmail. El
trigger hidrata el cuerpo completo, la cadena del hilo y los adjuntos antes de
ejecutar los pasos.
Guía completa: Trigger de correo Gmail.
Paso browser.use
{
"actionKey": "browser.use",
"task": "Investiga al prospecto {{trigger.body.record.values.<fieldId>}} y devuelve su sitio oficial, industria y fuentes.",
"resultSchema": {
"type": "object",
"additionalProperties": false,
"required": ["website", "industry", "sources"],
"properties": {
"website": { "type": "string" },
"industry": { "type": "string" },
"sources": {
"type": "array",
"items": { "type": "string" }
}
}
},
"wait": {
"initialDelaySeconds": 30,
"pollIntervalSeconds": 15,
"timeoutSeconds": 3600
}
}
Paso decision.evaluate
{
"name": "Clasificar el mensaje",
"actionKey": "decision.evaluate",
"input": {
"state": "{{trigger.body.record.values.<fieldId>}}",
"questions": {
"tema": {
"type": "choice",
"instructions": "¿Sobre qué trata el mensaje?",
"criteria": {
"facturacion": "Cobros, pagos y reembolsos",
"soporte": "Fallas y errores del producto",
"ventas": "Precios, planes y contrataciones"
}
}
}
}
}
{{steps.N.output.tema.choice}}.
Guía completa (tipos de pregunta y cómo usar el resultado):
Criterio IA.
Paso gnp.issue-policy-rc-professional
{
"name": "Preparar emisión RC Profesional",
"actionKey": "gnp.issue-policy-rc-professional",
"credentialId": "cred_0123456789ab",
"nombreAsegurado": "Consultorio Ejemplo",
"profesion": "RC Profesional Otras Profesiones",
"actividad": "Consultoría",
"moneda": "Pesos",
"sumaAsegurada": 1000000,
"periodicidadPago": "Anual",
"plan": "Esencial",
"contratante": {
"nombre": "Ana",
"primerApellido": "Pérez",
"fechaNacimiento": "1985-04-12",
"rfc": "PEAA850412AB1",
"regimenFiscal": "Sueldos y Salarios",
"nacionalidad": "Mexicana",
"paisOrigen": "México",
"genero": "Femenino",
"domicilioParticular": {
"tipoVia": "Calle",
"calle": "Reforma",
"numeroExterior": "100",
"codigoPostal": "06600",
"colonia": "Juárez"
},
"tipoTelefono": "Celular",
"telefono": "5512345678",
"correoElectronico": "ana@example.com"
},
"folioAgente": "P12345",
"confirmarEmision": false
}
credentialId debe identificar una credencial gnp.portal. Conserva
confirmarEmision:false hasta revisar la cotización; cambiarlo a true
autoriza una emisión irreversible.
Guía completa:
Agente de IA: Emisión RC Profesional en GNP.
Paso gnp.pending-receipts
{
"name": "Reporte de pólizas pendientes en GNP",
"actionKey": "gnp.pending-receipts",
"credentialId": "cred_0123456789ab"
}
credentialId debe identificar una credencial gnp.portal del mismo tenant, y
es el único campo que acepta el paso. El reporte llega completo y con los datos
ya limpios, sin filtrar; agrega después un paso code.javascript para quedarte
con lo que te interesa.
Guía completa:
Agente de IA: Reporte de pólizas y recibos pendientes en GNP.
Para leer el XLSX que publica en un step posterior, consulta
Archivos entre pasos.
Paso gnp.receipt-documents
{
"name": "Descargar recibos pendientes",
"actionKey": "gnp.receipt-documents",
"credentialId": "cred_0123456789ab",
"policyNumbers": ["623588738", "378312037"]
}
policyNumbers también acepta una plantilla completa, por ejemplo
"{{steps.0.output.policyNumbers}}", si el paso anterior devuelve string[].
Guía completa:
Agente de IA: PDFs de recibos pendientes en GNP.
Paso system.delay
{
"name": "Esperar",
"actionKey": "system.delay",
"input": {
"mode": "duration",
"amount": 1,
"unit": "seconds"
}
}
Paso http.request
{
"name": "Avisar sistema externo",
"actionKey": "http.request",
"input": {
"method": "POST",
"url": "https://ejemplo.com/hooks/pago",
"headers": { "Content-Type": "application/json" },
"body": {
"referencia": "{{trigger.body.referencia}}"
}
}
}
Paso code.javascript
{
"name": "Normalizar referencia",
"actionKey": "code.javascript",
"input": {
"referencia": "{{trigger.body.referencia}}"
},
"code": "output = { referencia: String(input.referencia || '').trim() };"
}
Paso gmail.send
{
"name": "Responder por correo",
"actionKey": "gmail.send",
"input": {
"credentialKey": "<gmail-credential-key>",
"to": ["{{trigger.body.message.from}}"],
"replyToMessageId": "{{trigger.body.message.id}}",
"text": "Recibimos tu mensaje."
}
}
steps.N.output, capture, context) con ejemplos de 2 y 3 pasos, ver Variables y contexto.
Ejemplo de solicitud
curl -X POST "https://api.insuranceboosters.com/api/v1/workflows" \
-H "Content-Type: application/json" \
-H "x-ib-api-key: TU_API_KEY" \
-d '{
"name": "Notificar pago recibido",
"status": "disabled",
"trigger": { "type": "webhook" },
"steps": [
{
"name": "Esperar",
"actionKey": "system.delay",
"input": { "mode": "duration", "amount": 1, "unit": "seconds" }
},
{
"name": "Avisar sistema externo",
"actionKey": "http.request",
"input": {
"method": "POST",
"url": "https://ejemplo.com/hooks/pago",
"headers": { "Content-Type": "application/json" },
"body": {
"evento": "pago_recibido",
"referencia": "{{trigger.body.referencia}}"
}
}
}
]
}'
Respuesta exitosa (201)
{
"id": "<workflow-id>",
"name": "Notificar pago recibido",
"status": "disabled",
"trigger": {
"type": "webhook",
"secret": "<webhook-secret>"
},
"steps": [
{
"id": "<step-id>",
"name": "Esperar",
"actionKey": "system.delay",
"input": {
"mode": "duration",
"amount": 1,
"unit": "seconds"
}
}
],
"latestVersionNumber": 0,
"createdAt": 1720000000000,
"lastUpdatedAt": 1720000000000
}
id y, si el trigger es webhook, trigger.secret para armar la URL pública.
Ejemplo con un registro actualizado
Este ejemplo envía el ID y el campoestado del registro actualizado a un sistema externo:
curl -X POST "https://api.insuranceboosters.com/api/v1/workflows" \
-H "Content-Type: application/json" \
-H "x-ib-api-key: TU_API_KEY" \
-d '{
"name": "Notificar cambio de estado",
"status": "disabled",
"trigger": {
"type": "database_record_updated",
"databaseId": "<database-id>"
},
"steps": [
{
"name": "Avisar sistema externo",
"actionKey": "http.request",
"input": {
"method": "POST",
"url": "https://ejemplo.com/hooks/estado",
"headers": { "Content-Type": "application/json" },
"body": {
"recordId": "{{trigger.body.record.id}}",
"estado": "{{trigger.body.record.values.estado}}"
}
}
}
]
}'
Errores frecuentes
| HTTP | Qué significa | Qué hacer |
|---|---|---|
400 | El body no cumple el esquema o el tablero no está disponible. | Revisa trigger, databaseId, actionKey y los campos requeridos por cada tipo de paso. |
401 | API key inválida o faltante. | Verifica x-ib-api-key. |
500 | No fue posible crear. | Reintenta; si continúa, contacta soporte. |
Authorizations
API key emitida por Insurance Boosters.
Body
application/json
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
Show child attributes
Show child attributes
Minimum array length:
1- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
- Option 7
- Option 8
- Option 9
- Option 10
Show child attributes
Show child attributes
Available options:
enabled, disabled Response
Automatización creada en borrador.
Available options:
enabled, disabled - Option 1
- Option 2
- Option 3
- Option 4
- Option 5
Show child attributes
Show child attributes
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
- Option 7
- Option 8
- Option 9
- Option 10
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?
curl --request POST \
--url https://api.insuranceboosters.com/api/v1/workflows \
--header 'Content-Type: application/json' \
--header 'x-ib-api-key: <api-key>' \
--data '
{
"name": "Notificar pago recibido",
"trigger": {
"type": "webhook"
},
"steps": [
{
"name": "Esperar",
"actionKey": "system.delay",
"input": {
"mode": "duration",
"amount": 1,
"unit": "seconds"
}
},
{
"name": "Avisar sistema externo",
"actionKey": "http.request",
"input": {
"method": "POST",
"url": "https://ejemplo.com/hooks/pago",
"headers": {
"Content-Type": "application/json"
},
"body": {
"evento": "pago_recibido",
"referencia": "{{trigger.body.referencia}}"
}
}
}
]
}
'{
"id": "<string>",
"name": "<string>",
"status": "enabled",
"trigger": {
"type": "webhook",
"secret": "<string>"
},
"steps": [
{
"actionKey": "browser.use",
"task": "<string>",
"resultSchema": {
"type": "object"
},
"wait": {
"initialDelaySeconds": 30,
"pollIntervalSeconds": 15,
"timeoutSeconds": 3600
},
"id": "<string>",
"name": "<string>"
}
],
"createdAt": 123,
"lastUpdatedAt": 123,
"publishedVersionId": "<string>",
"latestVersionNumber": 123,
"cronState": {
"lastFiredAt": 123,
"nextDueAt": 123
}
}{
"error": "<string>"
}{
"message": "Invalid API key."
}{
"error": "<string>"
}
