Menú

Webhooks

Eventos

Los eventos a los que se puede suscribir un webhook, con el sobre completo que recibe tu servidor. En modo «Solo IDs» (thin), data lleva solo los ids.

CRM

crm.lead.created

Entró un lead nuevo al CRM

Se dispara una vez por lead nuevo, entre por donde entre: una fuente de leads (webhook, formulario, anuncios de Meta, reserva), un primer mensaje de WhatsApp, la API o un prospecto creado a mano. Trae la persona y el prospecto o trato en que se convirtió, más la fuente. También se dispara con una persona que ya estaba en el CRM, cuando el lead le crea un prospecto o un trato nuevo. No se dispara cuando no se crea nada nuevo: el mismo lead otra vez, una fuente que descarta duplicados o un lead que va al prospecto o al trato que la persona ya tenía. Un mensaje o un comentario de redes de un perfil que ya está vinculado a una persona todavía no lo dispara; un trato creado a mano dispara crm.deal.created. Los leads que llegan por Google Ads, TikTok o LinkedIn (sus formularios y los mensajes de TikTok) no lo disparan: los términos de esas plataformas no dejan enviar sus datos a un webhook.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "crm.lead.created",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "person": {
      "id": "pe_4hT1",
      "first_name": "Mariana",
      "last_name": "López",
      "full_name": "Mariana López",
      "email": "mariana@clinicanorte.com",
      "emails": [
        "mariana@clinicanorte.com"
      ],
      "phone": "+5491155550123",
      "phones": [
        "+5491155550123"
      ],
      "job_title": "Directora de Marketing",
      "company_ids": [
        "co_2mN8"
      ],
      "primary_company_id": "co_2mN8",
      "company_name": "Clínica Norte",
      "owner_id": "u_7KpQ2",
      "label_ids": [],
      "custom_fields": {},
      "do_not_contact": false,
      "created_at": 1761996400000,
      "updated_at": 1762000000000
    },
    "prospect": {
      "id": "pr_9sD2",
      "title": "Mariana López — Clínica Norte",
      "status": "new",
      "person_id": "pe_4hT1",
      "company_id": "co_2mN8",
      "owner_id": "u_7KpQ2",
      "label_ids": [],
      "custom_fields": {},
      "created_at": 1762000000000,
      "updated_at": 1762000000000
    },
    "source": {
      "id": "ls_web_form",
      "name": "Formulario del sitio",
      "type": "generic"
    },
    "origin": "source",
    "actor": {
      "uid": "system:lead-ingestion",
      "name": "Formulario del sitio",
      "kind": "system"
    }
  }
}
crm.deal.created

Se creó un trato

Se dispara cuando se crea un trato a mano, por la API, al convertir un prospecto (desde la pantalla, la API o el setter de IA) o desde una fuente de leads que manda los leads directo a un pipeline. Trae el trato con los nombres de su pipeline y su etapa.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "crm.deal.created",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "deal": {
      "id": "dl_8f3kQ2mZpV0bT7xL1aR9",
      "title": "Rediseño del sitio — Clínica Norte",
      "value": 4800,
      "currency": "USD",
      "pipeline_id": "pp_default",
      "stage_id": "qualified",
      "status": "open",
      "owner_id": "u_7KpQ2",
      "owner_name": "Valentina Ríos",
      "company_id": "co_2mN8",
      "company_name": "Clínica Norte",
      "person_ids": [
        "pe_4hT1"
      ],
      "primary_person_id": "pe_4hT1",
      "primary_person_name": "Mariana López",
      "label_ids": [],
      "custom_fields": {
        "origen_campana": "google-ads-marzo"
      },
      "is_archived": false,
      "created_at": 1761913600000,
      "updated_at": 1762000000000
    },
    "pipeline": {
      "id": "pp_default",
      "name": "Ventas"
    },
    "stage": {
      "id": "qualified",
      "name": "Calificado"
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
crm.deal.stage_changed

Un trato cambió de etapa o de pipeline

Se dispara en cada cambio de etapa o de pipeline que pasa por el núcleo de tratos: la pantalla (uno por uno o en lote), la API, un paso de secuencia, ganar o reabrir un trato. previous trae la etapa y el pipeline de donde venía, con sus nombres. Los movimientos que escribe una fusión o la eliminación de una etapa no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "crm.deal.stage_changed",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "deal": {
      "id": "dl_8f3kQ2mZpV0bT7xL1aR9",
      "title": "Rediseño del sitio — Clínica Norte",
      "value": 4800,
      "currency": "USD",
      "pipeline_id": "pp_default",
      "stage_id": "proposal",
      "status": "open",
      "owner_id": "u_7KpQ2",
      "owner_name": "Valentina Ríos",
      "company_id": "co_2mN8",
      "company_name": "Clínica Norte",
      "person_ids": [
        "pe_4hT1"
      ],
      "primary_person_id": "pe_4hT1",
      "primary_person_name": "Mariana López",
      "label_ids": [],
      "custom_fields": {
        "origen_campana": "google-ads-marzo"
      },
      "is_archived": false,
      "created_at": 1761913600000,
      "updated_at": 1762000000000
    },
    "pipeline": {
      "id": "pp_default",
      "name": "Ventas"
    },
    "stage": {
      "id": "proposal",
      "name": "Propuesta"
    },
    "previous": {
      "pipeline": {
        "id": "pp_default",
        "name": "Ventas"
      },
      "stage": {
        "id": "qualified",
        "name": "Calificado"
      }
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
crm.deal.won

Un trato se marcó como ganado

Se dispara cuando el estado de un trato pasa a ganado. deal.won_at y deal.value son las cifras que cuenta Rendimiento.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "crm.deal.won",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "deal": {
      "id": "dl_8f3kQ2mZpV0bT7xL1aR9",
      "title": "Rediseño del sitio — Clínica Norte",
      "value": 4800,
      "currency": "USD",
      "pipeline_id": "pp_default",
      "stage_id": "qualified",
      "status": "won",
      "owner_id": "u_7KpQ2",
      "owner_name": "Valentina Ríos",
      "company_id": "co_2mN8",
      "company_name": "Clínica Norte",
      "person_ids": [
        "pe_4hT1"
      ],
      "primary_person_id": "pe_4hT1",
      "primary_person_name": "Mariana López",
      "label_ids": [],
      "custom_fields": {
        "origen_campana": "google-ads-marzo"
      },
      "is_archived": false,
      "created_at": 1761913600000,
      "updated_at": 1762000000000,
      "won_at": 1762000000000
    },
    "pipeline": {
      "id": "pp_default",
      "name": "Ventas"
    },
    "stage": {
      "id": "won",
      "name": "Ganado"
    },
    "previous_status": "open",
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
crm.deal.lost

Un trato se marcó como perdido

Se dispara cuando el estado de un trato pasa a perdido, con el motivo de pérdida si la persona eligió uno.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "crm.deal.lost",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "deal": {
      "id": "dl_8f3kQ2mZpV0bT7xL1aR9",
      "title": "Rediseño del sitio — Clínica Norte",
      "value": 4800,
      "currency": "USD",
      "pipeline_id": "pp_default",
      "stage_id": "qualified",
      "status": "lost",
      "owner_id": "u_7KpQ2",
      "owner_name": "Valentina Ríos",
      "company_id": "co_2mN8",
      "company_name": "Clínica Norte",
      "person_ids": [
        "pe_4hT1"
      ],
      "primary_person_id": "pe_4hT1",
      "primary_person_name": "Mariana López",
      "label_ids": [],
      "custom_fields": {
        "origen_campana": "google-ads-marzo"
      },
      "is_archived": false,
      "created_at": 1761913600000,
      "updated_at": 1762000000000,
      "lost_at": 1762000000000
    },
    "pipeline": {
      "id": "pp_default",
      "name": "Ventas"
    },
    "stage": {
      "id": "qualified",
      "name": "Calificado"
    },
    "previous_status": "open",
    "lost_reason": {
      "id": "price",
      "name": "Precio"
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
crm.deal.reopened

Se reabrió un trato cerrado

Se dispara cuando un trato ganado o perdido vuelve a abierto, desde la pantalla, la API o un agente. previous_status dice de qué estado cerrado venía.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "crm.deal.reopened",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "deal": {
      "id": "dl_8f3kQ2mZpV0bT7xL1aR9",
      "title": "Rediseño del sitio — Clínica Norte",
      "value": 4800,
      "currency": "USD",
      "pipeline_id": "pp_default",
      "stage_id": "qualified",
      "status": "open",
      "owner_id": "u_7KpQ2",
      "owner_name": "Valentina Ríos",
      "company_id": "co_2mN8",
      "company_name": "Clínica Norte",
      "person_ids": [
        "pe_4hT1"
      ],
      "primary_person_id": "pe_4hT1",
      "primary_person_name": "Mariana López",
      "label_ids": [],
      "custom_fields": {
        "origen_campana": "google-ads-marzo"
      },
      "is_archived": false,
      "created_at": 1761913600000,
      "updated_at": 1762000000000
    },
    "pipeline": {
      "id": "pp_default",
      "name": "Ventas"
    },
    "stage": {
      "id": "qualified",
      "name": "Calificado"
    },
    "previous_status": "lost",
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
crm.deal.archived

Un trato se archivó o se desarchivó

Se dispara cuando un trato se archiva (archived: true, sale de todos los agregados) o se desarchiva (archived: false) desde su ficha o por la API. Archivar es un estado del registro, no una eliminación. El archivado en cascada desde una persona o una empresa todavía no lo dispara.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "crm.deal.archived",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "deal": {
      "id": "dl_8f3kQ2mZpV0bT7xL1aR9",
      "title": "Rediseño del sitio — Clínica Norte",
      "value": 4800,
      "currency": "USD",
      "pipeline_id": "pp_default",
      "stage_id": "qualified",
      "status": "open",
      "owner_id": "u_7KpQ2",
      "owner_name": "Valentina Ríos",
      "company_id": "co_2mN8",
      "company_name": "Clínica Norte",
      "person_ids": [
        "pe_4hT1"
      ],
      "primary_person_id": "pe_4hT1",
      "primary_person_name": "Mariana López",
      "label_ids": [],
      "custom_fields": {
        "origen_campana": "google-ads-marzo"
      },
      "is_archived": true,
      "created_at": 1761913600000,
      "updated_at": 1762000000000
    },
    "pipeline": {
      "id": "pp_default",
      "name": "Ventas"
    },
    "stage": {
      "id": "qualified",
      "name": "Calificado"
    },
    "archived": true,
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
crm.deal.updated

Cambiaron campos de un trato

Se dispara en las ediciones de un trato que no son un cambio de ciclo de vida (título, valor, responsable, empresa, etiquetas, campos personalizados, cotización…). changed_fields lista los nombres públicos de los campos que cambiaron. Los cambios de etapa, ganar, perder, reabrir y archivar disparan su propio evento; los cambios de etiquetas o responsable en lote todavía no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "crm.deal.updated",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "deal": {
      "id": "dl_8f3kQ2mZpV0bT7xL1aR9",
      "title": "Rediseño del sitio — Clínica Norte",
      "value": 5200,
      "currency": "USD",
      "pipeline_id": "pp_default",
      "stage_id": "qualified",
      "status": "open",
      "owner_id": "u_7KpQ2",
      "owner_name": "Valentina Ríos",
      "company_id": "co_2mN8",
      "company_name": "Clínica Norte",
      "person_ids": [
        "pe_4hT1"
      ],
      "primary_person_id": "pe_4hT1",
      "primary_person_name": "Mariana López",
      "label_ids": [],
      "custom_fields": {
        "origen_campana": "google-ads-marzo"
      },
      "is_archived": false,
      "created_at": 1761913600000,
      "updated_at": 1762000000000
    },
    "changed_fields": [
      "value"
    ],
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
crm.deal.deleted

Se eliminó un trato

Se dispara cuando se elimina un trato, uno por uno o en lote. El trato es la última copia antes de eliminarlo; queda 30 días en la Papelera, donde un owner o admin puede restaurarlo. Eliminar con los registros vinculados (cascada) y las fusiones todavía no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "crm.deal.deleted",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "deal": {
      "id": "dl_8f3kQ2mZpV0bT7xL1aR9",
      "title": "Rediseño del sitio — Clínica Norte",
      "value": 4800,
      "currency": "USD",
      "pipeline_id": "pp_default",
      "stage_id": "qualified",
      "status": "open",
      "owner_id": "u_7KpQ2",
      "owner_name": "Valentina Ríos",
      "company_id": "co_2mN8",
      "company_name": "Clínica Norte",
      "person_ids": [
        "pe_4hT1"
      ],
      "primary_person_id": "pe_4hT1",
      "primary_person_name": "Mariana López",
      "label_ids": [],
      "custom_fields": {
        "origen_campana": "google-ads-marzo"
      },
      "is_archived": false,
      "created_at": 1761913600000,
      "updated_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
crm.person.created

Se creó una persona

Se dispara cuando se crea una persona desde la pantalla de Personas o por la API. Una persona creada por una fuente de leads llega dentro de crm.lead.created; las importaciones todavía no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "crm.person.created",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "person": {
      "id": "pe_4hT1",
      "first_name": "Mariana",
      "last_name": "López",
      "full_name": "Mariana López",
      "email": "mariana@clinicanorte.com",
      "emails": [
        "mariana@clinicanorte.com"
      ],
      "phone": "+5491155550123",
      "phones": [
        "+5491155550123"
      ],
      "job_title": "Directora de Marketing",
      "company_ids": [
        "co_2mN8"
      ],
      "primary_company_id": "co_2mN8",
      "company_name": "Clínica Norte",
      "owner_id": "u_7KpQ2",
      "label_ids": [],
      "custom_fields": {},
      "do_not_contact": false,
      "created_at": 1761996400000,
      "updated_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
crm.person.updated

Cambiaron campos de una persona

Se dispara en las ediciones de la ficha de una persona (nombre, emails, teléfonos, empresa, responsable, etiquetas, campos personalizados…). changed_fields lista los nombres públicos de los campos que cambiaron. Los cambios en lote, el «no contactar» y los vínculos con empresas todavía no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "crm.person.updated",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "person": {
      "id": "pe_4hT1",
      "first_name": "Mariana",
      "last_name": "López",
      "full_name": "Mariana López",
      "email": "mariana@clinicanorte.com",
      "emails": [
        "mariana@clinicanorte.com"
      ],
      "phone": "+5491155550123",
      "phones": [
        "+5491155550123"
      ],
      "job_title": "CMO",
      "company_ids": [
        "co_2mN8"
      ],
      "primary_company_id": "co_2mN8",
      "company_name": "Clínica Norte",
      "owner_id": "u_7KpQ2",
      "label_ids": [],
      "custom_fields": {},
      "do_not_contact": false,
      "created_at": 1761996400000,
      "updated_at": 1762000000000
    },
    "changed_fields": [
      "job_title"
    ],
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
crm.person.deleted

Se eliminó una persona

Se dispara cuando se elimina una persona, una por una o en lote. La persona es la última copia antes de eliminarla; queda 30 días en la Papelera. Eliminar con los registros vinculados (cascada) y las fusiones todavía no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "crm.person.deleted",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "person": {
      "id": "pe_4hT1",
      "first_name": "Mariana",
      "last_name": "López",
      "full_name": "Mariana López",
      "email": "mariana@clinicanorte.com",
      "emails": [
        "mariana@clinicanorte.com"
      ],
      "phone": "+5491155550123",
      "phones": [
        "+5491155550123"
      ],
      "job_title": "Directora de Marketing",
      "company_ids": [
        "co_2mN8"
      ],
      "primary_company_id": "co_2mN8",
      "company_name": "Clínica Norte",
      "owner_id": "u_7KpQ2",
      "label_ids": [],
      "custom_fields": {},
      "do_not_contact": false,
      "created_at": 1761996400000,
      "updated_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
crm.company.created

Se creó una empresa

Se dispara cuando se crea una empresa desde la pantalla de Empresas o por la API. Las empresas que crea una fuente de leads o una importación todavía no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "crm.company.created",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "company": {
      "id": "co_2mN8",
      "name": "Clínica Norte",
      "domain": "clinicanorte.com",
      "industry": "Salud",
      "website": "https://clinicanorte.com",
      "country": "AR",
      "owner_id": "u_7KpQ2",
      "label_ids": [],
      "custom_fields": {},
      "created_at": 1761992800000,
      "updated_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
crm.company.updated

Cambiaron campos de una empresa

Se dispara en las ediciones de la ficha de una empresa. changed_fields lista los nombres públicos de los campos que cambiaron. Los cambios en lote todavía no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "crm.company.updated",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "company": {
      "id": "co_2mN8",
      "name": "Clínica Norte",
      "domain": "clinicanorte.com",
      "industry": "Salud privada",
      "website": "https://clinicanorte.com",
      "country": "AR",
      "owner_id": "u_7KpQ2",
      "label_ids": [],
      "custom_fields": {},
      "created_at": 1761992800000,
      "updated_at": 1762000000000
    },
    "changed_fields": [
      "industry"
    ],
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
crm.company.deleted

Se eliminó una empresa

Se dispara cuando se elimina una empresa, una por una o en lote. La empresa es la última copia antes de eliminarla; queda 30 días en la Papelera. Eliminar con los registros vinculados (cascada) y las fusiones todavía no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "crm.company.deleted",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "company": {
      "id": "co_2mN8",
      "name": "Clínica Norte",
      "domain": "clinicanorte.com",
      "industry": "Salud",
      "website": "https://clinicanorte.com",
      "country": "AR",
      "owner_id": "u_7KpQ2",
      "label_ids": [],
      "custom_fields": {},
      "created_at": 1761992800000,
      "updated_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
crm.activity.created

Se creó una actividad

Se dispara cuando se crea una nota, tarea, llamada, reunión o respuesta en un trato, persona, empresa o prospecto desde la pantalla o la API. Los emails sincronizados de un buzón, los mensajes de WhatsApp o redes y las actividades que escriben las secuencias, el marcador o el equipo de IA todavía no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "crm.activity.created",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "activity": {
      "id": "ac_1pL6",
      "type": "note",
      "subject": "Llamada de descubrimiento",
      "content_plain_text": "Quieren lanzar el sitio nuevo antes de junio.",
      "deal_ids": [
        "dl_8f3kQ2mZpV0bT7xL1aR9"
      ],
      "person_ids": [
        "pe_4hT1"
      ],
      "company_ids": [],
      "prospect_ids": [],
      "owner_id": "u_7KpQ2",
      "created_at": 1762000000000,
      "updated_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}

Plataforma

job.completed

Terminó un trabajo en segundo plano

Se dispara una vez cuando termina una exportación o una importación iniciada por la API o el MCP (crm.exports.create, crm.imports.create), o una importación del asistente de CSV de la app (también figura como crm.imports.create): con estado done, o failed con su error.code. Trae el trabajo con su tipo, su progreso y los contadores del resultado (filas exportadas; personas, tratos y empresas que creó una importación), pero nunca el enlace de descarga: pide el trabajo con GET /v1/jobs/{job_id} para obtener un enlace firmado nuevo. Los trabajos y sus archivos se guardan 7 días.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "job.completed",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "job": {
      "id": "job_0q3x9k2a1Bc4De5Fg6Hi7Jk",
      "type": "export",
      "operation_id": "crm.exports.create",
      "status": "done",
      "progress": {
        "done": 1250,
        "total": 1250
      },
      "result": {
        "count": 1250,
        "file_name": "crm-deals-2026-11-03.csv",
        "content_type": "text/csv",
        "bytes": 412233,
        "expires_at": 1762604800000
      },
      "created_at": 1761999960000,
      "finished_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}

Monitors

monitors.monitor.assigned

Se asignó un monitor a una plataforma

Se dispara cuando una pestaña de plataforma de la página Monitors de la organización recibe un monitor o cambia a otro: desde la pantalla, la API o el MCP. Trae la plataforma, la plantilla de monitor (propia, heredada del workspace o del sistema) y la que reemplazó, si había una. Volver a asignar el mismo monitor no lo dispara.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "monitors.monitor.assigned",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "assignment": {
      "platform_id": "google_ads",
      "template": {
        "id": "mon_8Hq2LmXo1",
        "title": "Google Ads Leads",
        "source": "SYSTEM",
        "source_org_id": null
      },
      "previous_template_id": null,
      "assigned_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
monitors.monitor.unassigned

Se quitó el monitor de una plataforma

Se dispara cuando se quita el monitor de una pestaña de plataforma (la pestaña vuelve al selector de monitores). Trae la plataforma y la plantilla que estaba asignada. Quitarlo de una pestaña sin monitor no lo dispara.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "monitors.monitor.unassigned",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "assignment": {
      "platform_id": "meta_ads",
      "template_id": "mon_3Fk9QpZr7",
      "template_title": "Meta Ads Leads",
      "unassigned_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
monitors.template.published

Se publicó una plantilla de monitor

Se dispara cuando una plantilla de monitor de la organización pasa de borrador a publicada (volverla a borrador no lo dispara): desde entonces se puede asignar a la pestaña de su plataforma y, si es de un workspace, sus cuentas pueden usarla como monitor heredado. Trae la plantilla con su plataforma y sus conteos.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "monitors.template.published",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "template": {
      "id": "mon_Agency01",
      "title": "Google Ads — revisión diaria",
      "description": null,
      "platform": "google_ads",
      "supported_platforms": [
        "google_ads"
      ],
      "page_count": 1,
      "widget_count": 9,
      "published_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}

Dashboards

dashboards.dashboard.created

Se creó un dashboard

Se dispara cuando se crea un dashboard desde una plantilla: desde la pantalla, la API, el MCP o un despliegue en lote desde el workspace (un evento por cuenta, en esa cuenta). Trae el dashboard con la referencia a su plantilla y sus plataformas; no incluye los datos de los widgets.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "dashboards.dashboard.created",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "dashboard": {
      "id": "dash_8Hq2LmXo1",
      "title": "Performance mensual — Google Ads",
      "description": "Inversión, conversiones y CPA por campaña.",
      "kind": "linked",
      "template": {
        "id": "tpl_GA01",
        "source": "SYSTEM"
      },
      "platforms": [
        "google_ads"
      ],
      "created_at": 1762000000000,
      "created_by": "u_7KpQ2"
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
dashboards.dashboard.deleted

Se eliminó un dashboard

Se dispara cuando se elimina un dashboard (queda 30 días en la Papelera y se puede restaurar). Trae su id, su título y su tipo.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "dashboards.dashboard.deleted",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "dashboard": {
      "id": "dash_8Hq2LmXo1",
      "title": "Performance mensual — Google Ads",
      "kind": "linked",
      "deleted_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
dashboards.dashboard.exported

Se exportó un dashboard a PDF

Se dispara cuando se exporta un dashboard a PDF, desde la pantalla o la API. Trae el dashboard y el nombre, el tamaño y el vencimiento del archivo. El enlace de descarga NO viene incluido (es un enlace al portador): solo lo recibe quien exportó.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "dashboards.dashboard.exported",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "dashboard": {
      "id": "dash_8Hq2LmXo1",
      "title": "Performance mensual — Google Ads"
    },
    "file": {
      "name": "Performance mensual  Google Ads.pdf",
      "size_bytes": 482311,
      "format": "pdf",
      "expires_at": 1762086400000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
dashboards.template.published

Se publicó una plantilla de dashboard

Se dispara cuando una plantilla de dashboard de la organización pasa de borrador a publicada (volverla a borrador no lo dispara). Las plantillas publicadas de un workspace se ofrecen a sus cuentas y al despliegue en lote. Trae la plantilla con sus espacios para fuentes de datos y sus conteos.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "dashboards.template.published",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "template": {
      "id": "tpl_Agency01",
      "title": "Reporte mensual de la agencia",
      "description": null,
      "supported_platforms": [
        "google_ads",
        "meta_ads"
      ],
      "data_source_slots": [
        {
          "id": "slot_google_ads",
          "name": "Google Ads",
          "platform": "google_ads"
        },
        {
          "id": "slot_meta_ads",
          "name": "Meta Ads",
          "platform": "meta_ads"
        }
      ],
      "page_count": 2,
      "widget_count": 14,
      "published_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}

Reports

reports.instance.generated

Se generó una instancia de reporte desde una plantilla

Se dispara cuando se crea una instancia de reporte desde una plantilla: desde la pantalla de Reportes, por la API o el MCP (reports.instances.generate) o por un envío recurrente que congela una instancia nueva según su programación. La instancia es un borrador hasta que se exporta su PDF. Las instancias en blanco (reports.instances.create) y los duplicados no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "reports.instance.generated",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "instance": {
      "id": "Rk3VYq8mZ1wTn5Hc2aLp",
      "title": "Google Ads — Leads",
      "status": "draft",
      "target_org_id": "PRVPFY1iy0AzAe3eF7DZ",
      "target_org_name": "Nissan Capital",
      "template": {
        "id": "tpl_google_ads_leads",
        "source": "SYSTEM",
        "title": "Google Ads — Leads"
      },
      "date_range": {
        "preset": "last_month",
        "label": "1 sep – 30 sep 2026"
      },
      "created_from_delivery": false,
      "ai_block_count": 2,
      "ai_blocks_generated": 2,
      "published_to_portal": false,
      "has_pdf": false,
      "created_by": "u_7KpQ2",
      "created_at": 1762000000000,
      "updated_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
reports.instance.finalized

Se finalizó una instancia de reporte (quedó bloqueada)

Se dispara cuando una instancia de reporte en borrador pasa a final y de solo lectura: cuando se genera su primer PDF (reports.instances.export_pdf o la pantalla) o cuando se finaliza de forma explícita (reports.instances.finalize). Las instancias que se finalizan al mandar un envío (manual o programado) todavía no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "reports.instance.finalized",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "instance": {
      "id": "Rk3VYq8mZ1wTn5Hc2aLp",
      "title": "Google Ads — Leads",
      "status": "finalized",
      "target_org_id": "PRVPFY1iy0AzAe3eF7DZ",
      "target_org_name": "Nissan Capital",
      "template": {
        "id": "tpl_google_ads_leads",
        "source": "SYSTEM",
        "title": "Google Ads — Leads"
      },
      "date_range": {
        "preset": "last_month",
        "label": "1 sep – 30 sep 2026"
      },
      "created_from_delivery": false,
      "ai_block_count": 2,
      "ai_blocks_generated": 2,
      "published_to_portal": false,
      "has_pdf": true,
      "created_by": "u_7KpQ2",
      "created_at": 1762000000000,
      "updated_at": 1762000000000
    },
    "finalized_at": 1762000000000,
    "finalized_by": "u_7KpQ2",
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
reports.instance.published

Se publicó un reporte finalizado en el portal de clientes de la cuenta

Se dispara cuando una instancia de reporte finalizada de una cuenta se publica en el Client Portal de esa cuenta, desde la pantalla o con reports.instances.publish_to_portal. Despublicarla no dispara ningún evento.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "reports.instance.published",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "instance": {
      "id": "Rk3VYq8mZ1wTn5Hc2aLp",
      "title": "Google Ads — Leads",
      "status": "finalized",
      "target_org_id": "PRVPFY1iy0AzAe3eF7DZ",
      "target_org_name": "Nissan Capital",
      "template": {
        "id": "tpl_google_ads_leads",
        "source": "SYSTEM",
        "title": "Google Ads — Leads"
      },
      "date_range": {
        "preset": "last_month",
        "label": "1 sep – 30 sep 2026"
      },
      "created_from_delivery": false,
      "ai_block_count": 2,
      "ai_blocks_generated": 2,
      "published_to_portal": true,
      "has_pdf": true,
      "created_by": "u_7KpQ2",
      "created_at": 1762000000000,
      "updated_at": 1762000000000
    },
    "published_at": 1762000000000,
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
reports.pdf.ready

El PDF de una instancia de reporte está listo

Se dispara cuando termina el trabajo en segundo plano que inicia reports.instances.export_pdf (o «Generar PDF» en la pantalla) y el archivo queda guardado. El payload no trae el archivo: descárgalo con reports.instances.pdf_url, que devuelve un enlace firmado de corta duración. Los PDF ad hoc y los PDF adjuntos a envíos no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "reports.pdf.ready",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "instance": {
      "id": "Rk3VYq8mZ1wTn5Hc2aLp",
      "title": "Google Ads — Leads",
      "status": "finalized",
      "target_org_id": "PRVPFY1iy0AzAe3eF7DZ",
      "target_org_name": "Nissan Capital",
      "template": {
        "id": "tpl_google_ads_leads",
        "source": "SYSTEM",
        "title": "Google Ads — Leads"
      },
      "date_range": {
        "preset": "last_month",
        "label": "1 sep – 30 sep 2026"
      },
      "created_from_delivery": false,
      "ai_block_count": 2,
      "ai_blocks_generated": 2,
      "published_to_portal": false,
      "has_pdf": true,
      "created_by": "u_7KpQ2",
      "created_at": 1762000000000,
      "updated_at": 1762000000000
    },
    "pdf": {
      "generated_at": 1762000000000,
      "file_name": "Google Ads — Leads.pdf"
    },
    "requested_by": "u_7KpQ2",
    "actor": {
      "uid": "system:report-pdf",
      "name": "MB Suite",
      "kind": "system"
    }
  }
}
reports.pdf.failed

No se pudo generar el PDF de una instancia de reporte

Se dispara cuando el trabajo en segundo plano que genera el PDF de una instancia de reporte falla (el servicio de renderizado devolvió un error) o se abandona tras cinco minutos sin terminar. La instancia queda como estaba; vuelve a ejecutar reports.instances.export_pdf para reintentar.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "reports.pdf.failed",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "instance": {
      "id": "Rk3VYq8mZ1wTn5Hc2aLp",
      "title": "Google Ads — Leads",
      "target_org_id": "PRVPFY1iy0AzAe3eF7DZ"
    },
    "error": {
      "message": "La generación del PDF tardó demasiado. Intenta de nuevo."
    },
    "requested_by": "u_7KpQ2",
    "actor": {
      "uid": "system:report-pdf",
      "name": "MB Suite",
      "kind": "system"
    }
  }
}
reports.template.published

Se publicó una plantilla de reporte de la organización

Se dispara cuando una plantilla de reporte de la organización pasa de borrador a publicada (desde la lista de plantillas, el editor de plantillas o reports.templates.publish). Las plantillas publicadas son las que sus cuentas ven como heredadas y las que se ofrecen al generar un reporte. Las plantillas que nacen publicadas con «Guardar como plantilla» no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "reports.template.published",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "template": {
      "id": "tpl_8sYw2",
      "title": "Monthly performance",
      "description": "Paid media and web analytics for the monthly client review.",
      "status": "published",
      "version": 7,
      "supported_platforms": [
        "google_ads",
        "meta_ads",
        "google_analytics"
      ],
      "data_source_slots": [
        {
          "id": "ds_1",
          "name": "google_ads ds_1",
          "platform": "google_ads"
        }
      ],
      "updated_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}

Alertas

alerts.alert.created

Se creó una alerta de métrica

Se dispara cuando se crea una alerta, desde la pantalla de Alertas, la API, el MCP o MIA. Trae la alerta tal como se guardó (condición, organización vigilada, cuenta de la plataforma, métrica, ids de los destinatarios, cooldown). Los emails de los destinatarios nunca viajan en los webhooks: lee la alerta con alerts.alerts.get si los necesitas.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "alerts.alert.created",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "alert": {
      "id": "al_8Hq2LmZpV0bT7xL1aR9c",
      "name": "Avg. CPC +20% Google Ads - Clínica Norte",
      "target_org_id": "org_Cl1n1c4N0rt3",
      "target_org_name": "Clínica Norte",
      "platform": "google_ads",
      "account_id": "1234567890",
      "account_name": "Clínica Norte — Search",
      "metric": "cpc",
      "metric_label": "Avg. CPC",
      "metric_format": "currency",
      "condition": {
        "operator": "increased_by",
        "threshold": 20,
        "threshold_type": "percentage",
        "period": "7d",
        "comparison": "vs_previous_period"
      },
      "recipients": [
        "u_7KpQ2",
        "u_3bTz8"
      ],
      "cooldown_hours": 24,
      "enabled": true,
      "template_id": "gads_cpc_increase",
      "last_evaluated_at": 1761996400000,
      "last_triggered_at": null,
      "last_value": 1.42,
      "last_delta": 6.3,
      "consecutive_errors": 0,
      "last_error": null,
      "created_at": 1761395200000,
      "created_by_id": "u_7KpQ2",
      "updated_at": 1761996400000,
      "updated_by_id": "u_7KpQ2"
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
alerts.alert.updated

Cambió una alerta de métrica

Se dispara cuando una alerta se edita, se activa o se desactiva, desde la pantalla, la API, el MCP o MIA. changed_fields lista los nombres públicos de lo que cambió (por ejemplo enabled, condition, recipients). Guardar sin cambios no lo dispara. Tampoco lo dispara la evaluación de cada hora cuando actualiza last_value o last_evaluated_at (mira alerts.alert.triggered y alerts.alert.auto_disabled).

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "alerts.alert.updated",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "alert": {
      "id": "al_8Hq2LmZpV0bT7xL1aR9c",
      "name": "Avg. CPC +20% Google Ads - Clínica Norte",
      "target_org_id": "org_Cl1n1c4N0rt3",
      "target_org_name": "Clínica Norte",
      "platform": "google_ads",
      "account_id": "1234567890",
      "account_name": "Clínica Norte — Search",
      "metric": "cpc",
      "metric_label": "Avg. CPC",
      "metric_format": "currency",
      "condition": {
        "operator": "increased_by",
        "threshold": 30,
        "threshold_type": "percentage",
        "period": "7d",
        "comparison": "vs_previous_period"
      },
      "recipients": [
        "u_7KpQ2",
        "u_3bTz8"
      ],
      "cooldown_hours": 24,
      "enabled": true,
      "template_id": "gads_cpc_increase",
      "last_evaluated_at": 1761996400000,
      "last_triggered_at": null,
      "last_value": 1.42,
      "last_delta": 6.3,
      "consecutive_errors": 0,
      "last_error": null,
      "created_at": 1761395200000,
      "created_by_id": "u_7KpQ2",
      "updated_at": 1761996400000,
      "updated_by_id": "u_7KpQ2"
    },
    "changed_fields": [
      "condition"
    ],
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
alerts.alert.deleted

Se eliminó una alerta de métrica

Se dispara cuando se elimina una alerta, desde la pantalla, la API, el MCP o MIA. La alerta es la última copia antes de eliminarla; queda 30 días en la Papelera y su historial de disparos se conserva.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "alerts.alert.deleted",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "alert": {
      "id": "al_8Hq2LmZpV0bT7xL1aR9c",
      "name": "Avg. CPC +20% Google Ads - Clínica Norte",
      "target_org_id": "org_Cl1n1c4N0rt3",
      "target_org_name": "Clínica Norte",
      "platform": "google_ads",
      "account_id": "1234567890",
      "account_name": "Clínica Norte — Search",
      "metric": "cpc",
      "metric_label": "Avg. CPC",
      "metric_format": "currency",
      "condition": {
        "operator": "increased_by",
        "threshold": 20,
        "threshold_type": "percentage",
        "period": "7d",
        "comparison": "vs_previous_period"
      },
      "recipients": [
        "u_7KpQ2",
        "u_3bTz8"
      ],
      "cooldown_hours": 24,
      "enabled": true,
      "template_id": "gads_cpc_increase",
      "last_evaluated_at": 1761996400000,
      "last_triggered_at": null,
      "last_value": 1.42,
      "last_delta": 6.3,
      "consecutive_errors": 0,
      "last_error": null,
      "created_at": 1761395200000,
      "created_by_id": "u_7KpQ2",
      "updated_at": 1761996400000,
      "updated_by_id": "u_7KpQ2"
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
alerts.alert.triggered

Se disparó una alerta de métrica

Se dispara cuando la evaluación de cada hora encuentra que se cumple la condición de una alerta, una vez por disparo (después la alerta espera sus cooldown_hours). Trae la alerta con su estado nuevo, la evaluación (current_value, previous_value, delta_absolute, delta_percent, severity info/warning/critical, los rangos de fechas comparados en formato YYYY-MM-DD, evaluated_at) y history_entry_id, la entrada en alerts.history.list. Los emails a los destinatarios salen en la misma ejecución. El actor es el sistema (system:cron-alerts).

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "alerts.alert.triggered",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "alert": {
      "id": "al_8Hq2LmZpV0bT7xL1aR9c",
      "name": "Avg. CPC +20% Google Ads - Clínica Norte",
      "target_org_id": "org_Cl1n1c4N0rt3",
      "target_org_name": "Clínica Norte",
      "platform": "google_ads",
      "account_id": "1234567890",
      "account_name": "Clínica Norte — Search",
      "metric": "cpc",
      "metric_label": "Avg. CPC",
      "metric_format": "currency",
      "condition": {
        "operator": "increased_by",
        "threshold": 20,
        "threshold_type": "percentage",
        "period": "7d",
        "comparison": "vs_previous_period"
      },
      "recipients": [
        "u_7KpQ2",
        "u_3bTz8"
      ],
      "cooldown_hours": 24,
      "enabled": true,
      "template_id": "gads_cpc_increase",
      "last_evaluated_at": 1762000000000,
      "last_triggered_at": 1762000000000,
      "last_value": 1.81,
      "last_delta": 27.5,
      "consecutive_errors": 0,
      "last_error": null,
      "created_at": 1761395200000,
      "created_by_id": "u_7KpQ2",
      "updated_at": 1761996400000,
      "updated_by_id": "u_7KpQ2"
    },
    "evaluation": {
      "current_value": 1.81,
      "previous_value": 1.42,
      "delta_absolute": 0.39,
      "delta_percent": 27.5,
      "severity": "info",
      "date_range": {
        "current": {
          "from": "2026-10-26",
          "to": "2026-11-01"
        },
        "previous": {
          "from": "2026-10-19",
          "to": "2026-10-25"
        }
      },
      "evaluated_at": 1762000000000
    },
    "history_entry_id": "ah_4Rk9TzQ1mW7pL2xV5nYc",
    "actor": {
      "uid": "system:cron-alerts",
      "name": "Sistema de Alertas",
      "kind": "system"
    }
  }
}
alerts.alert.auto_disabled

Una alerta de métrica se desactivó tras errores repetidos

Se dispara cuando la evaluación de cada hora desactiva una alerta tras 5 evaluaciones fallidas seguidas (la conexión con la plataforma venció, la cuenta perdió el acceso, la métrica no está disponible). Trae la alerta (enabled false), consecutive_errors y last_error. Vuelve a activarla con alerts.alerts.toggle cuando la conexión esté arreglada. El actor es el sistema (system:cron-alerts).

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "alerts.alert.auto_disabled",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "alert": {
      "id": "al_8Hq2LmZpV0bT7xL1aR9c",
      "name": "Avg. CPC +20% Google Ads - Clínica Norte",
      "target_org_id": "org_Cl1n1c4N0rt3",
      "target_org_name": "Clínica Norte",
      "platform": "google_ads",
      "account_id": "1234567890",
      "account_name": "Clínica Norte — Search",
      "metric": "cpc",
      "metric_label": "Avg. CPC",
      "metric_format": "currency",
      "condition": {
        "operator": "increased_by",
        "threshold": 20,
        "threshold_type": "percentage",
        "period": "7d",
        "comparison": "vs_previous_period"
      },
      "recipients": [
        "u_7KpQ2",
        "u_3bTz8"
      ],
      "cooldown_hours": 24,
      "enabled": false,
      "template_id": "gads_cpc_increase",
      "last_evaluated_at": 1761996400000,
      "last_triggered_at": null,
      "last_value": 1.42,
      "last_delta": 6.3,
      "consecutive_errors": 5,
      "last_error": "Sin acceso a la cuenta 1234567890",
      "created_at": 1761395200000,
      "created_by_id": "u_7KpQ2",
      "updated_at": 1761996400000,
      "updated_by_id": "u_7KpQ2"
    },
    "consecutive_errors": 5,
    "last_error": "Sin acceso a la cuenta 1234567890",
    "actor": {
      "uid": "system:cron-alerts",
      "name": "Sistema de Alertas",
      "kind": "system"
    }
  }
}

Envíos

deliveries.delivery.sent

Salió el email de un envío

Se dispara cada vez que Amazon SES acepta el email de un envío y queda registrado en su historial de envíos: un envío manual (deliveries.deliveries.send_now, desde la pantalla, la API o un agente; actor = quien lo mandó) o uno programado (actor = el programador de envíos, kind system). Trae el envío (cuenta destino, tipo y asunto tal como está configurado: uno recurrente puede contener {{periodo}}) y su registro en el historial: cuándo salió, qué lo disparó, los destinatarios (To), el período de los datos, los PDF de los reportes con enlaces de descarga firmados válidos por 7 días y los enlaces a los dashboards. Si los PDF de los reportes no se pudieron generar, se dispara igual, con menos PDF.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "deliveries.delivery.sent",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "delivery": {
      "id": "Qm4xT8vRk2LpZ7nWc1Yd",
      "target_org_id": "aB3dE9fGh1JkL2mN4pQr",
      "target_org_name": "Clínica Norte",
      "delivery_type": "report",
      "email_mode": "compose",
      "subject": "Reporte mensual — {{periodo}}",
      "schedule_type": "recurring",
      "platforms": [
        "google_analytics",
        "meta_ads"
      ]
    },
    "send": {
      "id": "s7HkP2qWx9ZtR4mN8vBc",
      "sent_at": 1762000000000,
      "trigger": "scheduled",
      "status": "sent",
      "recipients": [
        "gerencia@clinicanorte.com",
        "marketing@clinicanorte.com"
      ],
      "date_range": {
        "from": "2026-09-01",
        "to": "2026-09-30"
      },
      "pdfs": [
        {
          "template_id": "tpl_8sK2mQ",
          "title": "Performance mensual",
          "version": 4,
          "url": "https://files.mb-suite.com/exports/deliveries/aB3dE9fGh1JkL2mN4pQr/2f6c….pdf?X-Amz-Signature=…"
        }
      ],
      "dashboards": [
        {
          "dashboard_id": "db_3Lp9Xw",
          "title": "Google Ads — Resumen",
          "url": "https://clinicanorte.portal.mb-suite.com/analytics/dashboards/db_3Lp9Xw?from=2026-09-01&to=2026-09-30"
        }
      ],
      "errors": []
    },
    "actor": {
      "uid": "system:deliveries-scheduler",
      "name": "Delivery scheduler",
      "kind": "system"
    }
  }
}
deliveries.delivery.failed

No se pudo mandar el email de un envío

Se dispara cuando un intento de envío queda registrado en su historial como fallido: Amazon SES rechazó el email (send.errors dice por qué). Tiene la misma forma que deliveries.delivery.sent. Un envío programado conserva su programación (uno recurrente reintenta en su próxima ejecución; uno único queda fallido). Un intento que se cortó antes de llegar al historial no lo dispara.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "deliveries.delivery.failed",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "delivery": {
      "id": "Qm4xT8vRk2LpZ7nWc1Yd",
      "target_org_id": "aB3dE9fGh1JkL2mN4pQr",
      "target_org_name": "Clínica Norte",
      "delivery_type": "report",
      "email_mode": "compose",
      "subject": "Reporte mensual — {{periodo}}",
      "schedule_type": "recurring",
      "platforms": [
        "google_analytics",
        "meta_ads"
      ]
    },
    "send": {
      "id": "s7HkP2qWx9ZtR4mN8vBc",
      "sent_at": 1762000000000,
      "trigger": "scheduled",
      "status": "failed",
      "recipients": [
        "gerencia@clinicanorte.com",
        "marketing@clinicanorte.com"
      ],
      "date_range": {
        "from": "2026-09-01",
        "to": "2026-09-30"
      },
      "pdfs": [],
      "dashboards": [],
      "errors": [
        {
          "recipient": "gerencia@clinicanorte.com, marketing@clinicanorte.com",
          "error": "Email address is not verified."
        }
      ]
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
deliveries.delivery.scheduled

Se programó un envío

Se dispara cuando un envío se programa o se reprograma (deliveries.deliveries.schedule, o al crearlo con programación): one_shot en una fecha (send_at) o recurrente (frecuencia, día, hora, zona horaria), con next_run_at, la primera vez que el programador lo va a mandar.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "deliveries.delivery.scheduled",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "delivery": {
      "id": "Qm4xT8vRk2LpZ7nWc1Yd",
      "target_org_id": "aB3dE9fGh1JkL2mN4pQr",
      "target_org_name": "Clínica Norte",
      "delivery_type": "report",
      "email_mode": "compose",
      "subject": "Reporte mensual — {{periodo}}",
      "schedule_type": "recurring",
      "platforms": [
        "google_analytics",
        "meta_ads"
      ]
    },
    "schedule": {
      "type": "recurring",
      "send_at": null,
      "frequency": "monthly",
      "day_of_week": null,
      "day_of_month": 1,
      "hour": 9,
      "minute": 0,
      "timezone": "America/Argentina/Buenos_Aires",
      "next_run_at": 1763814400000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
deliveries.delivery.schedule_cancelled

Se canceló la programación de un envío

Se dispara cuando se cancela la programación de un envío programado o recurrente (deliveries.deliveries.cancel_schedule): no hay más envíos automáticos y el envío vuelve a borrador. previous_schedule es la programación que tenía. Eliminar un envío programado no lo dispara.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "deliveries.delivery.schedule_cancelled",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "delivery": {
      "id": "Qm4xT8vRk2LpZ7nWc1Yd",
      "target_org_id": "aB3dE9fGh1JkL2mN4pQr",
      "target_org_name": "Clínica Norte",
      "delivery_type": "report",
      "email_mode": "compose",
      "subject": "Reporte mensual — {{periodo}}",
      "schedule_type": null,
      "platforms": [
        "google_analytics",
        "meta_ads"
      ]
    },
    "previous_schedule": {
      "type": "recurring",
      "send_at": null,
      "frequency": "monthly",
      "day_of_week": null,
      "day_of_month": 1,
      "hour": 9,
      "minute": 0,
      "timezone": "America/Argentina/Buenos_Aires",
      "next_run_at": 1763814400000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}

Phones

crm_phones.line.purchased

Se compró un número de teléfono

Se dispara cuando la organización compra un número de teléfono en la pantalla de Phones, una vez cobrado y listo para usar: la línea con su número, país, tipo, capacidades, destino (crm por defecto; después se puede mover a otro destino), precio mensual de lista y quién lo paga. Los números solo se compran en la pantalla; los que configura el equipo de MB Suite para uso interno no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "crm_phones.line.purchased",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "line": {
      "id": "PN3f2b8c0e9a1d4f6b7c8d9e0f1a2b3c4d",
      "phone_number": "+541152630190",
      "friendly_name": "Ventas Buenos Aires",
      "country_iso": "AR",
      "type": "local",
      "capabilities": [
        "voice",
        "sms"
      ],
      "status": "active",
      "destination": "crm",
      "monthly_cost_usd_cents": 1200,
      "billing_mode": "own_subscription",
      "purchased_at": 1762000000000,
      "cancel_at": null,
      "release_scheduled_at": null,
      "inbound_receivers": [],
      "inbound_timeout_sec": 30,
      "voicemail_enabled": true,
      "voicemail_greeting": null,
      "recording_enabled": false,
      "recording_enabled_at": null,
      "recording_notice_ack_version": null,
      "whatsapp_locked": false,
      "whatsapp_phone_number_id": null,
      "sort_order": null,
      "created_by_id": "u_7KpQ2",
      "created_at": 1762000000000,
      "updated_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
crm_phones.sms.sent

Se mandó un SMS desde una línea

Se dispara cuando sale un SMS de una de las líneas de la organización, desde la pantalla, la API o un agente (crm_phones.sms.send): el mensaje guardado (cuerpo, from, to, segmentos, la persona del CRM con ese número, quién lo mandó, cuánto le costó al saldo de Phones) y la línea. status es el primero que informó la red (en general queued o sent); las confirmaciones de entrega no disparan otro evento. Un mensaje que la red rechazó no se guarda y no lo dispara.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "crm_phones.sms.sent",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "message": {
      "id": "SM8a1c3e5f7b9d2f4a6c8e0b1d3f5a7c9e",
      "line_id": "PN3f2b8c0e9a1d4f6b7c8d9e0f1a2b3c4d",
      "line_phone_number": "+13055550142",
      "direction": "outbound",
      "from": "+13055550142",
      "to": "+13055550187",
      "body": "Hola Mariana, te confirmo la visita del jueves a las 10. ¡Gracias!",
      "num_segments": 1,
      "status": "queued",
      "error_code": null,
      "error_message": null,
      "person_id": "pe_4hT1",
      "sent_by_user_id": "u_7KpQ2",
      "client_cost_cents": 2,
      "created_at": 1762000000000,
      "updated_at": 1762000000000
    },
    "line": {
      "id": "PN3f2b8c0e9a1d4f6b7c8d9e0f1a2b3c4d",
      "phone_number": "+13055550142"
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
crm_phones.sms.received

Llegó un SMS a una línea

Se dispara una vez por cada SMS que llega a una de las líneas de la organización, después de guardarlo: el cuerpo, quién lo mandó (from), la línea a la que llegó (to), los segmentos, la persona del CRM con ese número (person_id, cuando hay una) y cuánto le costó recibirlo al saldo de Phones. Los mensajes a una organización con la cuenta bloqueada por facturación se descartan y no lo disparan. Los códigos de verificación de un solo uso nunca llegan (la red telefónica los filtra).

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "crm_phones.sms.received",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "message": {
      "id": "SM2b4d6f8a0c1e3a5c7e9b0d2f4a6c8e1b",
      "line_id": "PN3f2b8c0e9a1d4f6b7c8d9e0f1a2b3c4d",
      "line_phone_number": "+13055550142",
      "direction": "inbound",
      "from": "+13055550187",
      "to": "+13055550142",
      "body": "Perfecto, nos vemos el jueves.",
      "num_segments": 1,
      "status": "received",
      "error_code": null,
      "error_message": null,
      "person_id": "pe_4hT1",
      "sent_by_user_id": null,
      "client_cost_cents": 1,
      "created_at": 1762000000000,
      "updated_at": 1762000000000
    },
    "line": {
      "id": "PN3f2b8c0e9a1d4f6b7c8d9e0f1a2b3c4d",
      "phone_number": "+13055550142"
    },
    "actor": {
      "uid": "system:phones",
      "name": "Phones",
      "kind": "system"
    }
  }
}
crm_phones.wallet.recharged

Se recargó el saldo de Phones

Se dispara cuando una recarga del saldo de Phones (el saldo prepago que paga las llamadas y los SMS) se cobra y se acredita: a mano desde la pantalla o por recarga automática (transaction.auto_recharge). Trae el saldo nuevo, el anterior y la transacción (monto en centavos de USD, número de factura). Una recarga cuyo cobro falla no lo dispara, ni tampoco los créditos o reembolsos que hace el soporte de MB Suite.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "crm_phones.wallet.recharged",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "wallet": {
      "balance_cents": 5420,
      "previous_balance_cents": 420,
      "auto_recharge_enabled": true
    },
    "transaction": {
      "id": "topup_inv_in_1Q2w3E4r5T6y7U8i",
      "type": "topup",
      "amount_cents": 5000,
      "description": "Recarga automática",
      "auto_recharge": true,
      "invoice_number": "F6OXNXBO-0003",
      "created_at": 1762000000000
    },
    "actor": {
      "uid": "system:phones",
      "name": "Phones",
      "kind": "system"
    }
  }
}
crm_phones.wallet.low_balance

El saldo de Phones bajó de su mínimo

Se dispara cuando un cargo (una llamada, un SMS, una línea o un ajuste de soporte) lleva el saldo de Phones de estar en su mínimo o por encima a quedar por debajo: el umbral de recarga automática si está activa, o USD 10.00 si no (el mínimo que muestra la pantalla de Phones). Se dispara una vez por cada cruce, no con cada cargo por debajo del mínimo; con la recarga automática activa, la recarga llega sola (crm_phones.wallet.recharged). Trae el saldo nuevo, el anterior, el mínimo y el cargo que lo cruzó. Las llamadas y los SMS se cortan cuando el saldo no alcanza para cubrirlos.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "crm_phones.wallet.low_balance",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "wallet": {
      "balance_cents": 940,
      "previous_balance_cents": 1012,
      "low_balance_mark_cents": 1000,
      "auto_recharge_enabled": false
    },
    "transaction": {
      "id": "call_CA9f8e7d6c5b4a39281706f5e4d3c2b1a0",
      "type": "call_charge",
      "amount_cents": -72,
      "description": "Llamada a +13055550187 (6 min)",
      "auto_recharge": false,
      "invoice_number": null,
      "created_at": 1762000000000
    },
    "actor": {
      "uid": "system:phones",
      "name": "Phones",
      "kind": "system"
    }
  }
}

Inbox

social_inbox.item.received

Llegó al Inbox un comentario, un mensaje directo o una mención

Entró al Inbox un ítem nuevo (un comentario, un mensaje directo o una mención de Instagram o Facebook; los de LinkedIn y TikTok no lo disparan: sus términos no dejan enviar sus datos a un webhook), por webhook en tiempo real o por la sincronización periódica. Se emite una vez por ítem, antes de cualquier regla automática o respuesta de IA. No se dispara con los mensajes de la propia marca, con los mensajes directos que pertenecen al CRM (viven en CRM → Mensajes), con los ítems que se clasifican como spam al llegar ni con los ítems de más de 24 horas que llegan al importar el historial. Los adjuntos que guarda MB Suite llegan como enlaces firmados por una hora desde que se generó el evento (url_expires_at); una entrega reintentada más tarde puede traer un enlace vencido: pide el ítem (social_inbox.items.get) para obtener uno nuevo.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "social_inbox.item.received",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "item": {
      "id": "8f4c2a91d0b7e6f35a1c9e2d4b7a8f60c3e1d2b5a4f9c8e7d6b5a4c3e2f1d0a9",
      "source": "ig_comment",
      "platform": "instagram",
      "conversation_type": "comment",
      "source_item_id": "17923456781234567",
      "source_account_id": "17841400000000000",
      "account_name": "cafe.delpuerto",
      "root_resource_id": "18012345678901234",
      "thread_id": "2b9f7c0e5d4a3b2c1d0e9f8a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f0a9b8c",
      "author": {
        "name": "lucia.mendez",
        "username": "lucia.mendez",
        "external_id": "17841455555555555"
      },
      "text": "¿Tienen opciones sin TACC en el menú de la semana?",
      "language": "es",
      "sentiment": "neutral",
      "is_spam": false,
      "state": "unread",
      "received_at": 1761999940000,
      "label_ids": [],
      "external_url": "https://www.instagram.com/p/DExample123/",
      "can_reply": true,
      "created_at": 1762000000000,
      "updated_at": 1762000000000
    },
    "actor": {
      "uid": "system:inbox-sync",
      "name": "MB Suite",
      "kind": "system"
    }
  }
}
social_inbox.reply.sent

Salió a la red una respuesta desde el Inbox

La red aceptó una respuesta a un ítem del Inbox: escrita por una persona (pantalla, API o MCP), por una regla con una respuesta guardada o por un Community Manager de IA. item es el ítem tal como estaba cuando salió la respuesta; reply trae el texto, el canal (public, o private: un comentario respondido por mensaje directo), sent_at, el id que le dio la red, automated (true para reglas e IA) y rule_id cuando respondió una regla. Las respuestas escritas directamente en la red no se emiten. Los adjuntos que guarda MB Suite llegan como enlaces firmados por una hora desde que se generó el evento (url_expires_at); una entrega reintentada más tarde puede traer un enlace vencido: pide el ítem (social_inbox.items.get) para obtener uno nuevo.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "social_inbox.reply.sent",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "item": {
      "id": "8f4c2a91d0b7e6f35a1c9e2d4b7a8f60c3e1d2b5a4f9c8e7d6b5a4c3e2f1d0a9",
      "source": "ig_comment",
      "platform": "instagram",
      "conversation_type": "comment",
      "source_item_id": "17923456781234567",
      "source_account_id": "17841400000000000",
      "account_name": "cafe.delpuerto",
      "root_resource_id": "18012345678901234",
      "thread_id": "2b9f7c0e5d4a3b2c1d0e9f8a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f0a9b8c",
      "author": {
        "name": "lucia.mendez",
        "username": "lucia.mendez",
        "external_id": "17841455555555555"
      },
      "text": "¿Tienen opciones sin TACC en el menú de la semana?",
      "language": "es",
      "sentiment": "neutral",
      "is_spam": false,
      "state": "unread",
      "received_at": 1761999940000,
      "label_ids": [],
      "external_url": "https://www.instagram.com/p/DExample123/",
      "can_reply": true,
      "created_at": 1762000000000,
      "updated_at": 1762000000000
    },
    "reply": {
      "text": "¡Hola Lucía! Sí: todos los días hay dos platos sin TACC. Te esperamos 🙌",
      "channel": "public",
      "sent_at": 1762000000000,
      "external_reply_id": "17999999999999999",
      "automated": false,
      "rule_id": null
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
social_inbox.item.escalated

El Equipo IA le pasó un ítem del Inbox a una persona

Un Community Manager de IA no respondió y dejó el ítem en «Necesitan atención» para una persona. reason dice por qué: complaint (sentimiento negativo, con el Analista de sentimiento activo; desde el 12-10-2026, en un mensaje privado, pedir hablar con una persona sin una queja concreta no cuenta), ai_signal (la IA encontró un motivo de escalamiento configurado: precios, datos personales, un idioma desconocido; o, en un mensaje privado, la persona pidió hablar con alguien y no hay un canal de contacto cargado, o el pedido traía una queja que el Analista no vio), ai_reply_cap (demasiadas respuestas de IA en la misma conversación privada en 24 horas) o, desde el 17-10-2026, ai_no_answer (en un mensaje privado, la IA devolvió una respuesta vacía dos veces y la conversación pasa a una persona en lugar de quedar sin respuesta). Los adjuntos que guarda MB Suite llegan como enlaces firmados por una hora desde que se generó el evento (url_expires_at); una entrega reintentada más tarde puede traer un enlace vencido: pide el ítem (social_inbox.items.get) para obtener uno nuevo.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "social_inbox.item.escalated",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "item": {
      "id": "8f4c2a91d0b7e6f35a1c9e2d4b7a8f60c3e1d2b5a4f9c8e7d6b5a4c3e2f1d0a9",
      "source": "ig_comment",
      "platform": "instagram",
      "conversation_type": "comment",
      "source_item_id": "17923456781234567",
      "source_account_id": "17841400000000000",
      "account_name": "cafe.delpuerto",
      "root_resource_id": "18012345678901234",
      "thread_id": "2b9f7c0e5d4a3b2c1d0e9f8a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f0a9b8c",
      "author": {
        "name": "lucia.mendez",
        "username": "lucia.mendez",
        "external_id": "17841455555555555"
      },
      "text": "¿Tienen opciones sin TACC en el menú de la semana?",
      "language": "es",
      "sentiment": "negative",
      "is_spam": false,
      "state": "needs_attention",
      "received_at": 1761999940000,
      "label_ids": [],
      "external_url": "https://www.instagram.com/p/DExample123/",
      "can_reply": true,
      "created_at": 1762000000000,
      "updated_at": 1762000000000
    },
    "reason": "complaint",
    "actor": {
      "uid": "system:inbox-auto",
      "name": "Automatización Social Inbox",
      "kind": "system"
    }
  }
}
social_inbox.item.resolved

Un ítem del Inbox se marcó como resuelto

Una persona marcó un ítem del Inbox como resuelto, desde la pantalla (un ítem o «Marcar todo como resuelto» en una publicación), la API o el MCP. Se emite solo si el ítem no estaba resuelto; reabrirlo no emite nada. Los adjuntos que guarda MB Suite llegan como enlaces firmados por una hora desde que se generó el evento (url_expires_at); una entrega reintentada más tarde puede traer un enlace vencido: pide el ítem (social_inbox.items.get) para obtener uno nuevo.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "social_inbox.item.resolved",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "item": {
      "id": "8f4c2a91d0b7e6f35a1c9e2d4b7a8f60c3e1d2b5a4f9c8e7d6b5a4c3e2f1d0a9",
      "source": "ig_comment",
      "platform": "instagram",
      "conversation_type": "comment",
      "source_item_id": "17923456781234567",
      "source_account_id": "17841400000000000",
      "account_name": "cafe.delpuerto",
      "root_resource_id": "18012345678901234",
      "thread_id": "2b9f7c0e5d4a3b2c1d0e9f8a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f0a9b8c",
      "author": {
        "name": "lucia.mendez",
        "username": "lucia.mendez",
        "external_id": "17841455555555555"
      },
      "text": "¿Tienen opciones sin TACC en el menú de la semana?",
      "language": "es",
      "sentiment": "neutral",
      "is_spam": false,
      "state": "resolved",
      "received_at": 1761999940000,
      "label_ids": [],
      "external_url": "https://www.instagram.com/p/DExample123/",
      "can_reply": true,
      "created_at": 1762000000000,
      "updated_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}

Social Planner

social_planner.post.created

Se creó una publicación en el Social Planner

Se creó una publicación nueva en el Social Planner: desde el Composer, un plan de contenidos (MIA o una importación), un duplicado, la API o un envío desde Content Studio. Trae la publicación tal como se guardó (estado, redes, formato, texto, medios, fecha programada). Las publicaciones sincronizadas desde las redes no lo emiten.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "social_planner.post.created",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "post": {
      "id": "sp_4Qm9xT2bK7",
      "origin": "mb_suite",
      "status": "draft",
      "format": "carousel",
      "platforms": [
        "instagram",
        "facebook"
      ],
      "master_content": "Tres errores que frenan tu campaña de fin de año (y cómo evitarlos) 👇",
      "master_media": [
        {
          "id": "md_1",
          "url": "https://mb-suite.com/api/v1/storage/resolve?key=organizations/org_1/media/carrusel-1.png",
          "type": "image"
        }
      ],
      "scheduled_date": 1762172800000,
      "timezone": "America/Argentina/Buenos_Aires",
      "label_ids": [
        "lb_campana_q4"
      ],
      "tags": [],
      "publish_mode": "manual",
      "created_by": "u_7KpQ2",
      "created_at": 1762000000000,
      "updated_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
social_planner.post.scheduled

Se programó una publicación

Una publicación quedó en cola para publicarse en sus redes en scheduled_at (un trabajo de publicación por red, o por ubicación en Google Business Profile). Reprogramarla para otro horario lo vuelve a emitir. La publicación en sí llega después como social_planner.post.published, social_planner.post.partially_published o social_planner.post.failed.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "social_planner.post.scheduled",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "post": {
      "id": "sp_4Qm9xT2bK7",
      "origin": "mb_suite",
      "status": "scheduled",
      "format": "carousel",
      "platforms": [
        "instagram",
        "facebook"
      ],
      "master_content": "Tres errores que frenan tu campaña de fin de año (y cómo evitarlos) 👇",
      "master_media": [
        {
          "id": "md_1",
          "url": "https://mb-suite.com/api/v1/storage/resolve?key=organizations/org_1/media/carrusel-1.png",
          "type": "image"
        }
      ],
      "scheduled_date": 1762172800000,
      "timezone": "America/Argentina/Buenos_Aires",
      "label_ids": [
        "lb_campana_q4"
      ],
      "tags": [],
      "publish_mode": "scheduled",
      "created_by": "u_7KpQ2",
      "created_at": 1762000000000,
      "updated_at": 1762000000000
    },
    "scheduled_at": 1762172800000,
    "platforms": [
      "instagram",
      "facebook"
    ],
    "job_count": 2,
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
social_planner.post.published

Una publicación salió en todas sus redes

Todas las redes de la publicación la publicaron (una story con varios cuadros cuenta cuando están todos publicados). El proceso de publicación lo emite una vez por resultado, haya salido la publicación al momento o en su horario programado; external_url es el enlace permanente cuando la red lo da.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "social_planner.post.published",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "post": {
      "id": "sp_4Qm9xT2bK7",
      "origin": "mb_suite",
      "status": "published",
      "format": "carousel",
      "platforms": [
        "instagram",
        "facebook"
      ],
      "master_content": "Tres errores que frenan tu campaña de fin de año (y cómo evitarlos) 👇",
      "master_media": [
        {
          "id": "md_1",
          "url": "https://mb-suite.com/api/v1/storage/resolve?key=organizations/org_1/media/carrusel-1.png",
          "type": "image"
        }
      ],
      "scheduled_date": 1762172800000,
      "timezone": "America/Argentina/Buenos_Aires",
      "label_ids": [
        "lb_campana_q4"
      ],
      "tags": [],
      "publish_mode": "scheduled",
      "created_by": "u_7KpQ2",
      "created_at": 1762000000000,
      "updated_at": 1762000000000,
      "published_at": 1762172800000,
      "published_platforms": [
        "instagram",
        "facebook"
      ],
      "external_url": "https://www.instagram.com/p/DExample123/"
    },
    "published_platforms": [
      "instagram",
      "facebook"
    ],
    "actor": {
      "uid": "system:social-publish",
      "name": "MB Suite",
      "kind": "system"
    }
  }
}
social_planner.post.partially_published

Una publicación salió en algunas redes y falló en otras

La publicación salió en al menos una red y falló en otra (o una secuencia de stories se cortó a mitad de camino). reason es la causa clasificada predominante (credentials_expired, permissions_missing, account_restricted, media_invalid, content_invalid, rate_limited, platform_error, polling_timeout, unknown) y by_platform, la causa en cada red que falló. Se puede reintentar desde el planner o con social_planner.posts.retry.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "social_planner.post.partially_published",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "post": {
      "id": "sp_4Qm9xT2bK7",
      "origin": "mb_suite",
      "status": "partially_published",
      "format": "carousel",
      "platforms": [
        "instagram",
        "facebook"
      ],
      "master_content": "Tres errores que frenan tu campaña de fin de año (y cómo evitarlos) 👇",
      "master_media": [
        {
          "id": "md_1",
          "url": "https://mb-suite.com/api/v1/storage/resolve?key=organizations/org_1/media/carrusel-1.png",
          "type": "image"
        }
      ],
      "scheduled_date": 1762172800000,
      "timezone": "America/Argentina/Buenos_Aires",
      "label_ids": [
        "lb_campana_q4"
      ],
      "tags": [],
      "publish_mode": "scheduled",
      "created_by": "u_7KpQ2",
      "created_at": 1762000000000,
      "updated_at": 1762000000000,
      "published_platforms": [
        "facebook"
      ],
      "failed_platforms": [
        "instagram"
      ]
    },
    "published_platforms": [
      "facebook"
    ],
    "failed_platforms": [
      "instagram"
    ],
    "reason": "credentials_expired",
    "by_platform": [
      {
        "platform": "instagram",
        "reason": "credentials_expired"
      }
    ],
    "actor": {
      "uid": "system:social-publish",
      "name": "MB Suite",
      "kind": "system"
    }
  }
}
social_planner.post.failed

Una publicación no se pudo publicar en ninguna red

La publicación falló en todas las redes tras los reintentos automáticos (o la red siguió procesando más allá del tiempo límite: reason polling_timeout). reason es la causa clasificada predominante y by_platform, la causa en cada red. Una publicación que se elimina mientras se publica no lo emite.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "social_planner.post.failed",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "post": {
      "id": "sp_4Qm9xT2bK7",
      "origin": "mb_suite",
      "status": "failed",
      "format": "carousel",
      "platforms": [
        "instagram",
        "facebook"
      ],
      "master_content": "Tres errores que frenan tu campaña de fin de año (y cómo evitarlos) 👇",
      "master_media": [
        {
          "id": "md_1",
          "url": "https://mb-suite.com/api/v1/storage/resolve?key=organizations/org_1/media/carrusel-1.png",
          "type": "image"
        }
      ],
      "scheduled_date": 1762172800000,
      "timezone": "America/Argentina/Buenos_Aires",
      "label_ids": [
        "lb_campana_q4"
      ],
      "tags": [],
      "publish_mode": "scheduled",
      "created_by": "u_7KpQ2",
      "created_at": 1762000000000,
      "updated_at": 1762000000000,
      "failed_platforms": [
        "instagram",
        "facebook"
      ]
    },
    "failed_platforms": [
      "instagram",
      "facebook"
    ],
    "reason": "media_invalid",
    "by_platform": [
      {
        "platform": "instagram",
        "reason": "media_invalid"
      },
      {
        "platform": "facebook",
        "reason": "media_invalid"
      }
    ],
    "actor": {
      "uid": "system:social-publish",
      "name": "MB Suite",
      "kind": "system"
    }
  }
}

Content Studio

social_content_studio.series.generated

Terminó de generarse una serie de Content Studio

Una generación de una serie de Content Studio terminó con al menos un post generado: status review (todos los posts listos para revisar y aprobar) o partial (algunos posts fallaron; failed_count dice cuántos). Se emite una vez por generación, haya corrido directo o por el lote en segundo plano; cuando una generación directa deja posts fallidos por falta de capacidad, se reintentan en segundo plano y esa generación lo vuelve a emitir cuando se resuelve. Lee el plan y los posts con social_content_studio.series.get. requested_by es el usuario que inició la generación.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "social_content_studio.series.generated",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "series": {
      "id": "cs_8Fh2LmQ0",
      "name": "Lanzamiento colección otoño",
      "status": "review",
      "topic": "Tres looks de la nueva colección para la oficina",
      "platforms": [
        "instagram",
        "facebook"
      ],
      "post_count": 5,
      "art_mode": "ai",
      "created_via": "wizard",
      "created_by": "u_7KpQ2",
      "created_at": 1761999400000,
      "updated_at": 1762000000000
    },
    "generated_count": 5,
    "failed_count": 0,
    "generation_mode": "sync",
    "requested_by": "u_7KpQ2",
    "actor": {
      "uid": "system:content-studio",
      "name": "MB Suite",
      "kind": "system"
    }
  }
}
social_content_studio.series.generation_failed

Una generación de serie de Content Studio no produjo nada

Una generación de una serie de Content Studio terminó sin generar ningún post (status failed, o partial cuando la serie conservaba posts de una generación anterior y el lote en segundo plano falló por completo). Los créditos de imagen de lo que no se generó se devuelven; el usuario puede reintentar desde la serie. Una generación que nunca empezó (sin créditos al ponerla en cola) no lo emite.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "social_content_studio.series.generation_failed",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "series": {
      "id": "cs_8Fh2LmQ0",
      "name": "Lanzamiento colección otoño",
      "status": "failed",
      "topic": "Tres looks de la nueva colección para la oficina",
      "platforms": [
        "instagram",
        "facebook"
      ],
      "post_count": 5,
      "art_mode": "ai",
      "created_via": "wizard",
      "created_by": "u_7KpQ2",
      "created_at": 1761999400000,
      "updated_at": 1762000000000
    },
    "generated_count": 0,
    "failed_count": 5,
    "generation_mode": "batch",
    "requested_by": "u_7KpQ2",
    "actor": {
      "uid": "system:content-studio",
      "name": "MB Suite",
      "kind": "system"
    }
  }
}
social_content_studio.photo_session.completed

Terminó de generarse una sesión de fotos

Una sesión de fotos de producto terminó de generarse con al menos una imagen: status completed (salieron todas las imágenes) o partial (no salieron failed_image_count imágenes; sus créditos se devuelven). Las imágenes ya están en la sesión (social_content_studio.photo_sessions.get) y en la Media Library de la organización, en la carpeta de la sesión. Se emite una vez por generación.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "social_content_studio.photo_session.completed",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "photo_session": {
      "id": "ps_3Rk9VbW1",
      "name": "Zapatillas — estudio",
      "status": "completed",
      "session_type": "studio",
      "mode": "multi",
      "formats": [
        "feed",
        "story"
      ],
      "product_count": 3,
      "created_by": "u_7KpQ2",
      "created_at": 1761999100000,
      "updated_at": 1762000000000
    },
    "image_count": 6,
    "failed_image_count": 0,
    "generation_mode": "batch",
    "requested_by": "u_7KpQ2",
    "actor": {
      "uid": "system:content-studio",
      "name": "MB Suite",
      "kind": "system"
    }
  }
}
social_content_studio.photo_session.failed

Una sesión de fotos no generó ninguna imagen

Una generación de sesión de fotos terminó sin ninguna imagen: la sesión vuelve a borrador para poder generarla de nuevo y sus créditos se devuelven (o nunca se cobraron). Una generación que nunca empezó (sin créditos o sin cuota de almacenamiento al ponerla en cola) no lo emite.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "social_content_studio.photo_session.failed",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "photo_session": {
      "id": "ps_3Rk9VbW1",
      "name": "Zapatillas — estudio",
      "status": "draft",
      "session_type": "studio",
      "mode": "multi",
      "formats": [
        "feed",
        "story"
      ],
      "product_count": 3,
      "created_by": "u_7KpQ2",
      "created_at": 1761999100000,
      "updated_at": 1762000000000
    },
    "image_count": 0,
    "failed_image_count": 6,
    "generation_mode": "batch",
    "requested_by": "u_7KpQ2",
    "actor": {
      "uid": "system:content-studio",
      "name": "MB Suite",
      "kind": "system"
    }
  }
}

Brand Voice

social_brand_voice.profile.updated

Cambió la Brand Voice

Se dispara cuando cambia la Brand Voice de la organización: se guarda desde la pantalla, se actualiza por la API o el MCP, o se reinicia (en ese caso profile es null y reset es true). Trae el perfil completo tal como se guardó (tonos, vocabulario, formato, audiencia, ajustes por red y ai_summary) y changed_fields con los nombres públicos de los campos que cambiaron. Guardar los mismos valores no lo dispara, ni tampoco restaurar desde la Papelera un perfil reiniciado.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "social_brand_voice.profile.updated",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "profile": {
      "tones": [
        "friendly",
        "educational"
      ],
      "custom_tone_note": "Cercana y clara, como una nutricionista que explica sin tecnicismos.",
      "communication_style": "conversational",
      "preferred_words": [
        "bienestar",
        "hábitos",
        "paso a paso"
      ],
      "avoided_words": [
        "dieta milagro",
        "detox"
      ],
      "jargon_level": "avoid",
      "emoji_usage": "minimal",
      "hashtag_usage": "per_platform",
      "post_structure": "Pregunta que engancha → dato útil → llamado a la acción",
      "audience_persona": "Mujeres de 28 a 45 años que trabajan y quieren comer mejor sin complicarse.",
      "platform_adjustments": {
        "instagram": {
          "tone_note": "Más visual, con emojis puntuales.",
          "max_caption_length": 2200,
          "include_hashtags": true
        },
        "linkedin": {
          "tone_note": "Más profesional, con datos y fuentes.",
          "max_caption_length": 3000,
          "include_hashtags": false
        }
      },
      "ai_summary": "Una voz cercana y educativa que explica la nutrición sin tecnicismos, con pocos emojis y hashtags pensados para cada red. Habla a mujeres que trabajan y quieren comer mejor sin complicarse.",
      "updated_at": 1762000000000,
      "updated_by": "u_7KpQ2"
    },
    "changed_fields": [
      "tones",
      "preferred_words"
    ],
    "reset": false,
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
social_brand_voice.document.processed

Terminó de procesarse un documento de Brand Voice

Se dispara cuando MB Suite termina de procesar un documento subido a Brand Voice: su texto se extrajo y se indexó para la IA (status ready; embedding_status dice si la indexación funcionó y chunk_count, cuántos fragmentos tiene) o la extracción falló (status error, con error_message). Se vuelve a disparar después de cada reintento. No trae texto, URL ni ruta de almacenamiento (lee el texto con social_brand_voice.documents.get). Los documentos de contexto general del perfil de la organización no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "social_brand_voice.document.processed",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "document": {
      "id": "Hk3pQ9vXr2LmT8sWz1yB",
      "file_name": "Manual de marca 2026.pdf",
      "mime_type": "application/pdf",
      "size_bytes": 2456789,
      "status": "ready",
      "embedding_status": "ready",
      "chunk_count": 24,
      "uploaded_by": "u_7KpQ2",
      "uploaded_at": 1761999880000,
      "updated_at": 1762000000000
    },
    "actor": {
      "uid": "system:brand-voice",
      "name": "Brand Voice",
      "kind": "system"
    }
  }
}

Competidores

social_competitors.competitor.created

Se empezó a seguir a un competidor

Se dispara cuando se agrega un competidor (desde la pantalla, la API, el MCP o un agente): su nombre, color, orden y los perfiles que se siguen en cada plataforma (usuario de Instagram, página de Facebook, canal de YouTube). Sus primeras métricas llegan después, cada una como social_competitors.snapshot.created. Un competidor restaurado desde la Papelera no lo dispara.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "social_competitors.competitor.created",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "competitor": {
      "id": "Qm7XoR2vT9sLp4KcZa1W",
      "name": "Clínica Sur",
      "order": 2,
      "color": "#8b5cf6",
      "profiles": {
        "instagram": {
          "username": "clinicasur"
        },
        "facebook": {
          "page_id": "104523987612345",
          "page_name": "Clínica Sur"
        },
        "youtube": {
          "channel_id": "UCq3Xb9vYH2mR8kT1aLw0pZg",
          "handle": "clinicasur",
          "channel_title": "Clínica Sur",
          "thumbnail_url": "https://yt3.ggpht.com/ytc/clinicasur=s240"
        }
      },
      "profile_meta": {
        "instagram": {
          "display_name": "Clínica Sur",
          "external_url": "https://www.instagram.com/clinicasur/",
          "website": "https://clinicasur.com"
        }
      },
      "last_fetched_at": 1761996400000,
      "last_fetch_error": null,
      "created_at": 1759408000000,
      "updated_at": 1762000000000,
      "created_by": "u_7KpQ2"
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
social_competitors.competitor.updated

Cambió el nombre o los perfiles de un competidor

Se dispara cuando alguien cambia el nombre de un competidor o los perfiles que se siguen. Trae el competidor tal como queda y changes (qué ajustes se mandaron: name, profiles). Las actualizaciones automáticas de datos no lo disparan (disparan social_competitors.snapshot.created).

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "social_competitors.competitor.updated",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "competitor": {
      "id": "Qm7XoR2vT9sLp4KcZa1W",
      "name": "Clínica Sur · sede Centro",
      "order": 2,
      "color": "#8b5cf6",
      "profiles": {
        "instagram": {
          "username": "clinicasur"
        },
        "facebook": {
          "page_id": "104523987612345",
          "page_name": "Clínica Sur"
        },
        "youtube": {
          "channel_id": "UCq3Xb9vYH2mR8kT1aLw0pZg",
          "handle": "clinicasur",
          "channel_title": "Clínica Sur",
          "thumbnail_url": "https://yt3.ggpht.com/ytc/clinicasur=s240"
        }
      },
      "profile_meta": {
        "instagram": {
          "display_name": "Clínica Sur",
          "external_url": "https://www.instagram.com/clinicasur/",
          "website": "https://clinicasur.com"
        }
      },
      "last_fetched_at": 1761996400000,
      "last_fetch_error": null,
      "created_at": 1759408000000,
      "updated_at": 1762000000000,
      "created_by": "u_7KpQ2"
    },
    "changes": [
      "name"
    ],
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
social_competitors.competitor.deleted

Se eliminó un competidor con su historial

Se dispara cuando se elimina un competidor junto con su historial: sus métricas por día (snapshots_deleted) y sus publicaciones recolectadas (posts_deleted). Trae el competidor tal como estaba. El competidor y su historial más reciente quedan 30 días en la Papelera y los owners y admins pueden restaurarlos.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "social_competitors.competitor.deleted",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "competitor": {
      "id": "Qm7XoR2vT9sLp4KcZa1W",
      "name": "Clínica Sur",
      "order": 2,
      "color": "#8b5cf6",
      "profiles": {
        "instagram": {
          "username": "clinicasur"
        },
        "facebook": {
          "page_id": "104523987612345",
          "page_name": "Clínica Sur"
        },
        "youtube": {
          "channel_id": "UCq3Xb9vYH2mR8kT1aLw0pZg",
          "handle": "clinicasur",
          "channel_title": "Clínica Sur",
          "thumbnail_url": "https://yt3.ggpht.com/ytc/clinicasur=s240"
        }
      },
      "profile_meta": {
        "instagram": {
          "display_name": "Clínica Sur",
          "external_url": "https://www.instagram.com/clinicasur/",
          "website": "https://clinicasur.com"
        }
      },
      "last_fetched_at": 1761996400000,
      "last_fetch_error": null,
      "created_at": 1759408000000,
      "updated_at": 1762000000000,
      "created_by": "u_7KpQ2"
    },
    "snapshots_deleted": 84,
    "posts_deleted": 36,
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
social_competitors.snapshot.created

Se recolectaron métricas nuevas de un competidor o de tu propia marca

Se dispara una vez por plataforma cada vez que se leen los datos públicos de un competidor (o de la propia marca de la organización: competitor.is_self true e id __self__) desde Meta (Instagram Business Discovery, Facebook Pages) o la YouTube Data API: en la actualización automática semanal (los lunes, actor kind system), con social_competitors.competitors.refresh o justo después de agregar un competidor o cambiar sus perfiles. Trae las métricas de esa lectura: seguidores, promedio de likes, comentarios y vistas de las publicaciones recientes, engagement rate, frecuencia de publicación, proporción de reels/shorts y mezcla de formatos. Una plataforma que falló no lo dispara.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "social_competitors.snapshot.created",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "competitor": {
      "id": "Qm7XoR2vT9sLp4KcZa1W",
      "name": "Clínica Sur",
      "is_self": false
    },
    "snapshot": {
      "id": "s8KfP2qLm4WvX7tR9aZc",
      "competitor_id": "Qm7XoR2vT9sLp4KcZa1W",
      "date": "2026-10-27",
      "platform": "instagram",
      "source": "api",
      "metrics": {
        "followers": 48210,
        "follows_count": 312,
        "total_posts": 1184,
        "avg_likes": 412,
        "avg_comments": 23,
        "engagement_rate": 0.009,
        "posts_per_week": 4.5,
        "reels_share": 0.42,
        "format_mix": {
          "reels": 5,
          "carousel": 4,
          "image": 3,
          "video": 0
        }
      },
      "fetched_at": 1762000000000
    },
    "actor": {
      "uid": "system:social-competitor-fetch",
      "name": "Weekly competitor refresh",
      "kind": "system"
    }
  }
}

Media Planner

media_planner.campaign.changed

Cambió una fila de un plan de medios

Se dispara una vez por fila (campaña, fila de plataforma o fila de cuenta) cuando se crea, se actualiza, se elimina o se importa, desde la pantalla de Media Planner, la API, el MCP, MIA o un carryover. change dice cuál de esas fue; changes lista cada campo que se sigue con su valor antes y después (name, budget, status, start_date, end_date, platform, currency, label_ids, mapped_campaign, auto_budget_enabled, carryover; los montos están en la moneda de la fila y las fechas en ms). source dice quién lo hizo: user, ai, autobudget, carryover o system. Reordenar filas y la sincronización de costos no lo disparan (mira media_planner.costs.synced).

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "media_planner.campaign.changed",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "plan": {
      "id": "mp_8Kq2LmZpV0bT7xL1aR9c",
      "name": "Plan Octubre 2026"
    },
    "campaign": {
      "id": "cmp_3bTz8QpL2mV9xW1aKe7d",
      "name": "Google Search - Brand",
      "row_kind": "campaign",
      "platform": "google_ads",
      "budget": 4500,
      "currency": "USD",
      "status": "active",
      "start_date": 1790812800000,
      "end_date": 1793491199999,
      "label_ids": [
        "lbl_always_on"
      ],
      "mapped_campaign_id": "21345678901",
      "external_customer_id": "123-456-7890"
    },
    "change": "updated",
    "source": "user",
    "changes": [
      {
        "field": "budget",
        "before": 4000,
        "after": 4500
      },
      {
        "field": "status",
        "before": "scheduled",
        "after": "active"
      }
    ],
    "bulk": false,
    "source_plan_name": null,
    "history_entry_id": "chg_9Wd4KpQ2mZ7xV1bN3sLe",
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
media_planner.costs.synced

Se sincronizaron los costos de un plan de medios

Se dispara después de leer de las plataformas de anuncios la inversión de un plan de medios y guardarla: desde el botón «Sincronizar costos», la vista cross-account, la API, el MCP o la automatización programada (trigger automation, con un actor del sistema). synced_rows filas recibieron su inversión; errors lista lo que rechazó una plataforma (se conservan los valores anteriores de esa plataforma). Los totales van por moneda (spent_by_currency); account_total_spend es la inversión de las cuentas conectadas por plataforma.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "media_planner.costs.synced",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "plan": {
      "id": "mp_8Kq2LmZpV0bT7xL1aR9c",
      "name": "Plan Octubre 2026",
      "mode": "campaigns",
      "currency": "USD"
    },
    "trigger": "manual",
    "synced_rows": 6,
    "error_count": 0,
    "errors": [],
    "total_spent": 11480.5,
    "spent_by_currency": {
      "USD": 11480.5
    },
    "account_total_spend": {
      "google_ads": 8200.25,
      "meta_ads": 3600
    },
    "synced_at": 1762000000000,
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
media_planner.plan.archived

Se archivó un plan de medios

Se dispara cuando se archiva un plan de medios por la API, el MCP, MIA o la vista cross-account: plan es el plan tal como quedó archivado y transitions, cuántas campañas cambiaron de estado (de programada a cancelada, de activa y pausada a completada). Archivarlo desde la pantalla del plan y el archivado automático programado todavía no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "media_planner.plan.archived",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "plan": {
      "id": "mp_8Kq2LmZpV0bT7xL1aR9c",
      "name": "Plan Octubre 2026",
      "status": "archived",
      "mode": "campaigns",
      "start_date": 1790812800000,
      "end_date": 1793491199999,
      "currency": "USD",
      "total_budget": 12000,
      "budget_by_currency": {
        "USD": 12000
      },
      "total_spent": 11480.5,
      "spent_by_currency": {
        "USD": 11480.5
      },
      "carryover_enabled": true,
      "updated_at": 1762000000000
    },
    "transitions": [
      {
        "from": "active",
        "to": "completed",
        "count": 5
      },
      {
        "from": "scheduled",
        "to": "cancelled",
        "count": 1
      }
    ],
    "campaign_count": 7,
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
media_planner.plan.shared

Se mandó un plan de medios por email

Se dispara cuando se manda un plan de medios por email (desde la app, la API, el MCP o MIA): el id del envío, el formato (html, o pdf con el plan adjunto), el asunto, cuántos destinatarios y la dirección From. Las direcciones de los destinatarios no vienen en el webhook: léelas con media_planner.shares.list.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "media_planner.plan.shared",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "plan": {
      "id": "mp_8Kq2LmZpV0bT7xL1aR9c",
      "name": "Plan Octubre 2026"
    },
    "share": {
      "id": "shr_5Hq2LmZpV0bT7xL1aR9c",
      "format": "pdf",
      "subject": "Plan de medios — Octubre 2026",
      "recipient_count": 3,
      "sender_email": "valentina@agencia.com",
      "sent_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
media_planner.carryover.applied

Se aplicó un carryover a un plan de medios

Se dispara cuando el saldo sin gastar de un plan terminado (modo from_plan, con source_plan) o un saldo cargado a mano (modo manual, con source_note) se suma al presupuesto de filas de un plan. allocations dice cuánto recibió cada fila (un valor negativo resta); cada fila además dispara media_planner.campaign.changed con source carryover.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "media_planner.carryover.applied",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "plan": {
      "id": "mp_2Np7RtYvB4cX8zQ1wE6f",
      "name": "Plan Noviembre 2026"
    },
    "mode": "from_plan",
    "source_plan": {
      "id": "mp_8Kq2LmZpV0bT7xL1aR9c",
      "name": "Plan Octubre 2026"
    },
    "source_note": null,
    "total_amount": 519.5,
    "applied_amount": 500,
    "allocations": [
      {
        "campaign_id": "cmp_7Gh2KpQ9mZ1xV4bN8sLe",
        "amount": 300
      },
      {
        "campaign_id": "cmp_4Rt8LmZpV0bT2xL6aR1c",
        "amount": 200
      }
    ],
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}

Estrategias AI

strategy_generator.generation.completed

Terminó de generarse una estrategia de paid media con IA

La IA terminó de generar una estrategia de paid media (status completed): una nueva creada desde un briefing o una existente regenerada (regenerated=true; sus proyecciones editadas volvieron a los valores nuevos de la IA). El evento trae el resumen (objetivo, plataformas, rango de presupuesto, cantidad de campañas); lee el plan completo, el mix de canales recomendado y el briefing con strategy_generator.strategies.get. requested_by es la persona que inició la generación; ai_model, el modelo que la produjo.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "strategy_generator.generation.completed",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "strategy": {
      "id": "Xq7RbT2mWc9LpZ4nVd1e",
      "name": "Lanzamiento colección otoño",
      "status": "completed",
      "objective": "sales",
      "platforms": [
        "google_ads",
        "meta_ads"
      ],
      "currency": "USD",
      "min_budget": 3000,
      "max_budget": 4500,
      "campaign_count": 5,
      "label_ids": [],
      "created_by": "u_7KpQ2",
      "created_at": 1761999880000,
      "updated_at": 1762000000000
    },
    "regenerated": false,
    "ai_model": "gemini-3.8-flash",
    "requested_by": "u_7KpQ2",
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
strategy_generator.generation.failed

Falló la generación de una estrategia de paid media con IA

Una generación de una estrategia de paid media terminó sin un plan utilizable (fallaron todos los modelos de IA o la respuesta llegó incompleta). Una primera generación desde la app deja la estrategia en status error con su briefing, lista para reintentar (desde cualquier otro lado, una creación fallida no deja nada ni emite el evento); una regeneración fallida deja la estrategia como estaba (status completed con su plan anterior). error.code es ai_generation_failed (fallaron todos los modelos o la respuesta llegó incompleta) o internal_error. Los créditos solo se cobran por las generaciones que salen bien.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "strategy_generator.generation.failed",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "strategy": {
      "id": "Xq7RbT2mWc9LpZ4nVd1e",
      "name": "Lanzamiento colección otoño",
      "status": "error",
      "objective": "sales",
      "platforms": [
        "google_ads",
        "meta_ads"
      ],
      "currency": "USD",
      "min_budget": null,
      "max_budget": null,
      "campaign_count": 0,
      "label_ids": [],
      "created_by": "u_7KpQ2",
      "created_at": 1761999880000,
      "updated_at": 1762000000000
    },
    "regenerated": false,
    "error": {
      "code": "ai_generation_failed",
      "message": "Every AI model failed to produce the strategy. Retry in a few minutes."
    },
    "requested_by": "u_7KpQ2",
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
strategy_generator.strategy.deleted

Se eliminó una estrategia de paid media con IA

Se eliminó una estrategia de paid media, desde la app o por la API. Queda 30 días en la Papelera de la organización, donde un owner o admin puede restaurarla con el mismo id. El evento trae el resumen de lo que se eliminó.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "strategy_generator.strategy.deleted",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "strategy": {
      "id": "Xq7RbT2mWc9LpZ4nVd1e",
      "name": "Lanzamiento colección otoño",
      "status": "completed",
      "objective": "sales",
      "platforms": [
        "google_ads",
        "meta_ads"
      ],
      "currency": "USD",
      "min_budget": 3000,
      "max_budget": 4500,
      "campaign_count": 5,
      "label_ids": [],
      "created_by": "u_7KpQ2",
      "created_at": 1761999880000,
      "updated_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}

Ad Creator

ad_creator.copy.generated

Se generaron copies de anuncios

El Ad Creator generó con IA un conjunto de copies de anuncios (desde la app, la API, el MCP o MIA): copy trae el brief (descripción del producto, plataformas, tono) y cada variante por plataforma (títulos y descripciones de Google Search; texto principal, título y descripción para Meta, LinkedIn y TikTok). Se dispara una vez por generación, después de cobrar el crédito y guardar los copies.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "ad_creator.copy.generated",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "copy": {
      "id": "Vq3mXp9LkT2bN7cR1sYd",
      "name": "Plan Pyme de contabilidad online",
      "product_description": "Contabilidad online para pymes: facturación electrónica, conciliación bancaria y reportes en un solo lugar.",
      "platforms": [
        "google_search",
        "meta_ads"
      ],
      "tone": "professional",
      "variant_count": 1,
      "key_benefits": "Ahorra 10 horas por mes; soporte en español",
      "cta_direction": "Probar gratis 14 días",
      "variants": [
        {
          "id": "variant_0",
          "platform": "google_search",
          "variant_index": 0,
          "variant": {
            "headlines": [
              "Contabilidad Online Pyme",
              "Factura en Minutos",
              "Prueba Gratis 14 Días"
            ],
            "descriptions": [
              "Facturación, conciliación y reportes en un solo lugar. Empieza hoy sin tarjeta."
            ]
          }
        },
        {
          "id": "variant_1",
          "platform": "meta_ads",
          "variant_index": 0,
          "variant": {
            "primary_text": "¿Cierras el mes a mano? Factura, concilia y mira tus números en un solo lugar.",
            "headline": "Tu contabilidad, al día",
            "description": "Prueba gratis 14 días",
            "cta_suggestion": "Más información"
          }
        }
      ],
      "status": "completed",
      "total_credits_consumed": 1,
      "created_by": "u_7KpQ2",
      "created_at": 1762000000000,
      "updated_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
ad_creator.copy.deleted

Se eliminaron copies de anuncios

Se eliminó un conjunto de copies de anuncios (desde la app, la API, el MCP o MIA). copy es el conjunto tal como estaba antes de eliminarlo, con sus variantes. Queda 30 días en la Papelera, donde un owner o admin puede restaurarlo; restaurarlo no emite un evento nuevo.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "ad_creator.copy.deleted",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "copy": {
      "id": "Vq3mXp9LkT2bN7cR1sYd",
      "name": "Plan Pyme de contabilidad online",
      "product_description": "Contabilidad online para pymes: facturación electrónica, conciliación bancaria y reportes en un solo lugar.",
      "platforms": [
        "google_search",
        "meta_ads"
      ],
      "tone": "professional",
      "variant_count": 1,
      "key_benefits": "Ahorra 10 horas por mes; soporte en español",
      "cta_direction": "Probar gratis 14 días",
      "variants": [
        {
          "id": "variant_0",
          "platform": "google_search",
          "variant_index": 0,
          "variant": {
            "headlines": [
              "Contabilidad Online Pyme",
              "Factura en Minutos",
              "Prueba Gratis 14 Días"
            ],
            "descriptions": [
              "Facturación, conciliación y reportes en un solo lugar. Empieza hoy sin tarjeta."
            ]
          }
        },
        {
          "id": "variant_1",
          "platform": "meta_ads",
          "variant_index": 0,
          "variant": {
            "primary_text": "¿Cierras el mes a mano? Factura, concilia y mira tus números en un solo lugar.",
            "headline": "Tu contabilidad, al día",
            "description": "Prueba gratis 14 días",
            "cta_suggestion": "Más información"
          }
        }
      ],
      "status": "completed",
      "total_credits_consumed": 1,
      "created_by": "u_7KpQ2",
      "created_at": 1762000000000,
      "updated_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}

SEO Planner

seo_planner.item.created

Se creó una acción del SEO Planner

Se dispara cuando se agrega una acción al SEO Planner por la API, el MCP o MIA (source manual), desde un template de acción (source action_template) o al aplicar un pack, también desde la app (source pack, un evento por cada acción creada). Las acciones creadas desde la pantalla del planner o por SEO Ops todavía no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "seo_planner.item.created",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "item": {
      "id": "si_8Rk2PqLm4ZtV0bN7xC1d",
      "title": "Optimizar la ficha de producto «Zapatillas running»",
      "subtitle": "Title, meta description y H1 con la keyword principal",
      "type": "on_page_seo",
      "status": "pending",
      "description": "",
      "month_key": "2026-11",
      "scheduled_date": 1793534400000,
      "organization_id": "org_Cl1n1c4N0rt3",
      "sub_actions": [
        {
          "id": "sa_1762000000000_0_k3Zp",
          "title": "Auditar title tags",
          "completed": true,
          "order": 0
        },
        {
          "id": "sa_1762000000000_1_Qm8v",
          "title": "Reescribir meta description",
          "completed": false,
          "order": 1
        }
      ],
      "content_brief": {
        "keyword": "zapatillas running mujer"
      },
      "pack_id": null,
      "pack_source": null,
      "pack_item_id": null,
      "template_id": null,
      "template_source": null,
      "comment_count": 0,
      "created_by": {
        "user_id": "u_7KpQ2",
        "user_name": "Valentina Ríos"
      },
      "created_at": 1761913600000,
      "updated_at": 1762000000000
    },
    "source": "manual",
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
seo_planner.item.updated

Cambió una acción del SEO Planner

Se dispara en las ediciones de una acción por la API, el MCP o MIA (una o varias a la vez), incluido moverla a otro mes (month_key). changed_fields lista los nombres públicos de los campos que cambiaron. Pasar una acción a completada con una edición también dispara seo_planner.item.completed; seo_planner.items.complete dispara solo seo_planner.item.completed. Las ediciones desde la pantalla del planner todavía no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "seo_planner.item.updated",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "item": {
      "id": "si_8Rk2PqLm4ZtV0bN7xC1d",
      "title": "Optimizar la ficha de producto «Zapatillas running»",
      "subtitle": "Title, meta description y H1 con la keyword principal",
      "type": "on_page_seo",
      "status": "pending",
      "description": "",
      "month_key": "2026-12",
      "scheduled_date": 1796126400000,
      "organization_id": "org_Cl1n1c4N0rt3",
      "sub_actions": [
        {
          "id": "sa_1762000000000_0_k3Zp",
          "title": "Auditar title tags",
          "completed": true,
          "order": 0
        },
        {
          "id": "sa_1762000000000_1_Qm8v",
          "title": "Reescribir meta description",
          "completed": false,
          "order": 1
        }
      ],
      "content_brief": {
        "keyword": "zapatillas running mujer"
      },
      "pack_id": null,
      "pack_source": null,
      "pack_item_id": null,
      "template_id": null,
      "template_source": null,
      "comment_count": 0,
      "created_by": {
        "user_id": "u_7KpQ2",
        "user_name": "Valentina Ríos"
      },
      "created_at": 1761913600000,
      "updated_at": 1762000000000
    },
    "changed_fields": [
      "month_key",
      "scheduled_date"
    ],
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
seo_planner.item.completed

Se completó una acción del SEO Planner

Se dispara una vez cuando una acción pasa al estado completada por la API, el MCP o MIA (seo_planner.items.complete, una edición o una edición en lote). Completarla desde la pantalla del planner todavía no lo dispara.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "seo_planner.item.completed",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "item": {
      "id": "si_8Rk2PqLm4ZtV0bN7xC1d",
      "title": "Optimizar la ficha de producto «Zapatillas running»",
      "subtitle": "Title, meta description y H1 con la keyword principal",
      "type": "on_page_seo",
      "status": "completed",
      "description": "",
      "month_key": "2026-11",
      "scheduled_date": 1793534400000,
      "organization_id": "org_Cl1n1c4N0rt3",
      "sub_actions": [
        {
          "id": "sa_1762000000000_0_k3Zp",
          "title": "Auditar title tags",
          "completed": true,
          "order": 0
        },
        {
          "id": "sa_1762000000000_1_Qm8v",
          "title": "Reescribir meta description",
          "completed": false,
          "order": 1
        }
      ],
      "content_brief": {
        "keyword": "zapatillas running mujer"
      },
      "pack_id": null,
      "pack_source": null,
      "pack_item_id": null,
      "template_id": null,
      "template_source": null,
      "comment_count": 0,
      "created_by": {
        "user_id": "u_7KpQ2",
        "user_name": "Valentina Ríos"
      },
      "created_at": 1761913600000,
      "updated_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
seo_planner.item.deleted

Se eliminó una acción del SEO Planner

Se dispara cuando se elimina una acción por la API, el MCP o MIA (una o en lote, una vez por acción); item es la última copia antes de eliminarla, que queda 30 días en la Papelera. Eliminarla desde la pantalla del planner todavía no lo dispara.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "seo_planner.item.deleted",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "item": {
      "id": "si_8Rk2PqLm4ZtV0bN7xC1d",
      "title": "Optimizar la ficha de producto «Zapatillas running»",
      "subtitle": "Title, meta description y H1 con la keyword principal",
      "type": "on_page_seo",
      "status": "pending",
      "description": "",
      "month_key": "2026-11",
      "scheduled_date": 1793534400000,
      "organization_id": "org_Cl1n1c4N0rt3",
      "sub_actions": [
        {
          "id": "sa_1762000000000_0_k3Zp",
          "title": "Auditar title tags",
          "completed": true,
          "order": 0
        },
        {
          "id": "sa_1762000000000_1_Qm8v",
          "title": "Reescribir meta description",
          "completed": false,
          "order": 1
        }
      ],
      "content_brief": {
        "keyword": "zapatillas running mujer"
      },
      "pack_id": null,
      "pack_source": null,
      "pack_item_id": null,
      "template_id": null,
      "template_source": null,
      "comment_count": 0,
      "created_by": {
        "user_id": "u_7KpQ2",
        "user_name": "Valentina Ríos"
      },
      "created_at": 1761913600000,
      "updated_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}

Rankings

seo_rankings.project.created

Se creó un proyecto de rankings

Se dispara cuando se crea un proyecto de rankings (desde la app, la API, el MCP o MIA): el dominio a seguir, sus buscadores y países, los dispositivos y la programación de las verificaciones. Una cuenta tiene un proyecto; las keywords se agregan después (seo_rankings.keywords.added).

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "seo_rankings.project.created",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "project": {
      "id": "rp_8Kd2QmZpV0bT7xL1aR9c",
      "name": "Clínica Norte",
      "domain": "clinicanorte.com",
      "engines": [
        {
          "engine": "google",
          "location_name": "Argentina",
          "country_code": "AR",
          "language_code": "es"
        }
      ],
      "devices": [
        "desktop"
      ],
      "schedule": {
        "frequency": "weekly",
        "day_of_week": 1,
        "day_of_month": null,
        "hour": 9,
        "timezone": "America/Argentina/Buenos_Aires",
        "enabled": true
      },
      "keyword_count": 0,
      "inactive_keyword_count": 0,
      "last_check_at": null,
      "last_check_status": null,
      "next_check_at": 1762345600000,
      "created_at": 1751632000000,
      "updated_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
seo_rankings.project.updated

Cambió la configuración de un proyecto de rankings

Se dispara cuando cambian de verdad el dominio, el nombre, los buscadores y países, los dispositivos o la programación de un proyecto de rankings (una edición que deja todo como estaba no lo dispara). changed_fields lista los nombres públicos de lo que cambió; keywords_stamped cuenta las keywords que siguieron midiéndose en los países anteriores cuando se agregó un país.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "seo_rankings.project.updated",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "project": {
      "id": "rp_8Kd2QmZpV0bT7xL1aR9c",
      "name": "Clínica Norte",
      "domain": "clinicanorte.com",
      "engines": [
        {
          "engine": "google",
          "location_name": "Argentina",
          "country_code": "AR",
          "language_code": "es"
        }
      ],
      "devices": [
        "desktop"
      ],
      "schedule": {
        "frequency": "weekly",
        "day_of_week": 1,
        "day_of_month": null,
        "hour": 9,
        "timezone": "America/Argentina/Buenos_Aires",
        "enabled": true
      },
      "keyword_count": 84,
      "inactive_keyword_count": 6,
      "last_check_at": 1761740800000,
      "last_check_status": "completed",
      "next_check_at": 1762345600000,
      "created_at": 1751632000000,
      "updated_at": 1762000000000
    },
    "changed_fields": [
      "schedule"
    ],
    "keywords_stamped": 0,
    "retired_pos_keys": [],
    "positions_cleared": 0,
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
seo_rankings.project.deleted

Se eliminó un proyecto de rankings

Se dispara cuando se elimina un proyecto de rankings con sus keywords y todo su historial de posiciones. project es la última copia antes de eliminarlo; la Papelera guarda una copia de solo lectura del proyecto y sus keywords durante 30 días (no se restaura automáticamente).

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "seo_rankings.project.deleted",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "project": {
      "id": "rp_8Kd2QmZpV0bT7xL1aR9c",
      "name": "Clínica Norte",
      "domain": "clinicanorte.com",
      "engines": [
        {
          "engine": "google",
          "location_name": "Argentina",
          "country_code": "AR",
          "language_code": "es"
        }
      ],
      "devices": [
        "desktop"
      ],
      "schedule": {
        "frequency": "weekly",
        "day_of_week": 1,
        "day_of_month": null,
        "hour": 9,
        "timezone": "America/Argentina/Buenos_Aires",
        "enabled": true
      },
      "keyword_count": 84,
      "inactive_keyword_count": 6,
      "last_check_at": 1761740800000,
      "last_check_status": "completed",
      "next_check_at": 1762345600000,
      "created_at": 1751632000000,
      "updated_at": 1762000000000
    },
    "keywords_deleted": 90,
    "checks_deleted": 4680,
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
seo_rankings.keywords.added

Se agregaron keywords a un proyecto

Se dispara una vez por cada llamada que agrega keywords a un proyecto, desde la app (incluida la importación de historial por CSV, source import), la API, el MCP o MIA. added son las keywords nuevas; reactivated ya estaban en el proyecto como inactivas y volvieron con su historial. Las keywords que cargan las herramientas de soporte de MB Suite directo en la base de datos no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "seo_rankings.keywords.added",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "project": {
      "id": "rp_8Kd2QmZpV0bT7xL1aR9c",
      "name": "Clínica Norte",
      "domain": "clinicanorte.com"
    },
    "source": "manual",
    "added": [
      {
        "id": "kw_3Hq2LmZpV0bT7xL1",
        "keyword": "implantes dentales precio",
        "status": "active"
      },
      {
        "id": "kw_9Wd4KpQ2mZ7xV1bN",
        "keyword": "clínica dental palermo",
        "status": "active"
      }
    ],
    "reactivated": [],
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
seo_rankings.keywords.removed

Se eliminaron keywords de un proyecto

Se dispara una vez por cada llamada que elimina keywords de un proyecto (una o varias). Eliminarlas también elimina su historial de posiciones: cada keyword y sus mediciones más recientes quedan 30 días en la Papelera. Para dejar de medir una keyword y conservar su historial, se la desactiva (seo_rankings.keywords.status_changed).

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "seo_rankings.keywords.removed",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "project": {
      "id": "rp_8Kd2QmZpV0bT7xL1aR9c",
      "name": "Clínica Norte",
      "domain": "clinicanorte.com"
    },
    "keywords": [
      {
        "id": "kw_3Hq2LmZpV0bT7xL1",
        "keyword": "implantes dentales precio",
        "status": "active"
      }
    ],
    "checks_deleted": 52,
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
seo_rankings.keywords.status_changed

Se activaron o desactivaron keywords

Se dispara una vez por cada llamada que activa o desactiva keywords de un proyecto. Las keywords inactivas no se miden (sin costo ni cuota) y conservan sus etiquetas, su última posición y su historial; las activas se vuelven a medir en la próxima verificación. Solo se listan las keywords cuyo estado cambió de verdad.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "seo_rankings.keywords.status_changed",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "project": {
      "id": "rp_8Kd2QmZpV0bT7xL1aR9c",
      "name": "Clínica Norte",
      "domain": "clinicanorte.com"
    },
    "status": "inactive",
    "keywords": [
      {
        "id": "kw_9Wd4KpQ2mZ7xV1bN",
        "keyword": "clínica dental palermo",
        "status": "inactive"
      }
    ],
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
seo_rankings.check.completed

Terminó una verificación de rankings

Se dispara cuando se recolectaron todas las mediciones de una verificación de rankings (programada o manual) y se recalculó el resumen del proyecto. summary es la distribución de las keywords ACTIVAS en el buscador, el país y el dispositivo principales del proyecto (la combinación con más keywords medidas; pos_key), la posición promedio de las keywords que rankean y las 5 que más subieron y más bajaron frente a la verificación anterior; es null cuando ninguna keyword tiene posición todavía. Lee todas las posiciones con seo_rankings.keywords.list o la grilla del historial con seo_rankings.history.grid. Lo envía el sistema (actor kind system).

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "seo_rankings.check.completed",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "project": {
      "id": "rp_8Kd2QmZpV0bT7xL1aR9c",
      "name": "Clínica Norte",
      "domain": "clinicanorte.com"
    },
    "check": {
      "started_at": 1761997600000,
      "completed_at": 1762000000000
    },
    "keyword_count": 84,
    "summary": {
      "pos_key": "google_AR_desktop",
      "engine": "google",
      "country_code": "AR",
      "device": "desktop",
      "distribution": {
        "top3": 12,
        "top10": 21,
        "top20": 14,
        "top30": 9,
        "not_ranked": 28
      },
      "average_position": 11.4,
      "total_keywords": 84,
      "gainers": [
        {
          "keyword": "implantes dentales precio",
          "position": 4,
          "previous_position": 9,
          "change": 5,
          "search_volume": 2400
        }
      ],
      "losers": [
        {
          "keyword": "ortodoncia invisible",
          "position": 15,
          "previous_position": 8,
          "change": -7,
          "search_volume": 1900
        }
      ],
      "computed_at": 1762000000000,
      "last_checked_at": 1761999700000
    },
    "previous_summary": {
      "pos_key": "google_AR_desktop",
      "engine": "google",
      "country_code": "AR",
      "device": "desktop",
      "distribution": {
        "top3": 11,
        "top10": 20,
        "top20": 15,
        "top30": 10,
        "not_ranked": 28
      },
      "average_position": 12.1,
      "total_keywords": 84,
      "gainers": [],
      "losers": [],
      "computed_at": 1761395200000,
      "last_checked_at": 1761394900000
    },
    "combo_summaries": [
      {
        "pos_key": "google_AR_desktop",
        "engine": "google",
        "country_code": "AR",
        "device": "desktop",
        "primary": true,
        "current_summary": {
          "pos_key": "google_AR_desktop",
          "engine": "google",
          "country_code": "AR",
          "device": "desktop",
          "distribution": {
            "top3": 12,
            "top10": 21,
            "top20": 14,
            "top30": 9,
            "not_ranked": 28
          },
          "average_position": 11.4,
          "total_keywords": 84,
          "gainers": [
            {
              "keyword": "implantes dentales precio",
              "position": 4,
              "previous_position": 9,
              "change": 5,
              "search_volume": 2400
            }
          ],
          "losers": [
            {
              "keyword": "ortodoncia invisible",
              "position": 15,
              "previous_position": 8,
              "change": -7,
              "search_volume": 1900
            }
          ],
          "computed_at": 1762000000000,
          "last_checked_at": 1761999700000
        },
        "previous_summary": {
          "pos_key": "google_AR_desktop",
          "engine": "google",
          "country_code": "AR",
          "device": "desktop",
          "distribution": {
            "top3": 11,
            "top10": 20,
            "top20": 15,
            "top30": 10,
            "not_ranked": 28
          },
          "average_position": 12.1,
          "total_keywords": 84,
          "gainers": [],
          "losers": [],
          "computed_at": 1761395200000,
          "last_checked_at": 1761394900000
        }
      }
    ],
    "actor": {
      "uid": "system:cron-rank-tracking",
      "name": "Sistema de Rankings",
      "kind": "system"
    }
  }
}
seo_rankings.check.failed

Falló una verificación de rankings

Se dispara cuando una verificación de rankings termina con una falla. reason: dispatch_failed (no se pudo mandar ninguna medición al proveedor de SERP; desde una verificación programada o manual), batches_failed (parte de las mediciones falló en las últimas 24 horas) o timeout (la verificación estuvo abierta más de 6 horas). Las posiciones medidas antes de la falla se conservan; la próxima verificación programada corre como siempre.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "seo_rankings.check.failed",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "project": {
      "id": "rp_8Kd2QmZpV0bT7xL1aR9c",
      "name": "Clínica Norte",
      "domain": "clinicanorte.com"
    },
    "check": {
      "started_at": 1761978340000,
      "failed_at": 1762000000000
    },
    "reason": "timeout",
    "error": "Timeout: no response after 6 hours",
    "actor": {
      "uid": "system:cron-rank-tracking",
      "name": "Sistema de Rankings",
      "kind": "system"
    }
  }
}

Indexación

seo_indexation.sitemap.submitted

Se envió un sitemap a Search Console

Se dispara cuando se envía (o se reenvía) un sitemap a una propiedad de Search Console conectada a la organización, desde la pantalla, la API o un agente, una vez que Google lo aceptó. Trae la propiedad (site_url) y la URL del sitemap (path). Google lo descarga y lo procesa después: su estado aparece más tarde en seo_indexation.sitemaps.list. Los sitemaps enviados directamente en Search Console no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "seo_indexation.sitemap.submitted",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "sitemap": {
      "site_url": "https://www.clinicanorte.com/",
      "path": "https://www.clinicanorte.com/sitemap.xml"
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
seo_indexation.sitemap.deleted

Se quitó un sitemap de Search Console

Se dispara cuando se quita un sitemap de una propiedad de Search Console conectada a la organización, desde la pantalla, la API o un agente. Solo cambió la lista de sitemaps de la propiedad: el archivo del sitio queda intacto y se puede volver a enviar. Los sitemaps quitados directamente en Search Console no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "seo_indexation.sitemap.deleted",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "sitemap": {
      "site_url": "https://www.clinicanorte.com/",
      "path": "https://www.clinicanorte.com/sitemap.xml"
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
seo_indexation.coverage.completed

Terminó un análisis de cobertura

Se dispara cuando termina y se guarda un análisis de cobertura de una propiedad de Search Console (seo_indexation.coverage.run, desde la pantalla, la API o un agente): el id del análisis, la propiedad, coverage_score (0–100) y sus conteos (URLs en sitemaps, páginas con impresiones en 90 días, páginas huérfanas y muertas). Las listas de páginas se leen con seo_indexation.coverage.latest. Los análisis de una organización demo no se guardan y no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "seo_indexation.coverage.completed",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "analysis": {
      "id": "Q7mT2xVb9LkR4sNw1PzE",
      "site_url": "https://www.clinicanorte.com/",
      "coverage_score": 87,
      "total_sitemap_urls": 412,
      "total_indexed_urls": 0,
      "total_pages_with_impressions": 368,
      "orphan_pages_count": 14,
      "dead_pages_count": 3,
      "created_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}

Email Marketing

email_marketing.campaign.scheduled

Se programó una campaña de email

Se dispara cuando una campaña recibe una fecha de envío, desde el asistente de campañas o por la API (email_marketing.campaigns.schedule), y otra vez cuando se reprograma una ya programada. scheduled_at es la fecha elegida. A esa hora la campaña sale sola y se dispara email_marketing.campaign.sent con un actor de sistema; si no puede salir dentro de la hora siguiente, no se envía y vuelve a borrador. Editar el contenido o cancelar una campaña programada no lo dispara.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "email_marketing.campaign.scheduled",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "campaign": {
      "id": "cmp_8hQ2a",
      "name": "Novedades de octubre",
      "subject": "{{nombre}}, esto es lo nuevo de octubre",
      "status": "scheduled",
      "from_email": "hola@agencia-rocket.com",
      "from_name": "Agencia Rocket",
      "audience_id": "aud_3Lm7p",
      "audience_name": "Clientes activos",
      "template_id": "tpl_9Xk1z",
      "recipient_source": "audience",
      "recipient_count": 0,
      "suppressed_count": null,
      "scheduled_at": 1762086400000,
      "sent_at": null,
      "created_at": 1761996400000,
      "updated_at": 1762000000000
    },
    "scheduled_at": 1762086400000,
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
email_marketing.campaign.sent

Se mandó una campaña de email

Se dispara una vez cuando se lanza el envío de una campaña: ahora, desde la pantalla o por la API, o a su hora por el envío programado (entonces actor.kind es system y campaign.scheduled_at conserva la hora para la que estaba programada). Se resolvieron sus destinatarios, se dejaron fuera las direcciones suprimidas y duplicadas y cada mensaje quedó en cola. recipient_count es cuántos mensajes quedaron en cola y suppressed_count, cuántas direcciones quitó la lista de supresiones. Los mensajes salen en segundo plano durante los minutos siguientes (status queued → sending → sent); el fin del envío y los resultados por mensaje (entregado, abierto, clic, rebote) todavía no disparan eventos.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "email_marketing.campaign.sent",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "campaign": {
      "id": "cmp_8hQ2a",
      "name": "Novedades de octubre",
      "subject": "{{nombre}}, esto es lo nuevo de octubre",
      "status": "queued",
      "from_email": "hola@agencia-rocket.com",
      "from_name": "Agencia Rocket",
      "audience_id": "aud_3Lm7p",
      "audience_name": "Clientes activos",
      "template_id": "tpl_9Xk1z",
      "recipient_source": "audience",
      "recipient_count": 1240,
      "suppressed_count": 12,
      "scheduled_at": null,
      "sent_at": 1762000000000,
      "created_at": 1761996400000,
      "updated_at": 1762000000000
    },
    "recipient_count": 1240,
    "suppressed_count": 12,
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
email_marketing.flow.enrolled

Se inscribieron contactos en un flow de email

Se dispara una vez por cada pedido de inscripción que inscribió al menos un contacto: un contacto inscrito a mano o por la API, una audiencia inscrita una sola vez (source.type audience_snapshot) o una audiencia vinculada al flow (audience_auto, sus miembros actuales). enrollments lista hasta 100 de las inscripciones creadas; cuando enrollments_truncated es true, recorre las páginas de email_marketing.flows.enrollments.list para ver el resto. Los contactos que inscribe la sincronización de audiencias en segundo plano o un evento de contacto (contact_added, contact_labeled) todavía no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "email_marketing.flow.enrolled",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "flow": {
      "id": "flw_4Tq8r",
      "name": "Bienvenida",
      "status": "active",
      "trigger": "manual"
    },
    "source": {
      "type": "manual",
      "audience_id": null,
      "audience_name": null
    },
    "enrolled_count": 1,
    "skipped_count": 0,
    "enrollments": [
      {
        "id": "enr_6Wn2c",
        "email": "ana@cliente.com",
        "name": "Ana Pérez",
        "contact_id": "ct_1Qa9"
      }
    ],
    "enrollments_truncated": false,
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
email_marketing.flow.exited

Un contacto salió de un flow de email antes de terminarlo

Se dispara cuando una inscripción activa o pausada se saca de su flow a mano, desde el detalle del flow o por la API (email_marketing.flows.enrollments.exit): reason es manual y la inscripción termina cancelada. Las salidas que se deciden en segundo plano (una condición de salida, la lista de supresiones, una baja) y completar el flow todavía no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "email_marketing.flow.exited",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "flow": {
      "id": "flw_4Tq8r",
      "name": "Bienvenida"
    },
    "enrollment": {
      "id": "enr_6Wn2c",
      "email": "ana@cliente.com",
      "name": "Ana Pérez",
      "contact_id": "ct_1Qa9",
      "status": "cancelled"
    },
    "reason": "manual",
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
email_marketing.audience.updated

Cambió la definición de una audiencia

Se dispara cuando se edita una audiencia desde la pantalla o por la API: el nombre, la descripción, sus contactos, sus filtros por etiqueta o por cuenta o sus miembros importados. changed_fields lista los nombres públicos de los campos que cambiaron. Los contactos que entran a una audiencia dinámica porque recibieron una etiqueta no lo disparan (no cambió la audiencia, cambiaron sus miembros), ni tampoco actualizar el conteo de miembros.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "email_marketing.audience.updated",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "audience": {
      "id": "aud_3Lm7p",
      "name": "Clientes activos",
      "type": "dynamic_labels",
      "description": null,
      "member_count": 318,
      "filter_label_ids": [
        "lbl_cliente",
        "lbl_activo"
      ],
      "filter_label_mode": "all",
      "filter_org_ids": null,
      "updated_at": 1762000000000
    },
    "changed_fields": [
      "filter_label_ids",
      "filter_label_mode"
    ],
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}

Cuentas

child_orgs.account.created

Se creó una cuenta

Se dispara una vez por cada cuenta nueva del workspace: desde Cuentas (una por una o con una importación CSV), la API, el MCP o MIA. Una cuenta nueva siempre nace inactiva (child_org_status dormant, billing_mode parent_managed): sin miembros propios y sin cobro. source dice si llegó sola o en un lote.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "child_orgs.account.created",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "account": {
      "id": "org_Cl1n1c4N0rt3",
      "name": "Clínica Norte",
      "slug": "clinica-norte",
      "parent_org_id": "org_W0rksp4c3",
      "status": "active",
      "child_org_status": "dormant",
      "billing_mode": "parent_managed",
      "industry": "Salud / Medicina",
      "website": "https://clinicanorte.com",
      "country": "ar",
      "created_at": 1762000000000
    },
    "source": "single",
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
child_orgs.account.archived

Se archivó una cuenta

Se dispara cuando el workspace archiva una de sus cuentas (desde Cuentas, la configuración de la cuenta abierta desde el workspace, la API, el MCP o MIA): se bloquea su acceso, se pausa su trabajo programado, deja de cobrarse al workspace si el workspace la pagaba y libera un lugar del plan. Archivar una cuenta ya archivada no lo dispara, y una cuenta archivada desde dentro por su propio owner todavía no lo dispara.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "child_orgs.account.archived",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "account": {
      "id": "org_Cl1n1c4N0rt3",
      "name": "Clínica Norte",
      "slug": "clinica-norte",
      "parent_org_id": "org_W0rksp4c3",
      "status": "archived",
      "child_org_status": "dormant",
      "billing_mode": "parent_managed",
      "industry": "Salud / Medicina",
      "website": "https://clinicanorte.com",
      "country": "ar",
      "created_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
child_orgs.account.restored

Se restauró una cuenta archivada

Se dispara cuando el workspace recupera una cuenta archivada (desde Cuentas, la configuración de la cuenta abierta desde el workspace, la API, el MCP o MIA): vuelve a ocupar un lugar del plan y se reanuda lo que el archivado había pausado. Restaurar una cuenta que no estaba archivada no lo dispara, y una cuenta reactivada desde dentro por su propio owner todavía no lo dispara.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "child_orgs.account.restored",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "account": {
      "id": "org_Cl1n1c4N0rt3",
      "name": "Clínica Norte",
      "slug": "clinica-norte",
      "parent_org_id": "org_W0rksp4c3",
      "status": "active",
      "child_org_status": "dormant",
      "billing_mode": "parent_managed",
      "industry": "Salud / Medicina",
      "website": "https://clinicanorte.com",
      "country": "ar",
      "created_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
child_orgs.account.deleted

Se eliminó una cuenta

Se dispara cuando el workspace elimina una de sus cuentas (desde Cuentas, la configuración de la cuenta abierta desde el workspace, la API, el MCP o MIA). La cuenta trae su último estado (archivada). Eliminar una cuenta desde dentro, por su propio owner, todavía no lo dispara.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "child_orgs.account.deleted",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "account": {
      "id": "org_Cl1n1c4N0rt3",
      "name": "Clínica Norte",
      "slug": "clinica-norte",
      "parent_org_id": "org_W0rksp4c3",
      "status": "archived",
      "child_org_status": "dormant",
      "billing_mode": "parent_managed",
      "industry": "Salud / Medicina",
      "website": "https://clinicanorte.com",
      "country": "ar",
      "created_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}

Tareas

task_management.task.created

Se creó una tarea

Se dispara cuando se crea una tarea o subtarea por la API, el MCP o MIA, cuando una tarea recurrente genera su siguiente instancia (source recurrence), cuando se aplica un pack de tareas (source task_pack, un evento por tarea) y cuando una tarea llega desde otra organización (source moved). Las tareas creadas desde la pantalla de Tareas todavía no lo disparan. Las tareas privadas nunca disparan webhooks.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "task_management.task.created",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "task": {
      "id": "tk_5Hq2LmZpV0bT7xL1aR9c",
      "title": "Enviar el reporte mensual a Clínica Norte",
      "description": "<p>Con los resultados de pauta de septiembre.</p>",
      "status_id": "status_todo",
      "priority_id": "prio_high",
      "is_done": false,
      "completed_at": null,
      "assignee_id": "u_7KpQ2",
      "assignee_name": "Valentina Ríos",
      "created_by_id": "u_7KpQ2",
      "organization_id": "org_W0rksp4c3",
      "account_id": "org_Cl1n1c4N0rt3",
      "is_private": false,
      "due_date": 1762259200000,
      "parent_task_id": null,
      "project_id": null,
      "label_ids": [
        "lbl_reportes"
      ],
      "tags": [],
      "alert_user_ids": [
        "u_3bTz8"
      ],
      "watcher_ids": [],
      "recurrence": {
        "frequency": "monthly",
        "interval": 1
      },
      "comment_count": 0,
      "created_at": 1761913600000,
      "updated_at": 1762000000000
    },
    "source": "manual",
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
task_management.task.updated

Cambiaron campos de una tarea

Se dispara en las ediciones de una tarea por la API, el MCP o MIA (una o varias a la vez), al reabrirla y en los cambios de alcance (también desde la app). changed_fields lista los nombres públicos de los campos que cambiaron. Completar una tarea también dispara task_management.task.completed. Las ediciones hechas desde la pantalla de Tareas todavía no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "task_management.task.updated",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "task": {
      "id": "tk_5Hq2LmZpV0bT7xL1aR9c",
      "title": "Enviar el reporte mensual a Clínica Norte",
      "description": "<p>Con los resultados de pauta de septiembre.</p>",
      "status_id": "status_todo",
      "priority_id": "prio_urgent",
      "is_done": false,
      "completed_at": null,
      "assignee_id": "u_7KpQ2",
      "assignee_name": "Valentina Ríos",
      "created_by_id": "u_7KpQ2",
      "organization_id": "org_W0rksp4c3",
      "account_id": "org_Cl1n1c4N0rt3",
      "is_private": false,
      "due_date": 1762259200000,
      "parent_task_id": null,
      "project_id": null,
      "label_ids": [
        "lbl_reportes"
      ],
      "tags": [],
      "alert_user_ids": [
        "u_3bTz8"
      ],
      "watcher_ids": [],
      "recurrence": {
        "frequency": "monthly",
        "interval": 1
      },
      "comment_count": 0,
      "created_at": 1761913600000,
      "updated_at": 1762000000000
    },
    "changed_fields": [
      "priority_id"
    ],
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
task_management.task.completed

Se completó una tarea

Se dispara una vez cuando una tarea pasa de un estado abierto a un estado DONE por la API, el MCP o MIA. Si la tarea es recurrente, next_task_id es el id de su siguiente instancia: la que se acaba de crear (para esa se dispara task_management.task.created) o, si la serie ya tenía la instancia de esa fecha (la tarea se completó, se reabrió y se volvió a completar), esa misma, que no se duplica ni dispara task_management.task.created. Completarla desde la pantalla de Tareas todavía no lo dispara.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "task_management.task.completed",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "task": {
      "id": "tk_5Hq2LmZpV0bT7xL1aR9c",
      "title": "Enviar el reporte mensual a Clínica Norte",
      "description": "<p>Con los resultados de pauta de septiembre.</p>",
      "status_id": "status_done",
      "priority_id": "prio_high",
      "is_done": true,
      "completed_at": 1762000000000,
      "assignee_id": "u_7KpQ2",
      "assignee_name": "Valentina Ríos",
      "created_by_id": "u_7KpQ2",
      "organization_id": "org_W0rksp4c3",
      "account_id": "org_Cl1n1c4N0rt3",
      "is_private": false,
      "due_date": 1762259200000,
      "parent_task_id": null,
      "project_id": null,
      "label_ids": [
        "lbl_reportes"
      ],
      "tags": [],
      "alert_user_ids": [
        "u_3bTz8"
      ],
      "watcher_ids": [],
      "recurrence": {
        "frequency": "monthly",
        "interval": 1
      },
      "comment_count": 0,
      "created_at": 1761913600000,
      "updated_at": 1762000000000
    },
    "next_task_id": "tk_9Wd4KpQ2mZ7xV1bN3sLe",
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
task_management.task.deleted

Se eliminó una tarea

Se dispara cuando se elimina una tarea por la API, el MCP o MIA (una o en lote), una vez por tarea y una vez por cada subtarea que se elimina con ella; la tarea es la última copia antes de eliminarla y queda 30 días en la Papelera. reason: moved significa que se movió a otra organización (desde la app), donde se dispara task_management.task.created. Eliminarla desde la pantalla de Tareas todavía no lo dispara.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "task_management.task.deleted",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "task": {
      "id": "tk_5Hq2LmZpV0bT7xL1aR9c",
      "title": "Enviar el reporte mensual a Clínica Norte",
      "description": "<p>Con los resultados de pauta de septiembre.</p>",
      "status_id": "status_todo",
      "priority_id": "prio_high",
      "is_done": false,
      "completed_at": null,
      "assignee_id": "u_7KpQ2",
      "assignee_name": "Valentina Ríos",
      "created_by_id": "u_7KpQ2",
      "organization_id": "org_W0rksp4c3",
      "account_id": "org_Cl1n1c4N0rt3",
      "is_private": false,
      "due_date": 1762259200000,
      "parent_task_id": null,
      "project_id": null,
      "label_ids": [
        "lbl_reportes"
      ],
      "tags": [],
      "alert_user_ids": [
        "u_3bTz8"
      ],
      "watcher_ids": [],
      "recurrence": {
        "frequency": "monthly",
        "interval": 1
      },
      "comment_count": 0,
      "created_at": 1761913600000,
      "updated_at": 1762000000000
    },
    "reason": "deleted",
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
task_management.comment.added

Alguien comentó una tarea

Se dispara con cada comentario nuevo en una tarea, desde la app, la API, el MCP o MIA. Trae el comentario (HTML depurado en content, texto plano en content_text, ids de los usuarios mencionados) y el id y el título de la tarea. Los comentarios en tareas privadas nunca lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "task_management.comment.added",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "comment": {
      "id": "cm_2Lp8",
      "task_id": "tk_5Hq2LmZpV0bT7xL1aR9c",
      "content": "<p>Listo el borrador, falta el gráfico de conversiones.</p>",
      "content_text": "Listo el borrador, falta el gráfico de conversiones.",
      "mentions": [],
      "created_by_id": "u_7KpQ2",
      "created_by_name": "Valentina Ríos",
      "created_at": 1762000000000
    },
    "task": {
      "id": "tk_5Hq2LmZpV0bT7xL1aR9c",
      "title": "Enviar el reporte mensual a Clínica Norte"
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}

Proyectos

projects.project.created

Se creó un proyecto

Se dispara cuando se crea un proyecto público por la API, el MCP o MIA. status es el estado del proyecto resuelto según su tipo (nombre y categoría). Los proyectos creados desde la pantalla de Proyectos y los que son privados, compartidos con personas puntuales o solo de la agencia no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "projects.project.created",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "project": {
      "id": "pj_4Rt8wQ1mZx",
      "name": "Rediseño del sitio — Clínica Norte",
      "type_id": "type_engagement",
      "status_id": "engagement_status_1",
      "is_closed": false,
      "closed_at": null,
      "is_archived": false,
      "progress_mode": "auto",
      "account_id": "ac_2mN8",
      "owner_id": "u_7KpQ2",
      "owner_name": "Valentina Ríos",
      "member_ids": [
        "u_7KpQ2",
        "u_3HsL9"
      ],
      "start_date": 1761395200000,
      "due_date": 1764592000000,
      "visibility": "public",
      "item_count": 4,
      "task_count": 12,
      "done_task_count": 5,
      "custom_fields": {
        "presupuesto": 4800,
        "trimestre": "q4"
      },
      "created_by_id": "u_7KpQ2",
      "created_at": 1761395200000,
      "updated_at": 1762000000000
    },
    "status": {
      "id": "engagement_status_1",
      "name": "En curso",
      "category": "in_progress"
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
projects.project.updated

Cambiaron campos de un proyecto

Se dispara cuando se edita un proyecto público por la API, el MCP o MIA, o cuando se editan los estados de sus ítems desde el tablero del proyecto: su nombre, estado, fechas, responsable, equipo, campos personalizados, configuración de ítems o privacidad. changed_fields lista los nombres públicos de los campos que cambiaron; los contadores (ítems, tareas) no cuentan como cambio. Un proyecto que deja de ser público deja de disparar eventos. Las demás ediciones hechas desde la pantalla de Proyectos todavía no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "projects.project.updated",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "project": {
      "id": "pj_4Rt8wQ1mZx",
      "name": "Rediseño del sitio — Clínica Norte",
      "type_id": "type_engagement",
      "status_id": "engagement_status_3",
      "is_closed": true,
      "closed_at": 1762000000000,
      "is_archived": false,
      "progress_mode": "auto",
      "account_id": "ac_2mN8",
      "owner_id": "u_7KpQ2",
      "owner_name": "Valentina Ríos",
      "member_ids": [
        "u_7KpQ2",
        "u_3HsL9"
      ],
      "start_date": 1761395200000,
      "due_date": 1764592000000,
      "visibility": "public",
      "item_count": 4,
      "task_count": 12,
      "done_task_count": 5,
      "custom_fields": {
        "presupuesto": 4800,
        "trimestre": "q4"
      },
      "created_by_id": "u_7KpQ2",
      "created_at": 1761395200000,
      "updated_at": 1762000000000
    },
    "status": {
      "id": "engagement_status_3",
      "name": "Completado",
      "category": "done"
    },
    "changed_fields": [
      "closed_at",
      "is_closed",
      "status_id"
    ],
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
projects.project.archived

Un proyecto se archivó o se desarchivó

Se dispara cuando un proyecto público se archiva (archived: true: sale de la lista de activos pero conserva sus ítems y tareas) o se desarchiva (archived: false) por la API, el MCP o MIA. Archivar es un estado del proyecto, no una eliminación. Archivarlo desde la pantalla de Proyectos todavía no lo dispara.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "projects.project.archived",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "project": {
      "id": "pj_4Rt8wQ1mZx",
      "name": "Rediseño del sitio — Clínica Norte",
      "type_id": "type_engagement",
      "status_id": "engagement_status_1",
      "is_closed": false,
      "closed_at": null,
      "is_archived": true,
      "progress_mode": "auto",
      "account_id": "ac_2mN8",
      "owner_id": "u_7KpQ2",
      "owner_name": "Valentina Ríos",
      "member_ids": [
        "u_7KpQ2",
        "u_3HsL9"
      ],
      "start_date": 1761395200000,
      "due_date": 1764592000000,
      "visibility": "public",
      "item_count": 4,
      "task_count": 12,
      "done_task_count": 5,
      "custom_fields": {
        "presupuesto": 4800,
        "trimestre": "q4"
      },
      "created_by_id": "u_7KpQ2",
      "created_at": 1761395200000,
      "updated_at": 1762000000000
    },
    "status": {
      "id": "engagement_status_1",
      "name": "En curso",
      "category": "in_progress"
    },
    "archived": true,
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
projects.item.created

Se agregó un ítem a un proyecto

Se dispara cuando se crea un ítem (una fila de un proyecto: un sitio, una campaña, un entregable) en un proyecto público por la API, el MCP o MIA. Trae el ítem, su proyecto (id y nombre) y su estado resuelto según los estados de ítems del proyecto. Los ítems creados desde la pantalla del proyecto o con la importación CSV todavía no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "projects.item.created",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "item": {
      "id": "it_9sD2kL",
      "project_id": "pj_4Rt8wQ1mZx",
      "title": "Landing de turnos online",
      "status_id": "engagement_status_1",
      "assignee_ids": [
        "u_3HsL9"
      ],
      "is_archived": false,
      "due_date": 1762864000000,
      "custom_fields": {
        "url_staging": "https://staging.clinicanorte.com/turnos"
      },
      "order": 20,
      "created_by_id": "u_7KpQ2",
      "created_at": 1761913600000,
      "updated_at": 1762000000000
    },
    "project": {
      "id": "pj_4Rt8wQ1mZx",
      "name": "Rediseño del sitio — Clínica Norte"
    },
    "status": {
      "id": "engagement_status_1",
      "name": "En curso",
      "category": "in_progress"
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
projects.item.updated

Cambiaron campos de un ítem de proyecto

Se dispara cuando se edita un ítem de un proyecto público por la API, el MCP o MIA: su título, estado, asignados, fechas, descripción, campos personalizados o estado de archivado. changed_fields lista los nombres públicos de los campos que cambiaron. Reordenar ítems no lo dispara, y las ediciones desde la pantalla del proyecto todavía no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "projects.item.updated",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "item": {
      "id": "it_9sD2kL",
      "project_id": "pj_4Rt8wQ1mZx",
      "title": "Landing de turnos online",
      "status_id": "engagement_status_3",
      "assignee_ids": [
        "u_3HsL9"
      ],
      "is_archived": false,
      "due_date": 1762864000000,
      "custom_fields": {
        "url_staging": "https://staging.clinicanorte.com/turnos"
      },
      "order": 20,
      "created_by_id": "u_7KpQ2",
      "created_at": 1761913600000,
      "updated_at": 1762000000000
    },
    "project": {
      "id": "pj_4Rt8wQ1mZx",
      "name": "Rediseño del sitio — Clínica Norte"
    },
    "status": {
      "id": "engagement_status_3",
      "name": "Completado",
      "category": "done"
    },
    "changed_fields": [
      "status_id"
    ],
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}

Contactos

contacts.contact.created

Se creó un contacto

Se dispara cuando se agrega un contacto a la agenda de la organización (el módulo Contactos, no el CRM) por la API, el MCP o MIA. Los contactos creados desde la pantalla de Contactos todavía no lo disparan, y los importados nunca lo hacen: para las importaciones, escucha contacts.import.completed.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "contacts.contact.created",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "contact": {
      "id": "Q3vX8mLk2pTz9RbN4cWd",
      "first_name": "Lucía",
      "last_name": "Fernández",
      "email": "lucia.fernandez@clinicanorte.com",
      "phone": "",
      "mobile": "+54 9 11 5555 0101",
      "job_title": "Gerente de Marketing",
      "notes": "Recibe el reporte mensual.",
      "assigned_org_ids": [
        "org_Cl1n1c4N0rt3"
      ],
      "label_ids": [
        "lbl_marketing"
      ],
      "is_favorite": false,
      "organization_id": "org_W0rksp4c3",
      "created_at": 1761913600000,
      "updated_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
contacts.contact.updated

Cambiaron campos de un contacto

Se dispara cuando se edita un contacto por la API, el MCP o MIA, uno por uno o en lote (etiquetas y Cuentas), y cuando se marca o se desmarca como favorito. changed_fields lista los nombres públicos de los campos que cambiaron. Las ediciones desde la pantalla de Contactos todavía no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "contacts.contact.updated",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "contact": {
      "id": "Q3vX8mLk2pTz9RbN4cWd",
      "first_name": "Lucía",
      "last_name": "Fernández",
      "email": "lucia.fernandez@clinicanorte.com",
      "phone": "",
      "mobile": "+54 9 11 5555 0101",
      "job_title": "Gerente de Marketing",
      "notes": "Recibe el reporte mensual.",
      "assigned_org_ids": [
        "org_Cl1n1c4N0rt3"
      ],
      "label_ids": [
        "lbl_marketing",
        "lbl_reportes"
      ],
      "is_favorite": false,
      "organization_id": "org_W0rksp4c3",
      "created_at": 1761913600000,
      "updated_at": 1762000000000
    },
    "changed_fields": [
      "label_ids"
    ],
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
contacts.contact.deleted

Se eliminó un contacto

Se dispara cuando se elimina un contacto por la API, el MCP o MIA, una vez por contacto (también en lote). El contacto es la última copia antes de eliminarlo; queda 30 días en la Papelera y, si se restaura, vuelve con el mismo id. Eliminarlo desde la pantalla de Contactos todavía no lo dispara.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "contacts.contact.deleted",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "contact": {
      "id": "Q3vX8mLk2pTz9RbN4cWd",
      "first_name": "Lucía",
      "last_name": "Fernández",
      "email": "lucia.fernandez@clinicanorte.com",
      "phone": "",
      "mobile": "+54 9 11 5555 0101",
      "job_title": "Gerente de Marketing",
      "notes": "Recibe el reporte mensual.",
      "assigned_org_ids": [
        "org_Cl1n1c4N0rt3"
      ],
      "label_ids": [
        "lbl_marketing"
      ],
      "is_favorite": false,
      "organization_id": "org_W0rksp4c3",
      "created_at": 1761913600000,
      "updated_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
contacts.import.completed

Una importación de contactos creó contactos

Se dispara una vez por cada llamada de importación que creó al menos un contacto: desde la API, el MCP o MIA (contacts.contacts.bulk.import, hasta 500 filas por llamada) y desde la importación CSV de la pantalla de Contactos, que manda sus filas en tandas de 500 (un archivo grande dispara un evento por tanda). contact_ids son los contactos creados; skipped cuenta las filas que coincidieron con un contacto existente y failed, las filas inválidas. Los contactos importados no disparan contacts.contact.created.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "contacts.import.completed",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "import": {
      "imported": 2,
      "skipped": 1,
      "failed": 0,
      "contact_ids": [
        "Q3vX8mLk2pTz9RbN4cWd",
        "H7bK2nQw5sYp1LmZ8vRe"
      ]
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
contacts.email.sent

Se mandó un email desde Contactos

Se dispara después de mandar un email desde el módulo Contactos: la ventana de redacción de la pantalla, la API, el MCP o MIA (contacts.email.send). Trae el id del mensaje del proveedor, el From, el id de quien lo mandó, los destinatarios y el asunto; nunca el cuerpo.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "contacts.email.sent",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "email": {
      "id": "0100019a1b2c3d4e-5f6a7b8c-1d2e-4f5a-9b8c-7d6e5f4a3b2c-000000",
      "from": "Valentina Ríos <valentina@agencia.com>",
      "sender_id": "snd_valentina",
      "to": [
        "lucia.fernandez@clinicanorte.com"
      ],
      "cc": [],
      "subject": "Resultados de septiembre",
      "sent_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}

Media Library

media_library.item.created

Se agregó un archivo a la Media Library

Se dispara cuando un archivo subido por la API se registra en la Media Library (source upload) y cuando el editor de imágenes crea una imagen editada nueva a partir de un original (source canvas_edit, también desde la app). Los archivos subidos desde la pantalla de Media Library y las imágenes que Content Studio, Sesiones de fotos o Ad Creator guardan por su cuenta todavía no lo disparan. item.storage_path identifica el archivo; pide un enlace de descarga con media_library.items.get.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "media_library.item.created",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "item": {
      "id": "mi_8sKq2LmZpV0bT7xL1aR9",
      "original_name": "Campaña primavera - hero.png",
      "filename": "campana_primavera_hero.png",
      "type": "image",
      "size": 482133,
      "folder_id": "mf_3nVb7QwE1rT5yU9iO2pA",
      "tags": [
        "primavera",
        "hero"
      ],
      "source": "upload",
      "storage_path": "organizations/org_Cl1n1c4N0rt3/media-library/mf_3nVb7QwE1rT5yU9iO2pA/1762000000000_campana_primavera_hero.png",
      "width": 1080,
      "height": 1350,
      "uploaded_by": "u_7KpQ2",
      "uploaded_at": 1762000000000,
      "canvas_element_count": 0,
      "organization_id": "org_Cl1n1c4N0rt3"
    },
    "source": "upload",
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
media_library.item.edited

Se editó una imagen con el editor de imágenes

Se dispara cada vez que se guarda una imagen de la Media Library desde el editor de imágenes, en la app, la API, el MCP o MIA. mode: created significa que editar un original produjo una imagen nueva (para esa también se dispara media_library.item.created); mode: updated significa que una imagen editada se volvió a guardar con un archivo nuevo. source_item_id es la imagen que se abrió en el editor y element_count, cuántos elementos tiene la receta.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "media_library.item.edited",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "item": {
      "id": "mi_2Wd4KpQ2mZ7xV1bN3sLe",
      "original_name": "Campaña primavera - hero (editada).png",
      "filename": "campana_primavera_hero.png",
      "type": "image",
      "size": 482133,
      "folder_id": "mf_3nVb7QwE1rT5yU9iO2pA",
      "tags": [
        "primavera",
        "hero"
      ],
      "source": "edited",
      "storage_path": "organizations/org_Cl1n1c4N0rt3/media-library/mf_3nVb7QwE1rT5yU9iO2pA/1762000000000_campana_primavera_hero.png",
      "width": 1080,
      "height": 1350,
      "uploaded_by": "u_7KpQ2",
      "uploaded_at": 1762000000000,
      "canvas_element_count": 2,
      "organization_id": "org_Cl1n1c4N0rt3",
      "edited_from_id": "mi_8sKq2LmZpV0bT7xL1aR9"
    },
    "mode": "created",
    "source_item_id": "mi_8sKq2LmZpV0bT7xL1aR9",
    "element_count": 2,
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
media_library.item.deleted

Se eliminó un archivo de la Media Library

Se dispara cuando se elimina un archivo por la API, el MCP o MIA (uno, en lote o con su carpeta: reason: folder_deleted), una vez por archivo; el ítem es la última copia antes de eliminarlo y queda 30 días en la Papelera, con el archivo guardado para poder restaurarlo. Eliminarlo desde la pantalla de Media Library todavía no lo dispara.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "media_library.item.deleted",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "item": {
      "id": "mi_8sKq2LmZpV0bT7xL1aR9",
      "original_name": "Campaña primavera - hero.png",
      "filename": "campana_primavera_hero.png",
      "type": "image",
      "size": 482133,
      "folder_id": "mf_3nVb7QwE1rT5yU9iO2pA",
      "tags": [
        "primavera",
        "hero"
      ],
      "source": "upload",
      "storage_path": "organizations/org_Cl1n1c4N0rt3/media-library/mf_3nVb7QwE1rT5yU9iO2pA/1762000000000_campana_primavera_hero.png",
      "width": 1080,
      "height": 1350,
      "uploaded_by": "u_7KpQ2",
      "uploaded_at": 1762000000000,
      "canvas_element_count": 0,
      "organization_id": "org_Cl1n1c4N0rt3"
    },
    "reason": "deleted",
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}

Knowledge Base

knowledge_base.article.created

Se publicó un artículo de la Knowledge Base

Se dispara cuando se crea un artículo público, desde la app, la API, el MCP o MIA. Trae el artículo completo (HTML depurado en content, texto plano en content_text, enlaces, metadatos de los adjuntos sin enlaces de descarga, ids de los tags). Los artículos creados como privados, para algunas personas o solo de la agencia no lo disparan; disparan knowledge_base.article.visibility_changed si después pasan a ser públicos.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "knowledge_base.article.created",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "article": {
      "id": "kb_8Rf2LmZpV0bT7xL1aQ3d",
      "title": "Cómo pedir acceso a la cuenta publicitaria de un cliente",
      "content": "<p>Pide el acceso desde el Business Manager del cliente con el rol <strong>Anunciante</strong>.</p>",
      "content_text": "Pide el acceso desde el Business Manager del cliente con el rol Anunciante.",
      "links": [
        {
          "url": "https://www.facebook.com/business/help",
          "title": "Ayuda para empresas de Meta",
          "description": null,
          "domain": "facebook.com"
        }
      ],
      "attachments": [
        {
          "id": "1762000000000_ab12cd",
          "filename": "checklist-accesos.pdf",
          "original_name": "Checklist accesos.pdf",
          "size": 182344,
          "type": "application/pdf",
          "uploaded_at": 1761913600000
        }
      ],
      "tag_ids": [
        "tag_onboarding"
      ],
      "visibility": "public",
      "is_pinned": false,
      "pinned_at": null,
      "created_by_id": "u_7KpQ2",
      "created_by_name": "Valentina Ríos",
      "created_at": 1761913600000,
      "updated_at": 1762000000000,
      "view_count": 12,
      "comment_count": 2
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
knowledge_base.article.updated

Cambió un artículo público de la Knowledge Base

Se dispara cuando un artículo público se edita (título, contenido, enlaces, adjuntos, tags), se fija o se desfija, desde la app, la API, el MCP o MIA, y una vez por artículo cuando los tags cambian en lote. changed_fields lista los nombres públicos de los campos que cambiaron. Las ediciones de artículos no públicos no lo disparan; un cambio de visibilidad dispara knowledge_base.article.visibility_changed en su lugar.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "knowledge_base.article.updated",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "article": {
      "id": "kb_8Rf2LmZpV0bT7xL1aQ3d",
      "title": "Cómo pedir acceso a una cuenta publicitaria",
      "content": "<p>Pide el acceso desde el Business Manager del cliente con el rol <strong>Anunciante</strong>.</p>",
      "content_text": "Pide el acceso desde el Business Manager del cliente con el rol Anunciante.",
      "links": [
        {
          "url": "https://www.facebook.com/business/help",
          "title": "Ayuda para empresas de Meta",
          "description": null,
          "domain": "facebook.com"
        }
      ],
      "attachments": [
        {
          "id": "1762000000000_ab12cd",
          "filename": "checklist-accesos.pdf",
          "original_name": "Checklist accesos.pdf",
          "size": 182344,
          "type": "application/pdf",
          "uploaded_at": 1761913600000
        }
      ],
      "tag_ids": [
        "tag_onboarding"
      ],
      "visibility": "public",
      "is_pinned": false,
      "pinned_at": null,
      "created_by_id": "u_7KpQ2",
      "created_by_name": "Valentina Ríos",
      "created_at": 1761913600000,
      "updated_at": 1762000000000,
      "view_count": 12,
      "comment_count": 2
    },
    "changed_fields": [
      "title"
    ],
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
knowledge_base.article.deleted

Se eliminó un artículo público de la Knowledge Base

Se dispara cuando se elimina un artículo público (uno o en lote), desde la app, la API, el MCP o MIA. El artículo es su última copia antes de eliminarlo; queda 30 días en la Papelera con sus comentarios, donde un owner o admin puede restaurarlo (restaurarlo no dispara knowledge_base.article.created). Eliminar un artículo no público no lo dispara.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "knowledge_base.article.deleted",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "article": {
      "id": "kb_8Rf2LmZpV0bT7xL1aQ3d",
      "title": "Cómo pedir acceso a la cuenta publicitaria de un cliente",
      "content": "<p>Pide el acceso desde el Business Manager del cliente con el rol <strong>Anunciante</strong>.</p>",
      "content_text": "Pide el acceso desde el Business Manager del cliente con el rol Anunciante.",
      "links": [
        {
          "url": "https://www.facebook.com/business/help",
          "title": "Ayuda para empresas de Meta",
          "description": null,
          "domain": "facebook.com"
        }
      ],
      "attachments": [
        {
          "id": "1762000000000_ab12cd",
          "filename": "checklist-accesos.pdf",
          "original_name": "Checklist accesos.pdf",
          "size": 182344,
          "type": "application/pdf",
          "uploaded_at": 1761913600000
        }
      ],
      "tag_ids": [
        "tag_onboarding"
      ],
      "visibility": "public",
      "is_pinned": false,
      "pinned_at": null,
      "created_by_id": "u_7KpQ2",
      "created_by_name": "Valentina Ríos",
      "created_at": 1761913600000,
      "updated_at": 1762000000000,
      "view_count": 12,
      "comment_count": 2
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
knowledge_base.article.visibility_changed

Un artículo de la Knowledge Base pasó a ser público o dejó de serlo

Se dispara cuando la visibilidad de un artículo cambia a public o deja de serlo. Al pasar a público trae el artículo completo (trátalo como nuevo); al dejar de serlo trae solo su id, su título, la visibilidad nueva y la fecha de actualización, para que la integración lo quite (el contenido ya no se comparte). Los cambios entre visibilidades no públicas no lo disparan. changed_fields también lista otros campos editados en el mismo cambio.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "knowledge_base.article.visibility_changed",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "article": {
      "id": "kb_8Rf2LmZpV0bT7xL1aQ3d",
      "title": "Cómo pedir acceso a la cuenta publicitaria de un cliente",
      "visibility": "private",
      "updated_at": 1762000000000
    },
    "from": "public",
    "to": "private",
    "changed_fields": [
      "visibility"
    ],
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}

Web Forms

web_forms.form.published

Un formulario web empezó a recibir respuestas

Se dispara cuando un formulario web pasa a publicado: se crea publicado, se edita de no publicado a publicado o se publica con web_forms.forms.publish (desde la pantalla, la API o un agente). Trae el formulario completo (campos, destinatarios, orígenes permitidos, ajustes antispam, vínculo con el CRM). Despublicarlo no lo dispara, ni tampoco un formulario que activa un script interno por fuera de la plataforma.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "web_forms.form.published",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "form": {
      "id": "6f1c2a9e4b7d4e0f8a3c5b2d1e9f7a6c",
      "name": "Sitio web — Contacto",
      "enabled": true,
      "fields": [
        {
          "name": "nombre",
          "label": "Nombre",
          "type": "text",
          "required": true,
          "crm_template": "name"
        },
        {
          "name": "email",
          "label": "Email",
          "type": "email",
          "required": true,
          "crm_template": "email"
        },
        {
          "name": "telefono",
          "label": "Teléfono",
          "type": "phone",
          "required": false,
          "crm_template": "phone"
        },
        {
          "name": "mensaje",
          "label": "Mensaje",
          "type": "textarea",
          "required": true,
          "crm_template": "message"
        }
      ],
      "honeypot_field_name": "_qzt_field",
      "from_name": "Clínica Norte · sitio web",
      "to_emails": [
        "contacto@clinicanorte.com"
      ],
      "subject": "Nueva consulta de {{nombre}}",
      "reply_to_field": "email",
      "allowed_origins": [
        "https://clinicanorte.com",
        "https://www.clinicanorte.com"
      ],
      "recaptcha_enabled": false,
      "thank_you_url": "https://clinicanorte.com/gracias/",
      "rate_limits": {
        "per_ip_per_minute": 5,
        "per_ip_per_hour": 50,
        "per_form_per_day": 1000
      },
      "email_branding": "mb_suite",
      "crm_enabled": true,
      "linked_source_id": null,
      "auto_responder": null,
      "stats": {
        "total_submissions": 0,
        "total_rejected": 0,
        "total_emails_sent": 0,
        "total_emails_failed": 0,
        "total_leads_created": 0,
        "last_submission_at": null
      },
      "created_at": 1761913600000,
      "updated_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
web_forms.submission.received

Un formulario web recibió una respuesta

Se dispara una vez por cada respuesta real a un formulario web publicado, después de guardarla con su estado final: payload (nombre del campo → valor, tal como se envió), si salió el email de notificación (status success o email_failed), la respuesta automática, el lead del CRM que creó cuando el formulario está vinculado a una fuente de leads (lead_id, lead_type, person_id; el CRM además dispara crm.lead.created) y la atribución de anuncios que capturó el MB Suite Pixel. Las respuestas que descartan los filtros de spam (honeypot, texto sin sentido, firma de bot, reCAPTCHA, límites de frecuencia) y los envíos de prueba desde el editor no lo disparan. La IP del visitante nunca viene incluida.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "web_forms.submission.received",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "form": {
      "id": "6f1c2a9e4b7d4e0f8a3c5b2d1e9f7a6c",
      "name": "Sitio web — Contacto"
    },
    "submission": {
      "id": "Xk2Lp9QmV4rT8sWz1yBc",
      "form_id": "6f1c2a9e4b7d4e0f8a3c5b2d1e9f7a6c",
      "received_at": 1762000000000,
      "origin": "https://www.clinicanorte.com",
      "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15",
      "payload": {
        "nombre": "Mariana López",
        "email": "mariana@example.com",
        "telefono": "+54 9 11 5555-0123",
        "mensaje": "Quiero una cotización para el rediseño del sitio."
      },
      "status": "success",
      "rejection_reason": null,
      "email_sent": true,
      "email_message_id": "0100018f3c2b9d7e-4a1b2c3d-5e6f-7a8b-9c0d-1e2f3a4b5c6d-000000",
      "email_error": null,
      "notification_recipients": [
        "contacto@clinicanorte.com"
      ],
      "auto_responder_sent": false,
      "auto_responder_error": null,
      "auto_responder_skip_reason": null,
      "lead_created": true,
      "lead_id": "pr_9sD2",
      "lead_type": "prospect",
      "person_id": "pe_4hT1",
      "attribution": {
        "platform": "google",
        "attribution_method": "pixel_form_inject",
        "gclid": "Cj0KCQjw-example",
        "utm_source": "google",
        "utm_medium": "cpc",
        "utm_campaign": "rediseno-marzo",
        "landing_url": "https://www.clinicanorte.com/servicios/"
      }
    },
    "actor": {
      "uid": "system:web-forms",
      "name": "Sitio web — Contacto",
      "kind": "system"
    }
  }
}

Bóveda

vault.item.shared

Se compartieron credenciales de la Bóveda con un enlace seguro

Se dispara una vez por cada enlace seguro creado en la Bóveda («Compartir acceso», desde la app de MB Suite): qué credenciales incluye (id y título), la cuenta cliente a la que pertenecen, cuándo vence, si se abre una sola vez, si necesita clave, y el destinatario y la nota que anotó quien lo creó. Nunca trae el enlace, su código, su clave ni ningún secreto: el enlace es una URL al portador y solo quien lo creó puede copiarlo desde la app. Revocar, abrir o bloquear un enlace no lo dispara.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "vault.item.shared",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "share": {
      "id": "Qm7Lp2Xz9KcR4tWv8NbE",
      "status": "active",
      "items": [
        {
          "id": "Vt9kQ2mLx8RzP4wB1cNd",
          "title": "clinicanorte.com — FTP"
        },
        {
          "id": "Hq3sW7eYt1UiO5pA9dFg",
          "title": "clinicanorte.com — Panel de hosting"
        }
      ],
      "assigned_child_org_id": "Gx5Bn2Mk8Rt4Lq7Wc1Zp",
      "expires_at": 1762604800000,
      "max_opens": null,
      "single_use": false,
      "requires_key": true,
      "recipient": {
        "name": "Mariana López",
        "email": "mariana@clinicanorte.com"
      },
      "note": "Accesos para la migración del sitio",
      "locale": "es",
      "created_by": "u_7KpQ2",
      "created_by_name": "Valentina Ríos",
      "created_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
vault.access.requested

Se creó un enlace de pedido de acceso para un cliente

Se dispara cuando alguien crea un pedido de acceso («Pedir acceso»): un enlace de un solo uso donde un cliente carga las credenciales que necesita la agencia, que se cifran al llegar y quedan en la Bóveda. Trae la cuenta cliente, los espacios pedidos (tipo y título sugerido), el mensaje, el destinatario anotado y el vencimiento. Se dispara con los pedidos hechos en la app, por la API (vault.requests.create) o por un script interno. Nunca trae el enlace ni su código (una URL al portador): la persona lo copia desde la app. Cuando el cliente envía el formulario, se dispara vault.access.fulfilled.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "vault.access.requested",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "request": {
      "id": "Rk2Vn8Hc5Tq1Lw9Pz3Ya",
      "status": "pending",
      "assigned_child_org_id": "Gx5Bn2Mk8Rt4Lq7Wc1Zp",
      "child_org_name": "Clínica Norte",
      "slots": [
        {
          "id": "aB3dE5fG",
          "type": "ftp",
          "title": "clinicanorte.com — FTP"
        },
        {
          "id": "hJ7kL9mN",
          "type": "hosting_panel",
          "title": "clinicanorte.com — Panel de hosting"
        }
      ],
      "message": "Para avanzar con la migración necesitamos los accesos de abajo.",
      "recipient": {
        "name": "Mariana López",
        "email": "mariana@clinicanorte.com"
      },
      "expires_at": 1762604800000,
      "locale": "es",
      "created_by": "u_7KpQ2",
      "created_by_name": "Valentina Ríos",
      "created_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
vault.access.fulfilled

Un cliente envió las credenciales de un pedido de acceso

Se dispara una vez cuando un cliente envía el enlace de un pedido de acceso: las credenciales ya están cifradas y guardadas en la Bóveda, asignadas a la cuenta cliente del pedido. Trae el pedido (id, cuenta, quién lo creó), las credenciales creadas (id, título, tipo y si vino una contraseña: nunca la contraseña, el usuario ni el servidor) y el nombre y el email que dejó el cliente, si los dejó. El actor es el enlace público (kind system), no un miembro. La IP del visitante nunca viene incluida.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "vault.access.fulfilled",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "request": {
      "id": "Rk2Vn8Hc5Tq1Lw9Pz3Ya",
      "assigned_child_org_id": "Gx5Bn2Mk8Rt4Lq7Wc1Zp",
      "child_org_name": "Clínica Norte",
      "created_by": "u_7KpQ2",
      "created_by_name": "Valentina Ríos"
    },
    "items": [
      {
        "id": "Vt9kQ2mLx8RzP4wB1cNd",
        "title": "clinicanorte.com — FTP",
        "type": "ftp",
        "has_secret": true
      },
      {
        "id": "Hq3sW7eYt1UiO5pA9dFg",
        "title": "clinicanorte.com — Panel de hosting",
        "type": "hosting_panel",
        "has_secret": true
      }
    ],
    "submitter": {
      "name": "Mariana López",
      "email": "mariana@clinicanorte.com"
    },
    "fulfilled_at": 1762086400000,
    "actor": {
      "uid": "system:vault-link",
      "name": "Public link",
      "kind": "system"
    }
  }
}

Actividad

activity.entry.created

Se creó una entrada de actividad

Se dispara cuando alguien agrega una nota, una reunión o un hito a la línea de tiempo de actividad, o responde una entrada (con parent_entry_id), desde la app, la API, el MCP o MIA. En un workspace, child_org_id es la Cuenta de la que trata la entrada. Trae el texto plano, no el HTML. Los eventos del sistema (auto_event) no lo disparan: cada uno ya tiene el evento de su propio módulo.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "activity.entry.created",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "entry": {
      "id": "ae_8Kq2LmZpV0bT7xL1aR9c",
      "type": "meeting",
      "title": "Revisión mensual con Clínica Norte",
      "meeting_date": 1761996400000,
      "attendee_ids": [
        "u_7KpQ2"
      ],
      "attendee_names": [
        "Valentina Ríos",
        "Martín Paz (Clínica Norte)"
      ],
      "agenda": "Resultados de septiembre y presupuesto de octubre",
      "notes_plain_text": "El cliente aprueba subir el presupuesto de búsqueda un 15 %.",
      "action_items": [
        {
          "id": "ai_1",
          "text": "Enviar la propuesta de presupuesto",
          "is_completed": false,
          "assignee_id": "u_7KpQ2",
          "assignee_name": "Valentina Ríos"
        }
      ],
      "child_org_id": "org_Cl1n1c4N0rt3",
      "child_org_name": "Clínica Norte",
      "label_ids": [
        "lbl_reuniones"
      ],
      "reply_count": 0,
      "is_pinned": false,
      "created_by_id": "u_7KpQ2",
      "created_by_name": "Valentina Ríos",
      "created_by_photo_url": null,
      "created_at": 1762000000000,
      "updated_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}

Perfil

profile.profile.updated

Cambió el perfil de la organización

Se dispara cuando cambia el perfil de la organización por la API, el MCP o MIA (profile.profile.update): nombre, logo, sitio web, industria, país, notas internas, URLs de redes sociales o la moneda y la zona horaria de los reportes. Trae el perfil completo tal como se guardó y changed_fields con las rutas que cambiaron (name, social.youtube, reporting.timezone…). Guardar los mismos valores no lo dispara. Las ediciones hechas en la pantalla de Perfil todavía no lo disparan, y un cambio de slug dispara profile.slug.changed en su lugar.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "profile.profile.updated",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "profile": {
      "id": "Qm7Lp2XvR9sTa4KwZ1cB",
      "name": "Clínica Norte",
      "slug": "clinica-norte",
      "logo": "https://mb-suite.com/api/v1/storage/public/organizations/Qm7Lp2XvR9sTa4KwZ1cB/branding/logo_20261101_clinica-norte.png",
      "website": "https://clinicanorte.com",
      "industry": "Salud / Medicina",
      "country": "ar",
      "notes": "Cuenta con dos sedes; la de Palermo abre los sábados.",
      "social": {
        "facebook": "https://facebook.com/clinicanorte",
        "instagram": "https://instagram.com/clinicanorte",
        "linkedin": null,
        "x": null,
        "youtube": "https://youtube.com/@clinicanorte",
        "tiktok": null
      },
      "reporting": {
        "currency": "ARS",
        "timezone": "America/Argentina/Buenos_Aires"
      },
      "updated_at": 1762000000000
    },
    "changed_fields": [
      "website",
      "social.instagram"
    ],
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
profile.slug.changed

Cambió el slug de la organización

Se dispara cuando cambia el slug de la organización, desde la pantalla de Perfil, la API o el MCP. Las direcciones de la app (mb-suite.com/<slug>/…) y las páginas públicas de reservas del dominio principal (mb-suite.com/book/<slug>/…) pasaron al slug nuevo: los enlaces con previous_slug dejan de funcionar y previous_slug queda disponible para otras organizaciones. Los dominios propios no se ven afectados.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "profile.slug.changed",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "organization": {
      "id": "Qm7Lp2XvR9sTa4KwZ1cB",
      "name": "Clínica Norte"
    },
    "slug": "clinica-norte",
    "previous_slug": "clinica-norte-palermo",
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}

Miembros

members.member.removed

Un miembro salió de la organización o lo quitaron

Se dispara una vez por cada persona que deja de ser miembro directo de la organización: porque un owner o admin la quitó (reason removed; desde la app, la API, el MCP o MIA, una o varias a la vez) o porque se fue por su cuenta (reason left). Sus API keys se suspenden y los webhooks que creó se desactivan enseguida. member es la membresía tal como estaba antes de salir.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "members.member.removed",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "member": {
      "user_id": "u_3bTz8",
      "email": "martin@agencia.com",
      "display_name": "Martín Paz",
      "role": "member",
      "joined_at": 1751632000000
    },
    "reason": "removed",
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
members.member.role_changed

Cambió el rol de un miembro

Se dispara cuando un owner o admin cambia el rol de un miembro (owner, admin, member o viewer) desde la app, la API, el MCP o MIA. member.role es el rol nuevo y previous_role, el anterior. Volver a poner el mismo rol no lo dispara.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "members.member.role_changed",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "member": {
      "user_id": "u_3bTz8",
      "email": "martin@agencia.com",
      "display_name": "Martín Paz",
      "role": "admin",
      "joined_at": 1751632000000
    },
    "previous_role": "member",
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
members.member.permissions_changed

Cambiaron los permisos por módulo de un miembro

Se dispara cuando cambian los permisos por módulo de un member o viewer: editados a mano (source manual) o al aplicar una plantilla de permisos (source preset, un evento por miembro). Trae los mapas nuevos: module_permissions para la organización y child_module_permissions para las Cuentas asignadas al miembro (id del módulo → hidden, view_only o full_access; un módulo que no aparece usa el valor por defecto del rol) y la plantilla de la que salieron. Guardar sin cambios no lo dispara.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "members.member.permissions_changed",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "member": {
      "user_id": "u_3bTz8",
      "email": "martin@agencia.com",
      "display_name": "Martín Paz",
      "role": "member",
      "joined_at": 1751632000000,
      "module_permissions": {
        "crm": "view_only",
        "media_planner": "hidden"
      },
      "child_module_permissions": {},
      "applied_preset_id": "prs_Ventas"
    },
    "source": "preset",
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
members.invitation.created

Se invitó a alguien a la organización

Se dispara cuando se crea una invitación nueva (desde la app, la API, el MCP o MIA), se haya mandado o no el email de invitación. Volver a invitar un email que ya tiene una invitación pendiente la reutiliza y no lo dispara. La invitación vale 30 días; la persona se une cuando la acepta.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "members.invitation.created",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "invitation": {
      "id": "inv_8sKq2",
      "email": "lucia@cliente.com",
      "role": "member",
      "invited_by": "Valentina Ríos",
      "invited_by_id": "u_7KpQ2",
      "created_at": 1762000000000,
      "expires_at": 1764592000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}

Branding

branding.settings.updated

Cambió el Brand Kit

Se dispara cuando cambia el Brand Kit de la organización: nombre de la app, logos, favicon, logo de reportes, colores, fuentes o botones, desde la pantalla de Branding, la API, el MCP o MIA. changed_fields lista los nombres públicos que cambiaron; reset_section es colors, fonts o buttons cuando se restableció una sección entera a los valores por defecto de MB Suite (si no, null). Guardar los mismos valores no lo dispara.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "branding.settings.updated",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "settings": {
      "app_name": "Rocket Suite",
      "logo": "https://mb-suite.com/api/v1/storage/public/organizations/org_W0rksp4c3/branding/logo_20261101_rocket.png",
      "logo_dark": null,
      "logo_icon": null,
      "favicon": "https://mb-suite.com/api/v1/storage/public/organizations/org_W0rksp4c3/branding/favicon-1762000000000.png",
      "report_logo": null,
      "primary_color": "#148BEF",
      "accent_color": "#3195DA",
      "brand_colors": [
        "#0F172A",
        "#F97316"
      ],
      "heading_font": "Georgia, 'Times New Roman', serif",
      "heading_font_name": "Georgia",
      "body_font": "Helvetica, Arial, sans-serif",
      "body_font_name": "Helvetica",
      "button_shape": "rounded",
      "button_style": "filled",
      "button_color": "#148BEF",
      "button_text_color": "#FFFFFF",
      "configured_at": 1762000000000,
      "configured_by": "u_7KpQ2"
    },
    "changed_fields": [
      "primary_color",
      "accent_color"
    ],
    "reset_section": null,
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
branding.domain.added

Se registró un dominio o subdominio

Se dispara cuando la organización registra una dirección: su propio dominio o un subdominio de MB Suite, para el acceso del equipo (la app white-label) o para el portal de clientes (surface team_access o client_portal; kind custom_domain o subdomain). Un dominio propio empieza sin verificar: branding.domain.verified se dispara cuando su DNS queda bien configurado. Cambiar el subdominio del equipo también dispara branding.domain.removed para el anterior.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "branding.domain.added",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "domain": {
      "surface": "team_access",
      "kind": "custom_domain",
      "host": "app.rocketagencia.com",
      "label": null,
      "enabled": true,
      "verified": false,
      "added_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
branding.domain.removed

Se quitó un dominio o subdominio

Se dispara cuando la organización quita una dirección (acceso del equipo o portal de clientes; dominio propio o subdominio), y para el subdominio anterior del equipo cuando se reemplaza. Desde entonces esa dirección ya no abre MB Suite; los registros DNS en el registrador no se tocan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "branding.domain.removed",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "domain": {
      "surface": "team_access",
      "kind": "custom_domain",
      "host": "app.rocketagencia.com",
      "label": null,
      "enabled": true,
      "verified": true,
      "added_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
branding.domain.verified

Se verificó un dominio propio

Se dispara una vez cuando un dominio propio (acceso del equipo o portal de clientes) pasa de sin verificar a verificado: el proveedor de hosting validó la titularidad y el DNS apunta a MB Suite, así que la dirección empieza a servir la app white-label o el portal. Se comprueba cuando alguien lo verifica (pantalla de Branding, pantalla del portal de clientes, branding.custom_domain.verify o branding.portal_domains.verify).

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "branding.domain.verified",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "domain": {
      "surface": "team_access",
      "kind": "custom_domain",
      "host": "app.rocketagencia.com",
      "label": null,
      "enabled": true,
      "verified": true,
      "added_at": 1762000000000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
branding.email_domain.verified

Se verificó el dominio de envío

Se dispara una vez cuando el dominio de envío de emails de la organización pasa de pendiente a verificado en Amazon SES (DKIM y MAIL FROM encontrados en el DNS), cuando alguien lo comprueba desde la pantalla de Branding, la API o el MCP. Desde entonces se pueden usar sus remitentes: campañas, flows, reportes y emails compartidos salen desde las direcciones propias de la organización.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "branding.email_domain.verified",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "email_domain": {
      "domain": "rocketagencia.com",
      "status": "verified",
      "verified_at": 1762000000000,
      "default_sender": {
        "email": "hola@rocketagencia.com",
        "name": "Rocket Agencia"
      }
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}

Client Portal

client_portal.client.invited

Se invitó a un cliente al portal

Se dispara cuando se crea una invitación al portal de clientes del workspace, desde la app, la API, el MCP o MIA. Trae la invitación (email, las cuentas y secciones que va a tener el cliente, quién invitó, expires_at) y email_sent (false cuando la invitación se creó pero su email falló; reenviarla no lo vuelve a disparar). Nunca trae el enlace de registro. client_portal.client.registered se dispara cuando la persona crea su cuenta.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "client_portal.client.invited",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "invitation": {
      "id": "8Zq2LmNpV0bT7xL1aR9c",
      "email": "marketing@clinicanorte.com",
      "display_name": "Laura Gómez",
      "assigned_child_org_ids": [
        "org_Cl1n1c4N0rt3"
      ],
      "enabled_modules": {
        "monitors": true,
        "dashboards": true,
        "reports": true,
        "paid_insights": true,
        "paid_media": true,
        "social_insights": false,
        "social_media": true,
        "social_competitors": false,
        "seo": true,
        "seo_rankings": false,
        "seo_site_auditor": false,
        "ai_chat": true,
        "apps_ads_visualizer": true,
        "apps_utm_builder": true
      },
      "status": "pending",
      "invited_by": "u_7KpQ2",
      "invited_by_name": "Valentina Ríos",
      "created_at": 1762000000000,
      "expires_at": 1764592000000
    },
    "email_sent": true,
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
client_portal.client.registered

Un cliente invitado creó su cuenta del portal

Se dispara una vez cuando una persona acepta una invitación al portal y crea su cuenta (email y contraseña, o Google): desde ese momento puede iniciar sesión. Trae el cliente nuevo (su id es su id de cliente en client_portal.clients.*: email, cuentas, secciones, auth_provider) e invitation_id; el actor es el cliente. Los clientes a los que se les da acceso directo con contraseña desde la app no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "client_portal.client.registered",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "client": {
      "id": "Uq4XyZp1R8sKm2Ln6Tb0Wd3EfGh1",
      "email": "marketing@clinicanorte.com",
      "display_name": "Laura Gómez",
      "status": "active",
      "assigned_child_org_ids": [
        "org_Cl1n1c4N0rt3"
      ],
      "enabled_modules": {
        "monitors": true,
        "dashboards": true,
        "reports": true,
        "paid_insights": true,
        "paid_media": true,
        "social_insights": false,
        "social_media": true,
        "social_competitors": false,
        "seo": true,
        "seo_rankings": false,
        "seo_site_auditor": false,
        "ai_chat": true,
        "apps_ads_visualizer": true,
        "apps_utm_builder": true
      },
      "auth_method": "invitation",
      "auth_provider": "password",
      "invitation_id": "8Zq2LmNpV0bT7xL1aR9c",
      "created_at": 1762003600000,
      "registered_at": 1762003600000,
      "last_accessed_at": 1762003700000
    },
    "invitation_id": "8Zq2LmNpV0bT7xL1aR9c",
    "actor": {
      "uid": "Uq4XyZp1R8sKm2Ln6Tb0Wd3EfGh1",
      "name": "Laura Gómez",
      "kind": "user"
    }
  }
}
client_portal.client.deactivated

Un cliente del portal perdió el acceso

Se dispara cuando se desactiva un cliente del portal por la API, el MCP o MIA: ya no puede iniciar sesión y sus sesiones abiertas terminaron (sessions_ended). Trae el cliente con status inactive. No se eliminó nada: si recupera el acceso, se dispara client_portal.client.reactivated. Desactivarlo desde la lista de clientes de la app todavía no lo dispara.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "client_portal.client.deactivated",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "client": {
      "id": "Uq4XyZp1R8sKm2Ln6Tb0Wd3EfGh1",
      "email": "marketing@clinicanorte.com",
      "display_name": "Laura Gómez",
      "status": "inactive",
      "assigned_child_org_ids": [
        "org_Cl1n1c4N0rt3"
      ],
      "enabled_modules": {
        "monitors": true,
        "dashboards": true,
        "reports": true,
        "paid_insights": true,
        "paid_media": true,
        "social_insights": false,
        "social_media": true,
        "social_competitors": false,
        "seo": true,
        "seo_rankings": false,
        "seo_site_auditor": false,
        "ai_chat": true,
        "apps_ads_visualizer": true,
        "apps_utm_builder": true
      },
      "auth_method": "invitation",
      "auth_provider": "password",
      "invitation_id": "8Zq2LmNpV0bT7xL1aR9c",
      "created_at": 1762003600000,
      "registered_at": 1762003600000,
      "last_accessed_at": 1762003700000
    },
    "sessions_ended": true,
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
client_portal.client.reactivated

Un cliente del portal recuperó el acceso

Se dispara cuando se reactiva un cliente del portal desactivado por la API, el MCP o MIA: puede volver a iniciar sesión con el mismo acceso y ver las cuentas y secciones que tenía. Trae el cliente con status active. Reactivarlo desde la lista de clientes de la app todavía no lo dispara.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "client_portal.client.reactivated",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "client": {
      "id": "Uq4XyZp1R8sKm2Ln6Tb0Wd3EfGh1",
      "email": "marketing@clinicanorte.com",
      "display_name": "Laura Gómez",
      "status": "active",
      "assigned_child_org_ids": [
        "org_Cl1n1c4N0rt3"
      ],
      "enabled_modules": {
        "monitors": true,
        "dashboards": true,
        "reports": true,
        "paid_insights": true,
        "paid_media": true,
        "social_insights": false,
        "social_media": true,
        "social_competitors": false,
        "seo": true,
        "seo_rankings": false,
        "seo_site_auditor": false,
        "ai_chat": true,
        "apps_ads_visualizer": true,
        "apps_utm_builder": true
      },
      "auth_method": "invitation",
      "auth_provider": "password",
      "invitation_id": "8Zq2LmNpV0bT7xL1aR9c",
      "created_at": 1762003600000,
      "registered_at": 1762003600000,
      "last_accessed_at": 1762003700000
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}

Integraciones

integrations.credential.disconnected

Se desconectó una conexión de plataforma

Se dispara cuando alguien desconecta una de las conexiones de plataforma de la organización (Google Ads, Meta, TikTok, LinkedIn, YouTube, WhatsApp…), desde la app, la API, el MCP o MIA, una vez por conexión (desconectar una plataforma entera dispara uno por conexión). credential es su último estado, sin tokens; cleaned_data_sources lista las plataformas de Fuentes de datos que se desvincularon con ella y paused_lead_sources, cuántas fuentes de leads del CRM se pausaron. Cada cuenta desvinculada también dispara integrations.data_source.unlinked. Una conexión que quita la propia Meta (la persona quitó la app) todavía no lo dispara. La de LinkedIn o TikTok no llega a un webhook: sus términos no dejan enviarle los datos de la cuenta conectada.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "integrations.credential.disconnected",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "credential": {
      "id": "Kd8sPq2LmZ0vT7xA1bR9",
      "platform": "google_ads",
      "name": "Clínica Norte",
      "status": "active",
      "auth_error": null,
      "account": {
        "id": null,
        "name": "Valentina Ríos",
        "email": "valentina@clinicanorte.com"
      },
      "connected_by": "valentina@clinicanorte.com",
      "connected_at": 1754224000000,
      "token_expires_at": null,
      "refresh_token_expires_at": null,
      "last_reauthorized_at": null,
      "inherited": false,
      "owner_org_id": "org_Cl1n1c4N0rt3",
      "scope_status": "ok",
      "missing_scopes": []
    },
    "cleaned_data_sources": [
      "google_ads"
    ],
    "paused_lead_sources": 1,
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
integrations.data_source.linked

Se vinculó una cuenta en Fuentes de datos

Se dispara cuando una cuenta de una plataforma (una cuenta publicitaria, una propiedad de analítica, un sitio de Search Console, un perfil de negocio, una página, un canal o un número de WhatsApp) se vincula a la organización en Fuentes de datos, desde la app, la API, el MCP o MIA (source manual) o por la asignación en lote de su workspace (source bulk_assignment, que se dispara en la Cuenta). Actualizar una cuenta que ya estaba vinculada no lo dispara. Las cuentas que se eligen dentro de un flujo de conexión OAuth (Meta, TikTok, alta de WhatsApp) todavía no lo disparan.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "integrations.data_source.linked",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "data_source": {
      "platform": "google_ads",
      "id": "1234567890",
      "composite_id": "google_ads:1234567890",
      "name": "Clínica Norte — Search",
      "is_default": true,
      "inherited": true,
      "source_org_id": "org_W0rksp4c3",
      "fields": {
        "external_customer_id": "1234567890",
        "name": "Clínica Norte — Search",
        "mcc_id": "9990001111",
        "currency": "ARS"
      }
    },
    "source": "manual",
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
integrations.data_source.unlinked

Se desvinculó una cuenta de Fuentes de datos

Se dispara una vez por cada cuenta que deja de estar vinculada a la organización en Fuentes de datos, con el motivo: unlinked (esa cuenta), platform_unlinked (todas las cuentas de su plataforma), replaced (otra cuenta ocupó su lugar), credential_disconnected (se desconectó su conexión), inheritance_deactivated (el workspace dejó de conectar la plataforma en esta Cuenta), mode_changed (la Cuenta pasó la plataforma a su propia conexión) o bulk_assignment (la asignación en lote del workspace dejó a la Cuenta sin ella). data_source es su último estado.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "integrations.data_source.unlinked",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "data_source": {
      "platform": "google_ads",
      "id": "1234567890",
      "composite_id": "google_ads:1234567890",
      "name": "Clínica Norte — Search",
      "is_default": true,
      "inherited": true,
      "source_org_id": "org_W0rksp4c3",
      "fields": {
        "external_customer_id": "1234567890",
        "name": "Clínica Norte — Search",
        "mcc_id": "9990001111",
        "currency": "ARS"
      }
    },
    "reason": "unlinked",
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}

Partners

partners.invitation.sent

Se mandó por email una invitación de partner

Se dispara cuando el workspace manda por email una invitación de partner al owner de otra organización (desde la app, la API, el MCP o MIA), y otra vez con cada reenvío (resent: true, con el nuevo expires_at).

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "partners.invitation.sent",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "invitation": {
      "id": "pinv_8Zt2QmLx4RkV0bN7aYcE",
      "status": "pending",
      "recipient_email": "owner@clinicanorte.example",
      "parent_org_id": "org_W0rksp4c3",
      "parent_org_name": "Agencia Rocket",
      "invited_by": "u_7KpQ2",
      "invited_by_name": "Valentina Ríos",
      "invited_by_email": "valentina@agenciarocket.example",
      "created_at": 1762000000000,
      "expires_at": 1762604800000,
      "responded_at": null,
      "cancelled_at": null,
      "child_org_id": null,
      "child_org_name": null
    },
    "resent": false,
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
partners.invitation.accepted

Una organización aceptó la invitación y ahora es una cuenta

Se dispara cuando la persona invitada acepta una invitación de partner en la app de MB Suite con una de las organizaciones de las que es owner: desde ahora es una cuenta del workspace (account) y sigue pagando su propia suscripción (billing mode self_pays). El actor es la persona que aceptó, desde la otra organización.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "partners.invitation.accepted",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "invitation": {
      "id": "pinv_8Zt2QmLx4RkV0bN7aYcE",
      "status": "accepted",
      "recipient_email": "owner@clinicanorte.example",
      "parent_org_id": "org_W0rksp4c3",
      "parent_org_name": "Agencia Rocket",
      "invited_by": "u_7KpQ2",
      "invited_by_name": "Valentina Ríos",
      "invited_by_email": "valentina@agenciarocket.example",
      "created_at": 1762000000000,
      "expires_at": 1762604800000,
      "responded_at": 1762086400000,
      "cancelled_at": null,
      "child_org_id": "org_Cl1n1c4N0rt3",
      "child_org_name": "Clínica Norte"
    },
    "account": {
      "id": "org_Cl1n1c4N0rt3",
      "name": "Clínica Norte"
    },
    "actor": {
      "uid": "u_2Wd8Xs",
      "name": "Martín Paz",
      "kind": "user"
    }
  }
}
partners.invitation.declined

La persona invitada rechazó una invitación de partner

Se dispara cuando la persona invitada rechaza una invitación de partner en la app de MB Suite. El actor es esa persona, desde fuera del workspace.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "partners.invitation.declined",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "invitation": {
      "id": "pinv_8Zt2QmLx4RkV0bN7aYcE",
      "status": "declined",
      "recipient_email": "owner@clinicanorte.example",
      "parent_org_id": "org_W0rksp4c3",
      "parent_org_name": "Agencia Rocket",
      "invited_by": "u_7KpQ2",
      "invited_by_name": "Valentina Ríos",
      "invited_by_email": "valentina@agenciarocket.example",
      "created_at": 1762000000000,
      "expires_at": 1762604800000,
      "responded_at": 1762086400000,
      "cancelled_at": null,
      "child_org_id": null,
      "child_org_name": null
    },
    "actor": {
      "uid": "u_2Wd8Xs",
      "name": "Martín Paz",
      "kind": "user"
    }
  }
}
partners.invitation.cancelled

El workspace canceló una invitación de partner

Se dispara cuando el workspace cancela una invitación de partner pendiente (desde la app, la API, el MCP o MIA). Cancelar una que ya estaba cancelada no lo vuelve a disparar.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "partners.invitation.cancelled",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "invitation": {
      "id": "pinv_8Zt2QmLx4RkV0bN7aYcE",
      "status": "cancelled",
      "recipient_email": "owner@clinicanorte.example",
      "parent_org_id": "org_W0rksp4c3",
      "parent_org_name": "Agencia Rocket",
      "invited_by": "u_7KpQ2",
      "invited_by_name": "Valentina Ríos",
      "invited_by_email": "valentina@agenciarocket.example",
      "created_at": 1762000000000,
      "expires_at": 1762604800000,
      "responded_at": null,
      "cancelled_at": 1762086400000,
      "child_org_id": null,
      "child_org_name": null
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
partners.billing_transition.requested

El workspace le pidió a una cuenta pasar su facturación a la agencia

Se dispara cuando el workspace le pide a una de sus cuentas self_pays que pase a pagarla la agencia (desde la app, la API, el MCP o MIA). Nada cambia en la facturación hasta que la cuenta acepta.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "partners.billing_transition.requested",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "billing_transition": {
      "id": "btr_3Hq9LmZpV0bT7xL1aR2d",
      "status": "pending",
      "direction": "to_parent_pays",
      "parent_org_id": "org_W0rksp4c3",
      "parent_org_name": "Agencia Rocket",
      "child_org_id": "org_Cl1n1c4N0rt3",
      "child_org_name": "Clínica Norte",
      "requested_by": "u_7KpQ2",
      "requested_by_name": "Valentina Ríos",
      "created_at": 1762000000000,
      "scheduled_for": null,
      "accepted_at": null,
      "accepted_by": null,
      "completed_at": null,
      "rejected_at": null,
      "rejected_by": null,
      "rejected_by_name": null,
      "cancelled_at": null,
      "cancelled_by": null,
      "cancelled_by_name": null
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}
partners.billing_transition.scheduled

La cuenta aceptó: su facturación pasa a la agencia al final de su período

Se dispara cuando la cuenta acepta el pedido en la app de MB Suite mientras tiene una suscripción activa: la suscripción no se renueva y, en scheduled_for (el final de su período pagado), la agencia empieza a pagarla (partners.billing_transition.completed). Una cuenta en prueba o sin suscripción pasa enseguida y solo dispara .completed.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "partners.billing_transition.scheduled",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "billing_transition": {
      "id": "btr_3Hq9LmZpV0bT7xL1aR2d",
      "status": "scheduled",
      "direction": "to_parent_pays",
      "parent_org_id": "org_W0rksp4c3",
      "parent_org_name": "Agencia Rocket",
      "child_org_id": "org_Cl1n1c4N0rt3",
      "child_org_name": "Clínica Norte",
      "requested_by": "u_7KpQ2",
      "requested_by_name": "Valentina Ríos",
      "created_at": 1762000000000,
      "scheduled_for": 1763728000000,
      "accepted_at": 1762086400000,
      "accepted_by": "u_2Wd8Xs",
      "completed_at": null,
      "rejected_at": null,
      "rejected_by": null,
      "rejected_by_name": null,
      "cancelled_at": null,
      "cancelled_by": null,
      "cancelled_by_name": null
    },
    "actor": {
      "uid": "u_2Wd8Xs",
      "name": "Martín Paz",
      "kind": "user"
    }
  }
}
partners.billing_transition.completed

Ahora la agencia paga la cuenta

Se dispara cuando se concreta el cambio: la cuenta pasa a billing mode parent_pays (la agencia paga sus módulos desde su próxima factura) y hereda las integraciones de la agencia. Ocurre cuando la cuenta acepta estando en prueba, o lo hace el sistema cuando termina su período pagado (actor kind system).

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "partners.billing_transition.completed",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "billing_transition": {
      "id": "btr_3Hq9LmZpV0bT7xL1aR2d",
      "status": "completed",
      "direction": "to_parent_pays",
      "parent_org_id": "org_W0rksp4c3",
      "parent_org_name": "Agencia Rocket",
      "child_org_id": "org_Cl1n1c4N0rt3",
      "child_org_name": "Clínica Norte",
      "requested_by": "u_7KpQ2",
      "requested_by_name": "Valentina Ríos",
      "created_at": 1762000000000,
      "scheduled_for": 1763728000000,
      "accepted_at": 1762086400000,
      "accepted_by": "u_2Wd8Xs",
      "completed_at": 1763728000000,
      "rejected_at": null,
      "rejected_by": null,
      "rejected_by_name": null,
      "cancelled_at": null,
      "cancelled_by": null,
      "cancelled_by_name": null
    },
    "actor": {
      "uid": "system:billing-transition",
      "name": "Billing transitions",
      "kind": "system"
    }
  }
}
partners.billing_transition.rejected

La cuenta rechazó el pedido

Se dispara cuando el owner o un admin de la cuenta rechaza el pedido (desde la app, la API, el MCP o MIA): la cuenta sigue pagando su propia suscripción.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "partners.billing_transition.rejected",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "billing_transition": {
      "id": "btr_3Hq9LmZpV0bT7xL1aR2d",
      "status": "rejected",
      "direction": "to_parent_pays",
      "parent_org_id": "org_W0rksp4c3",
      "parent_org_name": "Agencia Rocket",
      "child_org_id": "org_Cl1n1c4N0rt3",
      "child_org_name": "Clínica Norte",
      "requested_by": "u_7KpQ2",
      "requested_by_name": "Valentina Ríos",
      "created_at": 1762000000000,
      "scheduled_for": null,
      "accepted_at": null,
      "accepted_by": null,
      "completed_at": null,
      "rejected_at": 1762086400000,
      "rejected_by": "u_2Wd8Xs",
      "rejected_by_name": "Martín Paz",
      "cancelled_at": null,
      "cancelled_by": null,
      "cancelled_by_name": null
    },
    "actor": {
      "uid": "u_2Wd8Xs",
      "name": "Martín Paz",
      "kind": "user"
    }
  }
}
partners.billing_transition.cancelled

Se canceló un pedido de transición de facturación

Se dispara cuando cualquiera de las dos partes cancela un pedido pendiente (desde la app, la API, el MCP o MIA), o uno programado desde la app (la suscripción de la cuenta vuelve a renovarse). Nada cambia en la facturación.

{
  "id": "evt_4f9c1a7e2b6d0c3a8e5f1b9d2c",
  "type": "partners.billing_transition.cancelled",
  "created_at": "2025-11-01T12:26:40.000Z",
  "api_version": "2026-11-01",
  "org_id": "ORG_ID",
  "data": {
    "billing_transition": {
      "id": "btr_3Hq9LmZpV0bT7xL1aR2d",
      "status": "cancelled",
      "direction": "to_parent_pays",
      "parent_org_id": "org_W0rksp4c3",
      "parent_org_name": "Agencia Rocket",
      "child_org_id": "org_Cl1n1c4N0rt3",
      "child_org_name": "Clínica Norte",
      "requested_by": "u_7KpQ2",
      "requested_by_name": "Valentina Ríos",
      "created_at": 1762000000000,
      "scheduled_for": null,
      "accepted_at": null,
      "accepted_by": null,
      "completed_at": null,
      "rejected_at": null,
      "rejected_by": null,
      "rejected_by_name": null,
      "cancelled_at": 1762086400000,
      "cancelled_by": "u_7KpQ2",
      "cancelled_by_name": "Valentina Ríos"
    },
    "actor": {
      "uid": "u_7KpQ2",
      "name": "Valentina Ríos",
      "kind": "user"
    }
  }
}