Menu

Webhooks

Eventos

Os eventos que um webhook pode assinar, com o envelope completo que seu servidor recebe. No modo «Somente IDs» (thin), data leva só os ids.

CRM

crm.lead.created

Um lead novo entrou no CRM

Dispara uma vez por lead novo, seja qual for o caminho de entrada: uma fonte de leads (webhook, formulário, anúncios do Meta, reserva), uma primeira mensagem de WhatsApp, a API ou um prospecto criado à mão. Traz a pessoa e o prospecto ou negócio em que o lead se tornou, mais a fonte. Também dispara com uma pessoa que já estava no CRM, quando o lead cria um prospecto ou um negócio novo para ela. Não dispara quando nada novo é criado: o mesmo lead outra vez, uma fonte que descarta duplicados ou um lead que vai para o prospecto ou o negócio que a pessoa já tinha. Uma mensagem ou um comentário das redes de um perfil que já está vinculado a uma pessoa ainda não o dispara; um negócio criado à mão dispara crm.deal.created. Os leads que chegam pelo Google Ads, pelo TikTok ou pelo LinkedIn (os formulários deles e as mensagens do TikTok) não o disparam: os termos dessas plataformas não deixam enviar os seus dados para um 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

Um negócio foi criado

Dispara quando um negócio é criado à mão, pela API, ao converter um prospecto (pela tela, pela API ou pelo setter de IA) ou por uma fonte de leads que envia os leads direto a um pipeline. Traz o negócio com os nomes do seu pipeline e da sua 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

Um negócio mudou de etapa ou de pipeline

Dispara em cada mudança de etapa ou de pipeline que passa pelo núcleo de negócios: a tela (um a um ou em lote), a API, um passo de sequência, ganhar ou reabrir um negócio. previous traz a etapa e o pipeline de onde ele veio, com seus nomes. As movimentações escritas por uma fusão ou pela exclusão de uma etapa não o disparam.

{
  "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

Um negócio foi marcado como ganho

Dispara quando o status de um negócio passa a ganho. deal.won_at e deal.value são os números que o Desempenho conta.

{
  "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

Um negócio foi marcado como perdido

Dispara quando o status de um negócio passa a perdido, com o motivo da perda se a pessoa escolheu um.

{
  "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

Um negócio fechado foi reaberto

Dispara quando um negócio ganho ou perdido volta a aberto, pela tela, pela API ou por um agente. previous_status diz de qual estado fechado ele veio.

{
  "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

Um negócio foi arquivado ou desarquivado

Dispara quando um negócio é arquivado (archived: true, sai de todos os agregados) ou desarquivado (archived: false) pela sua ficha ou pela API. Arquivar é um estado do registro, não uma exclusão. O arquivamento em cascata a partir de uma pessoa ou empresa ainda não o 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

Campos de um negócio mudaram

Dispara nas edições de um negócio que não são uma mudança de ciclo de vida (título, valor, responsável, empresa, etiquetas, campos personalizados, cotação…). changed_fields lista os nomes públicos dos campos que mudaram. Mudanças de etapa, ganhar, perder, reabrir e arquivar disparam seu próprio evento; mudanças de etiquetas ou responsável em lote ainda não o disparam.

{
  "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

Um negócio foi excluído

Dispara quando um negócio é excluído, um a um ou em lote. O negócio é a última cópia antes da exclusão; fica 30 dias na Lixeira, onde um owner ou admin pode restaurá-lo. Excluir com os registros vinculados (cascata) e as fusões ainda não o disparam.

{
  "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

Uma pessoa foi criada

Dispara quando uma pessoa é criada pela tela de Pessoas ou pela API. Uma pessoa criada por uma fonte de leads chega dentro de crm.lead.created; as importações ainda não o disparam.

{
  "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

Campos de uma pessoa mudaram

Dispara nas edições da ficha de uma pessoa (nome, e-mails, telefones, empresa, responsável, etiquetas, campos personalizados…). changed_fields lista os nomes públicos dos campos que mudaram. Mudanças em lote, o «não contatar» e os vínculos com empresas ainda não o disparam.

{
  "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

Uma pessoa foi excluída

Dispara quando uma pessoa é excluída, uma a uma ou em lote. A pessoa é a última cópia antes da exclusão; fica 30 dias na Lixeira. Excluir com os registros vinculados (cascata) e as fusões ainda não o disparam.

{
  "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

Uma empresa foi criada

Dispara quando uma empresa é criada pela tela de Empresas ou pela API. As empresas criadas por uma fonte de leads ou por uma importação ainda não o disparam.

{
  "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

Campos de uma empresa mudaram

Dispara nas edições da ficha de uma empresa. changed_fields lista os nomes públicos dos campos que mudaram. Mudanças em lote ainda não o disparam.

{
  "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

Uma empresa foi excluída

Dispara quando uma empresa é excluída, uma a uma ou em lote. A empresa é a última cópia antes da exclusão; fica 30 dias na Lixeira. Excluir com os registros vinculados (cascata) e as fusões ainda não o disparam.

{
  "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

Uma atividade foi criada

Dispara quando uma nota, tarefa, ligação, reunião ou resposta é criada em um negócio, pessoa, empresa ou prospecto pela tela ou pela API. E-mails sincronizados de uma caixa, mensagens de WhatsApp ou redes e atividades escritas por sequências, pelo discador ou pela equipe de IA ainda não o disparam.

{
  "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

Um trabalho em segundo plano terminou

Dispara uma vez quando termina uma exportação ou uma importação iniciada pela API ou pelo MCP (crm.exports.create, crm.imports.create), ou uma importação do assistente de CSV do app (também aparece como crm.imports.create): com status done, ou failed com o seu error.code. Traz o trabalho com o tipo, o progresso e os contadores do resultado (linhas exportadas; pessoas, negócios e empresas criados por uma importação), mas nunca o link de download: peça o trabalho com GET /v1/jobs/{job_id} para obter um link assinado novo. Os trabalhos e seus arquivos ficam guardados 7 dias.

{
  "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

Um monitor foi atribuído a uma plataforma

Dispara quando uma aba de plataforma da página Monitors da organização recebe um monitor ou muda para outro: pela tela, pela API ou pelo MCP. Traz a plataforma, o template de monitor (próprio, herdado do workspace ou do sistema) e o que ele substituiu, se houver. Atribuir de novo o mesmo monitor não o 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

O monitor de uma plataforma foi removido

Dispara quando o monitor de uma aba de plataforma é removido (a aba volta ao seletor de monitores). Traz a plataforma e o template que estava atribuído. Remover de uma aba sem monitor não o 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

Um template de monitor foi publicado

Dispara quando um template de monitor da organização passa de rascunho a publicado (voltá-lo para rascunho não o dispara): a partir daí ele pode ser atribuído à aba da sua plataforma e, se for de um workspace, as contas dele podem usá-lo como monitor herdado. Traz o template com a plataforma e as contagens.

{
  "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

Um dashboard foi criado

Dispara quando um dashboard é criado a partir de um template: pela tela, pela API, pelo MCP ou por uma implantação em lote a partir do workspace (um evento por conta, nessa conta). Traz o dashboard com a referência ao template e as plataformas; os dados dos widgets não vêm incluídos.

{
  "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

Um dashboard foi excluído

Dispara quando um dashboard é excluído (fica 30 dias na Lixeira e pode ser restaurado). Traz o id, o título e o 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

Um dashboard foi exportado para PDF

Dispara quando um dashboard é exportado para PDF, pela tela ou pela API. Traz o dashboard e o nome, o tamanho e o vencimento do arquivo. O link de download NÃO vem incluído (é um link ao portador): só quem exportou o recebe.

{
  "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

Um template de dashboard foi publicado

Dispara quando um template de dashboard da organização passa de rascunho a publicado (voltá-lo para rascunho não o dispara). Os templates publicados de um workspace são oferecidos às contas dele e à implantação em lote. Traz o template com os espaços para fontes de dados e as contagens.

{
  "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

Uma instância de relatório foi gerada a partir de um template

Dispara quando uma instância de relatório é criada a partir de um template: pela tela de Relatórios, pela API ou pelo MCP (reports.instances.generate) ou por um envio recorrente que congela uma instância nova conforme a programação. A instância é um rascunho até que o PDF dela seja exportado. As instâncias em branco (reports.instances.create) e as duplicadas não o disparam.

{
  "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

Uma instância de relatório foi finalizada (bloqueada)

Dispara quando uma instância de relatório em rascunho passa a final e somente leitura: quando o primeiro PDF dela é gerado (reports.instances.export_pdf ou a tela) ou quando ela é finalizada explicitamente (reports.instances.finalize). As instâncias finalizadas ao mandar um envio (manual ou programado) ainda não o disparam.

{
  "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

Um relatório finalizado foi publicado no portal de clientes da conta

Dispara quando uma instância de relatório finalizada de uma conta é publicada no Client Portal dessa conta, pela tela ou com reports.instances.publish_to_portal. Despublicá-la não dispara nenhum 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

O PDF de uma instância de relatório está pronto

Dispara quando termina o trabalho em segundo plano iniciado por reports.instances.export_pdf (ou «Gerar PDF» na tela) e o arquivo fica armazenado. O payload não traz o arquivo: baixe-o com reports.instances.pdf_url, que retorna um link assinado de curta duração. Os PDFs ad hoc e os PDFs anexados a envios não o disparam.

{
  "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

Não foi possível gerar o PDF de uma instância de relatório

Dispara quando o trabalho em segundo plano que gera o PDF de uma instância de relatório falha (o serviço de renderização retornou um erro) ou é abandonado após cinco minutos sem terminar. A instância fica como estava; execute reports.instances.export_pdf de novo para tentar outra vez.

{
  "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

Um template de relatório da organização foi publicado

Dispara quando um template de relatório da organização passa de rascunho a publicado (pela lista de templates, pelo editor de templates ou por reports.templates.publish). Os templates publicados são os que as contas dela veem como herdados e os que são oferecidos ao gerar um relatório. Os templates que já nascem publicados com «Salvar como template» não o disparam.

{
  "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

Um alerta de métrica foi criado

Dispara quando um alerta é criado, pela tela de Alertas, pela API, pelo MCP ou pela MIA. Traz o alerta como foi salvo (condição, organização monitorada, conta da plataforma, métrica, ids dos destinatários, cooldown). Os e-mails dos destinatários nunca viajam nos webhooks: leia o alerta com alerts.alerts.get se precisar deles.

{
  "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

Um alerta de métrica mudou

Dispara quando um alerta é editado, ativado ou desativado, pela tela, pela API, pelo MCP ou pela MIA. changed_fields lista os nomes públicos do que mudou (por exemplo enabled, condition, recipients). Salvar sem alterações não o dispara. A avaliação de hora em hora que atualiza last_value ou last_evaluated_at também não o dispara (veja alerts.alert.triggered e 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

Um alerta de métrica foi excluído

Dispara quando um alerta é excluído, pela tela, pela API, pelo MCP ou pela MIA. O alerta é a última cópia antes da exclusão; fica 30 dias na Lixeira e o histórico de disparos é mantido.

{
  "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

Um alerta de métrica foi disparado

Dispara quando a avaliação de hora em hora encontra a condição de um alerta cumprida, uma vez por disparo (depois o alerta espera o seu cooldown_hours). Traz o alerta com o novo estado, a avaliação (current_value, previous_value, delta_absolute, delta_percent, severity info/warning/critical, os intervalos de datas comparados no formato YYYY-MM-DD, evaluated_at) e history_entry_id, a entrada em alerts.history.list. Os e-mails aos destinatários saem na mesma execução. O ator é o 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

Um alerta de métrica foi desativado após erros repetidos

Dispara quando a avaliação de hora em hora desativa um alerta após 5 avaliações com falha seguidas (a conexão com a plataforma expirou, a conta perdeu o acesso, a métrica não está disponível). Traz o alerta (enabled false), consecutive_errors e last_error. Reative-o com alerts.alerts.toggle quando a conexão estiver corrigida. O ator é o 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"
    }
  }
}

Envios

deliveries.delivery.sent

O e-mail de um envio saiu

Dispara toda vez que o Amazon SES aceita o e-mail de um envio e ele fica registrado no histórico de envios: um envio manual (deliveries.deliveries.send_now, pela tela, pela API ou por um agente; actor = quem enviou) ou um programado (actor = o agendador de envios, kind system). Traz o envio (conta de destino, tipo e assunto como está configurado: um recorrente pode conter {{periodo}}) e o registro dele no histórico: quando saiu, o que o disparou, os destinatários (To), o período dos dados, os PDFs dos relatórios com links de download assinados válidos por 7 dias e os links dos dashboards. Se os PDFs dos relatórios não puderam ser gerados, ele dispara mesmo assim, com menos PDFs.

{
  "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

Não foi possível enviar o e-mail de um envio

Dispara quando uma tentativa de envio fica registrada no histórico como falha: o Amazon SES recusou o e-mail (send.errors diz por quê). Tem o mesmo formato que deliveries.delivery.sent. Um envio programado mantém a programação (um recorrente tenta de novo na próxima execução; um único fica com falha). Uma tentativa que caiu antes de chegar ao histórico não o 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

Um envio foi programado

Dispara quando um envio é programado ou reprogramado (deliveries.deliveries.schedule, ou ao criá-lo já com programação): one_shot em uma data (send_at) ou recorrente (frequência, dia, hora, fuso horário), com next_run_at, a primeira vez que o agendador vai enviá-lo.

{
  "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

A programação de um envio foi cancelada

Dispara quando a programação de um envio programado ou recorrente é cancelada (deliveries.deliveries.cancel_schedule): não há mais envios automáticos e o envio volta a rascunho. previous_schedule é a programação que ele tinha. Excluir um envio programado não o 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

Um número de telefone foi comprado

Dispara quando a organização compra um número de telefone na tela de Phones, depois de cobrado e pronto para usar: a linha com o número, o país, o tipo, os recursos, o destino (crm por padrão; depois pode ser movida para outro destino), o preço mensal de tabela e quem o paga. Os números só são comprados na tela; os que a equipe do MB Suite configura para uso interno não o disparam.

{
  "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

Um SMS foi enviado de uma linha

Dispara quando um SMS sai de uma das linhas da organização, pela tela, pela API ou por um agente (crm_phones.sms.send): a mensagem armazenada (corpo, from, to, segmentos, a pessoa do CRM com esse número, quem enviou, quanto custou ao saldo de Phones) e a linha. status é o primeiro que a rede informou (em geral queued ou sent); as confirmações de entrega não disparam outro evento. Uma mensagem que a rede recusou não é armazenada e não o 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

Um SMS chegou a uma linha

Dispara uma vez para cada SMS que chega a uma das linhas da organização, depois de armazenado: o corpo, quem enviou (from), a linha em que chegou (to), os segmentos, a pessoa do CRM com esse número (person_id, quando houver) e quanto o recebimento custou ao saldo de Phones. As mensagens para uma organização com a conta bloqueada por faturamento são descartadas e não o disparam. Os códigos de verificação de uso único nunca chegam (a rede telefônica os 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

O saldo de Phones foi recarregado

Dispara quando uma recarga do saldo de Phones (o saldo pré-pago que paga as chamadas e os SMS) é cobrada e creditada: manualmente pela tela ou por recarga automática (transaction.auto_recharge). Traz o saldo novo, o anterior e a transação (valor em centavos de USD, número da fatura). Uma recarga cuja cobrança falha não o dispara, nem os créditos ou reembolsos feitos pelo suporte do 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

O saldo de Phones ficou abaixo do mínimo

Dispara quando uma cobrança (uma chamada, um SMS, uma linha ou um ajuste do suporte) leva o saldo de Phones de igual ou acima do mínimo para abaixo dele: o limite da recarga automática quando ela está ativa, ou USD 10.00 quando não está (o mínimo que a tela de Phones mostra). Dispara uma vez por cruzamento, não a cada cobrança abaixo do mínimo; com a recarga automática ativa, a recarga vem sozinha (crm_phones.wallet.recharged). Traz o saldo novo, o anterior, o mínimo e a cobrança que o cruzou. As chamadas e os SMS param quando o saldo não consegue cobri-los.

{
  "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

Chegou ao Inbox um comentário, uma mensagem direta ou uma menção

Entrou no Inbox um item novo (um comentário, uma mensagem direta ou uma menção do Instagram ou do Facebook; os do LinkedIn e do TikTok não o disparam: os termos deles não deixam enviar os seus dados para um webhook), por webhook em tempo real ou pela sincronização periódica. É emitido uma vez por item, antes de qualquer regra automática ou resposta de IA. Não dispara para as mensagens da própria marca, para as mensagens diretas que pertencem ao CRM (ficam em CRM → Mensagens), para os itens classificados como spam ao chegar nem para os itens com mais de 24 horas trazidos ao importar o histórico. Os anexos que o MB Suite guarda chegam como links assinados por uma hora a partir do momento em que o evento foi gerado (url_expires_at); uma nova tentativa de entrega, mais tarde, pode trazer um link expirado: peça o item (social_inbox.items.get) para obter um novo.

{
  "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

Uma resposta do Inbox saiu na rede

A rede aceitou uma resposta a um item do Inbox: escrita por uma pessoa (tela, API ou MCP), por uma regra com uma resposta salva ou por um Community Manager de IA. item é o item como estava quando a resposta saiu; reply traz o texto, o canal (public, ou private: um comentário respondido por mensagem direta), sent_at, o id que a rede deu a ela, automated (true para regras e IA) e rule_id quando uma regra respondeu. As respostas escritas diretamente na rede não são emitidas. Os anexos que o MB Suite guarda chegam como links assinados por uma hora a partir do momento em que o evento foi gerado (url_expires_at); uma nova tentativa de entrega, mais tarde, pode trazer um link expirado: peça o item (social_inbox.items.get) para obter um novo.

{
  "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

A Equipe IA passou um item do Inbox para uma pessoa

Um Community Manager de IA não respondeu e deixou o item em «Precisam de atenção» para uma pessoa. reason diz por quê: complaint (sentimento negativo, com o Analista de sentimento ativo; desde 12-10-2026, numa mensagem privada, pedir para falar com uma pessoa sem uma reclamação concreta não conta), ai_signal (a IA encontrou um motivo de escalonamento configurado: preços, dados pessoais, um idioma desconhecido; ou, numa mensagem privada, a pessoa pediu para falar com alguém e não há um canal de contato cadastrado, ou o pedido trazia uma reclamação que o Analista não viu), ai_reply_cap (respostas demais da IA na mesma conversa privada em 24 horas) ou, desde 17-10-2026, ai_no_answer (numa mensagem privada, a IA retornou uma resposta vazia duas vezes e a conversa passa para uma pessoa em vez de ficar sem resposta). Os anexos que o MB Suite guarda chegam como links assinados por uma hora a partir do momento em que o evento foi gerado (url_expires_at); uma nova tentativa de entrega, mais tarde, pode trazer um link expirado: peça o item (social_inbox.items.get) para obter um novo.

{
  "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

Um item do Inbox foi marcado como resolvido

Uma pessoa marcou um item do Inbox como resolvido, pela tela (um item ou «Marcar tudo como resolvido» em uma publicação), pela API ou pelo MCP. É emitido só quando o item ainda não estava resolvido; reabri-lo não emite nada. Os anexos que o MB Suite guarda chegam como links assinados por uma hora a partir do momento em que o evento foi gerado (url_expires_at); uma nova tentativa de entrega, mais tarde, pode trazer um link expirado: peça o item (social_inbox.items.get) para obter um novo.

{
  "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

Uma publicação foi criada no Social Planner

Uma publicação nova foi criada no Social Planner: pelo Composer, por um plano de conteúdo (a MIA ou uma importação), por uma duplicação, pela API ou por um envio do Content Studio. Traz a publicação como foi salva (status, redes, formato, texto, mídia, data programada). As publicações sincronizadas das redes não o emitem.

{
  "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

Uma publicação foi programada

Uma publicação entrou na fila para ser publicada nas redes em scheduled_at (um trabalho de publicação por rede, ou por localização no Google Business Profile). Reprogramá-la para outro horário o emite de novo. A publicação em si chega depois como social_planner.post.published, social_planner.post.partially_published ou 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

Uma publicação saiu em todas as redes

Todas as redes da publicação a publicaram (um story com vários quadros conta quando todos estão publicados). O processo de publicação o emite uma vez por resultado, tenha a publicação saído na hora ou no horário programado; external_url é o link permanente quando a rede fornece um.

{
  "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

Uma publicação saiu em algumas redes e falhou em outras

A publicação saiu em pelo menos uma rede e falhou em outra (ou uma sequência de stories parou no meio). reason é a causa classificada predominante (credentials_expired, permissions_missing, account_restricted, media_invalid, content_invalid, rate_limited, platform_error, polling_timeout, unknown) e by_platform, a causa em cada rede que falhou. Dá para tentar de novo pelo planner ou com 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

Uma publicação não pôde ser publicada em nenhuma rede

A publicação falhou em todas as redes depois das novas tentativas automáticas (ou a rede continuou processando além do tempo limite: reason polling_timeout). reason é a causa classificada predominante e by_platform, a causa em cada rede. Uma publicação excluída durante a publicação não o 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

Uma série do Content Studio terminou de ser gerada

Uma geração de uma série do Content Studio terminou com pelo menos um post gerado: status review (todos os posts prontos para revisar e aprovar) ou partial (alguns posts falharam; failed_count diz quantos). É emitido uma vez por geração, tenha ela rodado direto ou pelo lote em segundo plano; quando uma geração direta deixa posts com falha por falta de capacidade, eles são tentados de novo em segundo plano e essa geração o emite outra vez quando se resolve. Leia o plano e os posts com social_content_studio.series.get. requested_by é o usuário que iniciou a geração.

{
  "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

Uma geração de série do Content Studio não produziu nada

Uma geração de uma série do Content Studio terminou sem gerar nenhum post (status failed, ou partial quando a série mantinha posts de uma geração anterior e o lote em segundo plano falhou por completo). Os créditos de imagem do que não foi gerado são devolvidos; o usuário pode tentar de novo pela série. Uma geração que nunca começou (sem créditos ao entrar na fila) não o 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

Uma sessão de fotos terminou de ser gerada

Uma sessão de fotos de produto terminou de ser gerada com pelo menos uma imagem: status completed (todas as imagens saíram) ou partial (failed_image_count imagens não saíram; os créditos delas são devolvidos). As imagens já estão na sessão (social_content_studio.photo_sessions.get) e na Media Library da organização, na pasta da sessão. É emitido uma vez por geração.

{
  "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

Uma sessão de fotos não gerou nenhuma imagem

Uma geração de sessão de fotos terminou sem nenhuma imagem: a sessão volta a rascunho para ser gerada de novo e os créditos são devolvidos (ou nunca foram cobrados). Uma geração que nunca começou (sem créditos ou sem cota de armazenamento ao entrar na fila) não o 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

A Brand Voice mudou

Dispara quando a Brand Voice da organização muda: é salva pela tela, atualizada pela API ou pelo MCP, ou redefinida (nesse caso profile é null e reset é true). Traz o perfil completo como foi salvo (tons, vocabulário, formato, público, ajustes por rede e ai_summary) e changed_fields com os nomes públicos dos campos que mudaram. Salvar os mesmos valores não o dispara, nem restaurar da Lixeira um perfil redefinido.

{
  "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

Um documento da Brand Voice terminou de ser processado

Dispara quando o MB Suite termina de processar um documento enviado à Brand Voice: o texto dele foi extraído e indexado para a IA (status ready; embedding_status diz se a indexação funcionou e chunk_count, quantos fragmentos ele tem) ou a extração falhou (status error, com error_message). Dispara de novo depois de cada nova tentativa. Não traz texto, URL nem caminho de armazenamento (leia o texto com social_brand_voice.documents.get). Os documentos de contexto geral do perfil da organização não o disparam.

{
  "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"
    }
  }
}

Concorrentes

social_competitors.competitor.created

Um concorrente começou a ser acompanhado

Dispara quando um concorrente é adicionado (pela tela, pela API, pelo MCP ou por um agente): o nome, a cor, a ordem e os perfis acompanhados em cada plataforma (usuário do Instagram, página do Facebook, canal do YouTube). As primeiras métricas dele chegam depois, cada uma como social_competitors.snapshot.created. Um concorrente restaurado da Lixeira não o 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

O nome ou os perfis de um concorrente mudaram

Dispara quando alguém renomeia um concorrente ou muda os perfis acompanhados. Traz o concorrente como ficou e changes (quais ajustes foram enviados: name, profiles). As atualizações automáticas de dados não o disparam (elas disparam 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

Um concorrente foi excluído com o histórico

Dispara quando um concorrente é excluído junto com o histórico: as métricas por dia (snapshots_deleted) e as publicações coletadas (posts_deleted). Traz o concorrente como estava. O concorrente e o histórico mais recente ficam 30 dias na Lixeira e os owners e admins podem restaurá-los.

{
  "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

Foram coletadas métricas novas de um concorrente ou da sua própria marca

Dispara uma vez por plataforma toda vez que os dados públicos de um concorrente (ou da própria marca da organização: competitor.is_self true e id __self__) são lidos da Meta (Instagram Business Discovery, Facebook Pages) ou da YouTube Data API: na atualização automática semanal (às segundas-feiras, actor kind system), com social_competitors.competitors.refresh ou logo depois de adicionar um concorrente ou mudar os perfis dele. Traz as métricas dessa leitura: seguidores, média de curtidas, comentários e visualizações das publicações recentes, taxa de engajamento, frequência de publicação, proporção de reels/shorts e mix de formatos. Uma plataforma que falhou não o 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

Uma linha de um plano de mídia mudou

Dispara uma vez por linha (campanha, linha de plataforma ou linha de conta) quando ela é criada, atualizada, excluída ou importada, pela tela do Media Planner, pela API, pelo MCP, pela MIA ou por um carryover. change diz qual delas; changes lista cada campo acompanhado com o valor antes e depois (name, budget, status, start_date, end_date, platform, currency, label_ids, mapped_campaign, auto_budget_enabled, carryover; os valores estão na moeda da linha e as datas em ms). source diz quem fez: user, ai, autobudget, carryover ou system. Reordenar linhas e a sincronização de custos não o disparam (veja 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

Os custos de um plano de mídia foram sincronizados

Dispara depois que o investimento de um plano de mídia é lido das plataformas de anúncios e armazenado: pelo botão «Sincronizar custos», pela visão cross-account, pela API, pelo MCP ou pela automação programada (trigger automation, com um ator do sistema). synced_rows linhas receberam o investimento; errors lista o que uma plataforma recusou (os valores anteriores dessa plataforma são mantidos). Os totais vêm por moeda (spent_by_currency); account_total_spend é o investimento das contas 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

Um plano de mídia foi arquivado

Dispara quando um plano de mídia é arquivado pela API, pelo MCP, pela MIA ou pela visão cross-account: plan é o plano como ficou arquivado e transitions, quantas campanhas mudaram de status (de programada para cancelada, de ativa e pausada para concluída). Arquivar pela tela do próprio plano e o arquivamento automático programado ainda não o disparam.

{
  "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

Um plano de mídia foi enviado por e-mail

Dispara quando um plano de mídia é enviado por e-mail (pelo app, pela API, pelo MCP ou pela MIA): o id do envio, o formato (html, ou pdf com o plano anexado), o assunto, quantos destinatários e o endereço From. Os endereços dos destinatários não vêm no webhook: leia-os com 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

Um carryover foi aplicado a um plano de mídia

Dispara quando o saldo não gasto de um plano encerrado (modo from_plan, com source_plan) ou um saldo informado manualmente (modo manual, com source_note) é somado ao orçamento de linhas de um plano. allocations diz quanto cada linha recebeu (um valor negativo subtrai); cada linha também dispara media_planner.campaign.changed com 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"
    }
  }
}

Estratégias AI

strategy_generator.generation.completed

Uma estratégia de mídia paga com IA terminou de ser gerada

A IA terminou de gerar uma estratégia de mídia paga (status completed): uma nova criada a partir de um briefing ou uma existente gerada de novo (regenerated=true; as projeções editadas voltaram aos valores novos da IA). O evento traz o resumo (objetivo, plataformas, faixa de orçamento, número de campanhas); leia o plano completo, o mix de canais recomendado e o briefing com strategy_generator.strategies.get. requested_by é a pessoa que iniciou a geração; ai_model, o modelo que a produziu.

{
  "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

A geração de uma estratégia de mídia paga com IA falhou

Uma geração de uma estratégia de mídia paga terminou sem um plano utilizável (todos os modelos de IA falharam ou a resposta chegou incompleta). Uma primeira geração pelo app deixa a estratégia em status error com o briefing, pronta para tentar de novo (de qualquer outro lugar, uma criação com falha não deixa nada nem emite o evento); uma nova geração com falha deixa a estratégia como estava (status completed com o plano anterior). error.code é ai_generation_failed (todos os modelos falharam ou a resposta chegou incompleta) ou internal_error. Os créditos só são cobrados pelas gerações bem-sucedidas.

{
  "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

Uma estratégia de mídia paga com IA foi excluída

Uma estratégia de mídia paga foi excluída, pelo app ou pela API. Fica 30 dias na Lixeira da organização, onde um owner ou admin pode restaurá-la com o mesmo id. O evento traz o resumo do que foi excluído.

{
  "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

Foram gerados copies de anúncios

O Ad Creator gerou com IA um conjunto de copies de anúncios (pelo app, pela API, pelo MCP ou pela MIA): copy traz o brief (descrição do produto, plataformas, tom) e cada variante por plataforma (títulos e descrições do Google Search; texto principal, título e descrição para Meta, LinkedIn e TikTok). Dispara uma vez por geração, depois de cobrar o crédito e salvar os 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

Copies de anúncios foram excluídos

Um conjunto de copies de anúncios foi excluído (pelo app, pela API, pelo MCP ou pela MIA). copy é o conjunto como estava antes da exclusão, com as variantes. Fica 30 dias na Lixeira, onde um owner ou admin pode restaurá-lo; restaurar não emite um evento novo.

{
  "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

Uma ação do SEO Planner foi criada

Dispara quando uma ação é adicionada ao SEO Planner pela API, pelo MCP ou pela MIA (source manual), a partir de um template de ação (source action_template) ou ao aplicar um pack, também pelo app (source pack, um evento por ação criada). As ações criadas pela tela do planner ou pelo SEO Ops ainda não o disparam.

{
  "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

Uma ação do SEO Planner mudou

Dispara nas edições de uma ação pela API, pelo MCP ou pela MIA (uma ou várias de uma vez), inclusive ao movê-la para outro mês (month_key). changed_fields lista os nomes públicos dos campos que mudaram. Passar uma ação para concluída com uma edição também dispara seo_planner.item.completed; seo_planner.items.complete dispara só seo_planner.item.completed. As edições pela tela do planner ainda não o disparam.

{
  "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

Uma ação do SEO Planner foi concluída

Dispara uma vez quando uma ação passa para o status concluída pela API, pelo MCP ou pela MIA (seo_planner.items.complete, uma edição ou uma edição em lote). Concluí-la pela tela do planner ainda não o 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

Uma ação do SEO Planner foi excluída

Dispara quando uma ação é excluída pela API, pelo MCP ou pela MIA (uma ou em lote, uma vez por ação); item é a última cópia antes da exclusão, que fica 30 dias na Lixeira. Excluí-la pela tela do planner ainda não o 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

Um projeto de rankings foi criado

Dispara quando um projeto de rankings é criado (pelo app, pela API, pelo MCP ou pela MIA): o domínio a acompanhar, os buscadores e países, os dispositivos e a programação das verificações. Uma conta tem um projeto; as keywords são adicionadas depois (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

A configuração de um projeto de rankings mudou

Dispara quando o domínio, o nome, os buscadores e países, os dispositivos ou a programação de um projeto de rankings mudam de verdade (uma edição que deixa tudo como estava não o dispara). changed_fields lista os nomes públicos do que mudou; keywords_stamped conta as keywords que continuaram sendo medidas nos países anteriores quando um país foi adicionado.

{
  "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

Um projeto de rankings foi excluído

Dispara quando um projeto de rankings é excluído com as keywords e todo o histórico de posições. project é a última cópia antes da exclusão; a Lixeira guarda uma cópia somente leitura do projeto e das keywords por 30 dias (ele não é restaurado automaticamente).

{
  "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

Keywords foram adicionadas a um projeto

Dispara uma vez para cada chamada que adiciona keywords a um projeto, pelo app (inclusive a importação de histórico por CSV, source import), pela API, pelo MCP ou pela MIA. added são as keywords novas; reactivated já estavam no projeto como inativas e voltaram com o histórico. As keywords que as ferramentas de suporte do MB Suite carregam direto no banco de dados não o disparam.

{
  "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

Keywords foram excluídas de um projeto

Dispara uma vez para cada chamada que exclui keywords de um projeto (uma ou várias). Excluí-las também exclui o histórico de posições: cada keyword e as medições mais recentes dela ficam 30 dias na Lixeira. Para deixar de medir uma keyword e manter o histórico, ela é desativada (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

Keywords foram ativadas ou desativadas

Dispara uma vez para cada chamada que ativa ou desativa keywords de um projeto. As keywords inativas não são medidas (sem custo nem cota) e mantêm as etiquetas, a última posição e o histórico; as ativas voltam a ser medidas na próxima verificação. Só são listadas as keywords cujo status mudou de verdade.

{
  "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

Uma verificação de rankings terminou

Dispara quando todas as medições de uma verificação de rankings (programada ou manual) foram coletadas e o resumo do projeto foi recalculado. summary é a distribuição das keywords ATIVAS no buscador, no país e no dispositivo principais do projeto (a combinação com mais keywords medidas; pos_key), a posição média das keywords que ranqueiam e as 5 que mais subiram e mais caíram em relação à verificação anterior; é null quando nenhuma keyword tem posição ainda. Leia todas as posições com seo_rankings.keywords.list ou a grade do histórico com seo_rankings.history.grid. É enviado pelo 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

Uma verificação de rankings falhou

Dispara quando uma verificação de rankings termina com falha. reason: dispatch_failed (nenhuma medição pôde ser enviada ao provedor de SERP; numa verificação programada ou manual), batches_failed (parte das medições falhou nas últimas 24 horas) ou timeout (a verificação ficou aberta por mais de 6 horas). As posições medidas antes da falha são mantidas; a próxima verificação programada roda normalmente.

{
  "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"
    }
  }
}

Indexação

seo_indexation.sitemap.submitted

Um sitemap foi enviado ao Search Console

Dispara quando um sitemap é enviado (ou reenviado) a uma propriedade do Search Console conectada à organização, pela tela, pela API ou por um agente, depois que o Google o aceitou. Traz a propriedade (site_url) e a URL do sitemap (path). O Google o busca e processa depois: o status dele aparece mais tarde em seo_indexation.sitemaps.list. Os sitemaps enviados diretamente no Search Console não o disparam.

{
  "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

Um sitemap foi removido do Search Console

Dispara quando um sitemap é removido de uma propriedade do Search Console conectada à organização, pela tela, pela API ou por um agente. Só a lista de sitemaps da propriedade mudou: o arquivo no site fica intacto e pode ser enviado de novo. Os sitemaps removidos diretamente no Search Console não o disparam.

{
  "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

Uma análise de cobertura terminou

Dispara quando uma análise de cobertura de uma propriedade do Search Console termina e é salva (seo_indexation.coverage.run, pela tela, pela API ou por um agente): o id da análise, a propriedade, coverage_score (0–100) e as contagens (URLs nos sitemaps, páginas com impressões em 90 dias, páginas órfãs e mortas). As listas de páginas vêm de seo_indexation.coverage.latest. As análises de uma organização demo não são salvas e não o disparam.

{
  "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

Uma campanha de e-mail foi programada

Dispara quando uma campanha recebe uma data de envio, pelo assistente de campanhas ou pela API (email_marketing.campaigns.schedule), e de novo quando uma campanha já programada é reprogramada. scheduled_at é a data escolhida. Nesse horário a campanha sai sozinha e dispara email_marketing.campaign.sent com um ator de sistema; se não puder sair dentro da hora seguinte, ela não é enviada e volta para rascunho. Editar o conteúdo ou cancelar uma campanha programada não o 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

Uma campanha de e-mail foi enviada

Dispara uma vez quando o envio de uma campanha é disparado: agora, pela tela ou pela API, ou no horário programado pelo envio programado (nesse caso actor.kind é system e campaign.scheduled_at mantém o horário para o qual estava programada). Os destinatários foram resolvidos, os endereços suprimidos e duplicados ficaram de fora e cada mensagem entrou na fila. recipient_count é quantas mensagens entraram na fila e suppressed_count, quantos endereços a lista de supressões removeu. As mensagens saem em segundo plano nos minutos seguintes (status queued → sending → sent); o fim do envio e os resultados por mensagem (entregue, aberto, clique, rejeição) ainda não disparam 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

Contatos foram inscritos em um flow de e-mail

Dispara uma vez para cada pedido de inscrição que inscreveu pelo menos um contato: um contato inscrito manualmente ou pela API, uma audiência inscrita uma única vez (source.type audience_snapshot) ou uma audiência vinculada ao flow (audience_auto, os membros atuais). enrollments lista até 100 das inscrições criadas; quando enrollments_truncated é true, percorra as páginas de email_marketing.flows.enrollments.list para ver o resto. Os contatos inscritos pela sincronização de audiências em segundo plano ou por um evento de contato (contact_added, contact_labeled) ainda não o disparam.

{
  "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

Um contato saiu de um flow de e-mail antes de terminá-lo

Dispara quando uma inscrição ativa ou pausada é tirada do flow manualmente, pelo detalhe do flow ou pela API (email_marketing.flows.enrollments.exit): reason é manual e a inscrição termina cancelada. As saídas decididas em segundo plano (uma condição de saída, a lista de supressões, um cancelamento de inscrição) e concluir o flow ainda não o disparam.

{
  "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

A definição de uma audiência mudou

Dispara quando uma audiência é editada pela tela ou pela API: o nome, a descrição, os contatos, os filtros por etiqueta ou por conta ou os membros importados. changed_fields lista os nomes públicos dos campos que mudaram. Os contatos que entram em uma audiência dinâmica porque receberam uma etiqueta não o disparam (não mudou a audiência, mudaram os membros dela), nem atualizar a contagem de membros.

{
  "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"
    }
  }
}

Contas

child_orgs.account.created

Uma conta foi criada

Dispara uma vez para cada conta nova do workspace: por Contas (uma a uma ou com uma importação CSV), pela API, pelo MCP ou pela MIA. Uma conta nova sempre nasce inativa (child_org_status dormant, billing_mode parent_managed): sem membros próprios e sem cobrança. source diz se ela veio sozinha ou em um 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

Uma conta foi arquivada

Dispara quando o workspace arquiva uma das contas dele (por Contas, pelas configurações da conta abertas a partir do workspace, pela API, pelo MCP ou pela MIA): o acesso dela é bloqueado, o trabalho programado é pausado, ela deixa de ser cobrada do workspace se o workspace pagava por ela e libera uma vaga do plano. Arquivar uma conta já arquivada não o dispara, e uma conta arquivada por dentro pelo próprio owner ainda não o 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

Uma conta arquivada foi restaurada

Dispara quando o workspace recupera uma conta arquivada (por Contas, pelas configurações da conta abertas a partir do workspace, pela API, pelo MCP ou pela MIA): ela volta a ocupar uma vaga do plano e o que o arquivamento havia pausado recomeça. Restaurar uma conta que não estava arquivada não o dispara, e uma conta reativada por dentro pelo próprio owner ainda não o 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

Uma conta foi excluída

Dispara quando o workspace exclui uma das contas dele (por Contas, pelas configurações da conta abertas a partir do workspace, pela API, pelo MCP ou pela MIA). A conta traz o último estado (arquivada). Excluir uma conta por dentro, pelo próprio owner, ainda não o 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"
    }
  }
}

Tarefas

task_management.task.created

Uma tarefa foi criada

Dispara quando uma tarefa ou subtarefa é criada pela API, pelo MCP ou pela MIA, quando uma tarefa recorrente gera a próxima instância (source recurrence), quando um pack de tarefas é aplicado (source task_pack, um evento por tarefa) e quando uma tarefa chega de outra organização (source moved). As tarefas criadas pela tela de Tarefas ainda não o disparam. As tarefas privadas nunca disparam 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

Campos de uma tarefa mudaram

Dispara nas edições de uma tarefa pela API, pelo MCP ou pela MIA (uma ou várias de uma vez), ao reabri-la e nas mudanças de escopo (também pelo app). changed_fields lista os nomes públicos dos campos que mudaram. Concluir uma tarefa também dispara task_management.task.completed. As edições feitas pela tela de Tarefas ainda não o disparam.

{
  "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

Uma tarefa foi concluída

Dispara uma vez quando uma tarefa passa de um status aberto para um status DONE pela API, pelo MCP ou pela MIA. Se a tarefa for recorrente, next_task_id é o id da sua próxima instância: a que acabou de ser criada (task_management.task.created dispara para ela) ou, se a série já tinha a instância dessa data (a tarefa foi concluída, reaberta e concluída de novo), essa mesma, que não é duplicada nem dispara task_management.task.created. Concluí-la pela tela de Tarefas ainda não o 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

Uma tarefa foi excluída

Dispara quando uma tarefa é excluída pela API, pelo MCP ou pela MIA (uma ou em lote), uma vez por tarefa e uma vez para cada subtarefa excluída com ela; a tarefa é a última cópia antes da exclusão e fica 30 dias na Lixeira. reason: moved significa que ela foi movida para outra organização (pelo app), onde task_management.task.created dispara. Excluí-la pela tela de Tarefas ainda não o 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

Alguém comentou em uma tarefa

Dispara a cada comentário novo em uma tarefa, pelo app, pela API, pelo MCP ou pela MIA. Traz o comentário (HTML tratado em content, texto simples em content_text, ids dos usuários mencionados) e o id e o título da tarefa. Os comentários em tarefas privadas nunca o disparam.

{
  "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"
    }
  }
}

Projetos

projects.project.created

Um projeto foi criado

Dispara quando um projeto público é criado pela API, pelo MCP ou pela MIA. status é o status do projeto resolvido de acordo com o tipo (nome e categoria). Os projetos criados pela tela de Projetos e os que são privados, compartilhados com pessoas específicas ou só da agência não o disparam.

{
  "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

Campos de um projeto mudaram

Dispara quando um projeto público é editado pela API, pelo MCP ou pela MIA, ou quando os status dos itens dele são editados pelo quadro do projeto: o nome, o status, as datas, o responsável, a equipe, os campos personalizados, a configuração de itens ou a privacidade. changed_fields lista os nomes públicos dos campos que mudaram; os contadores (itens, tarefas) não contam como alteração. Um projeto que deixa de ser público deixa de disparar eventos. As demais edições feitas pela tela de Projetos ainda não o disparam.

{
  "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

Um projeto foi arquivado ou desarquivado

Dispara quando um projeto público é arquivado (archived: true: sai da lista de ativos, mas mantém os itens e as tarefas) ou desarquivado (archived: false) pela API, pelo MCP ou pela MIA. Arquivar é um estado do projeto, não uma exclusão. Arquivá-lo pela tela de Projetos ainda não o 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

Um item foi adicionado a um projeto

Dispara quando um item (uma linha de um projeto: um site, uma campanha, um entregável) é criado em um projeto público pela API, pelo MCP ou pela MIA. Traz o item, o projeto dele (id e nome) e o status resolvido de acordo com os status de itens do projeto. Os itens criados pela tela do projeto ou pela importação CSV ainda não o disparam.

{
  "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

Campos de um item de projeto mudaram

Dispara quando um item de um projeto público é editado pela API, pelo MCP ou pela MIA: o título, o status, os responsáveis, as datas, a descrição, os campos personalizados ou o estado de arquivamento. changed_fields lista os nomes públicos dos campos que mudaram. Reordenar itens não o dispara, e as edições pela tela do projeto ainda não o disparam.

{
  "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"
    }
  }
}

Contatos

contacts.contact.created

Um contato foi criado

Dispara quando um contato é adicionado à agenda da organização (o módulo Contatos, não o CRM) pela API, pelo MCP ou pela MIA. Os contatos criados pela tela de Contatos ainda não o disparam, e os importados nunca o fazem: para as importações, escute 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

Campos de um contato mudaram

Dispara quando um contato é editado pela API, pelo MCP ou pela MIA, um a um ou em lote (etiquetas e Contas), e quando é marcado ou desmarcado como favorito. changed_fields lista os nomes públicos dos campos que mudaram. As edições pela tela de Contatos ainda não o disparam.

{
  "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

Um contato foi excluído

Dispara quando um contato é excluído pela API, pelo MCP ou pela MIA, uma vez por contato (também em lote). O contato é a última cópia antes da exclusão; fica 30 dias na Lixeira e, se for restaurado, volta com o mesmo id. Excluí-lo pela tela de Contatos ainda não o 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

Uma importação de contatos criou contatos

Dispara uma vez para cada chamada de importação que criou pelo menos um contato: pela API, pelo MCP ou pela MIA (contacts.contacts.bulk.import, até 500 linhas por chamada) e pela importação CSV da tela de Contatos, que envia as linhas em blocos de 500 (um arquivo grande dispara um evento por bloco). contact_ids são os contatos criados; skipped conta as linhas que coincidiram com um contato existente e failed, as linhas inválidas. Os contatos importados não disparam 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

Um e-mail foi enviado de Contatos

Dispara depois que um e-mail é enviado pelo módulo Contatos: a janela de redação da tela, a API, o MCP ou a MIA (contacts.email.send). Traz o id da mensagem no provedor, o From, o id do remetente, os destinatários e o assunto; nunca o corpo.

{
  "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

Um arquivo foi adicionado à Media Library

Dispara quando um arquivo enviado pela API é registrado na Media Library (source upload) e quando o editor de imagens cria uma imagem editada nova a partir de um original (source canvas_edit, também pelo app). Os arquivos enviados pela tela da Media Library e as imagens que o Content Studio, as Sessões de fotos ou o Ad Creator salvam por conta própria ainda não o disparam. item.storage_path identifica o arquivo; obtenha um link de download com 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

Uma imagem foi editada com o editor de imagens

Dispara toda vez que uma imagem da Media Library é salva pelo editor de imagens, no app, pela API, pelo MCP ou pela MIA. mode: created significa que editar um original produziu uma imagem nova (para ela também dispara media_library.item.created); mode: updated significa que uma imagem editada foi salva de novo com um arquivo novo. source_item_id é a imagem que foi aberta no editor e element_count, quantos elementos a receita tem.

{
  "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

Um arquivo foi excluído da Media Library

Dispara quando um arquivo é excluído pela API, pelo MCP ou pela MIA (um, em lote ou com a pasta: reason: folder_deleted), uma vez por arquivo; o item é a última cópia antes da exclusão e fica 30 dias na Lixeira, com o arquivo armazenado mantido para poder ser restaurado. Excluí-lo pela tela da Media Library ainda não o 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

Um artigo da Knowledge Base foi publicado

Dispara quando um artigo público é criado, pelo app, pela API, pelo MCP ou pela MIA. Traz o artigo inteiro (HTML tratado em content, texto simples em content_text, links, metadados dos anexos sem links de download, ids dos tags). Os artigos criados como privados, para algumas pessoas ou só da agência não o disparam; eles disparam knowledge_base.article.visibility_changed se depois passarem 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

Um artigo público da Knowledge Base mudou

Dispara quando um artigo público é editado (título, conteúdo, links, anexos, tags), fixado ou desafixado, pelo app, pela API, pelo MCP ou pela MIA, e uma vez por artigo quando os tags mudam em lote. changed_fields lista os nomes públicos dos campos que mudaram. As edições de artigos não públicos não o disparam; uma mudança de visibilidade dispara knowledge_base.article.visibility_changed no lugar dele.

{
  "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

Um artigo público da Knowledge Base foi excluído

Dispara quando um artigo público é excluído (um ou em lote), pelo app, pela API, pelo MCP ou pela MIA. O artigo é a última cópia antes da exclusão; fica 30 dias na Lixeira com os comentários, onde um owner ou admin pode restaurá-lo (restaurar não dispara knowledge_base.article.created). Excluir um artigo não público não o 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

Um artigo da Knowledge Base passou a ser público ou deixou de ser

Dispara quando a visibilidade de um artigo muda para public ou deixa de ser. Ao passar a público, traz o artigo inteiro (trate-o como novo); ao deixar de ser, traz só o id, o título, a visibilidade nova e a data de atualização, para que a integração o remova (o conteúdo não é mais compartilhado). As mudanças entre visibilidades não públicas não o disparam. changed_fields também lista outros campos editados na mesma alteração.

{
  "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

Um formulário web começou a receber respostas

Dispara quando um formulário web passa a publicado: é criado publicado, editado de não publicado para publicado ou publicado com web_forms.forms.publish (pela tela, pela API ou por um agente). Traz o formulário inteiro (campos, destinatários, origens permitidas, configurações antispam, vínculo com o CRM). Despublicá-lo não o dispara, nem um formulário ativado por um script interno fora da 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

Um formulário web recebeu uma resposta

Dispara uma vez para cada resposta real a um formulário web publicado, depois de armazenada com o estado final: payload (nome do campo → valor, exatamente como foi enviado), se o e-mail de notificação saiu (status success ou email_failed), a resposta automática, o lead do CRM que ele criou quando o formulário está vinculado a uma fonte de leads (lead_id, lead_type, person_id; o CRM também dispara crm.lead.created) e a atribuição de anúncios capturada pelo MB Suite Pixel. As respostas descartadas pelos filtros de spam (honeypot, texto sem sentido, assinatura de bot, reCAPTCHA, limites de frequência) e os envios de teste feitos pelo editor não o disparam. O IP do visitante nunca vem incluído.

{
  "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"
    }
  }
}

Cofre

vault.item.shared

Credenciais do Cofre foram compartilhadas por um link seguro

Dispara uma vez para cada link seguro criado no Cofre («Compartilhar acesso», pelo app do MB Suite): quais credenciais ele inclui (id e título), a conta cliente a que pertencem, quando vence, se abre uma única vez, se precisa de chave, e o destinatário e a nota que quem o criou anotou. Nunca traz o link, o código, a chave nem nenhum segredo: o link é uma URL ao portador e só quem o criou pode copiá-lo pelo app. Revogar, abrir ou bloquear um link não o 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

Um link de pedido de acesso foi criado para um cliente

Dispara quando alguém cria um pedido de acesso («Pedir acesso»): um link de uso único em que um cliente informa as credenciais de que a agência precisa, que são criptografadas ao chegar e ficam no Cofre. Traz a conta cliente, os espaços pedidos (tipo e título sugerido), a mensagem, o destinatário anotado e o vencimento. Dispara com os pedidos feitos no app, pela API (vault.requests.create) ou por um script interno. Nunca traz o link nem o código dele (uma URL ao portador): a pessoa o copia pelo app. Quando o cliente envia o formulário, 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

Um cliente enviou as credenciais de um pedido de acesso

Dispara uma vez quando um cliente envia o link de um pedido de acesso: as credenciais já estão criptografadas e armazenadas no Cofre, atribuídas à conta cliente do pedido. Traz o pedido (id, conta, quem o criou), as credenciais criadas (id, título, tipo e se veio uma senha: nunca a senha, o usuário nem o servidor) e o nome e o e-mail que o cliente deixou, se deixou. O ator é o link público (kind system), não um membro. O IP do visitante nunca vem incluído.

{
  "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"
    }
  }
}

Atividade

activity.entry.created

Uma entrada de atividade foi criada

Dispara quando alguém adiciona uma nota, uma reunião ou um marco à linha do tempo de atividade, ou responde a uma entrada (com parent_entry_id), pelo app, pela API, pelo MCP ou pela MIA. Em um workspace, child_org_id é a Conta de que a entrada trata. Traz o texto simples, não o HTML. Os eventos do sistema (auto_event) não o disparam: cada um já tem o evento do próprio 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

O perfil da organização mudou

Dispara quando o perfil da organização muda pela API, pelo MCP ou pela MIA (profile.profile.update): nome, logo, site, setor, país, notas internas, URLs das redes sociais ou a moeda e o fuso horário dos relatórios. Traz o perfil inteiro como foi salvo e changed_fields com os caminhos que mudaram (name, social.youtube, reporting.timezone…). Salvar os mesmos valores não o dispara. As edições feitas na tela de Perfil ainda não o disparam, e uma mudança de slug dispara profile.slug.changed no lugar dele.

{
  "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

O slug da organização mudou

Dispara quando o slug da organização muda, pela tela de Perfil, pela API ou pelo MCP. Os endereços do app (mb-suite.com/<slug>/…) e as páginas públicas de reservas do domínio principal (mb-suite.com/book/<slug>/…) passaram para o slug novo: os links com previous_slug deixam de funcionar e previous_slug fica disponível para outras organizações. Os domínios próprios não são afetados.

{
  "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"
    }
  }
}

Membros

members.member.removed

Um membro saiu da organização ou foi removido

Dispara uma vez para cada pessoa que deixa de ser membro direto da organização: removida por um owner ou admin (reason removed; pelo app, pela API, pelo MCP ou pela MIA, uma ou várias de uma vez) ou saindo por conta própria (reason left). As API keys dela são suspensas e os webhooks que ela criou são desativados logo em seguida. member é a associação como estava antes da saída.

{
  "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

O papel de um membro mudou

Dispara quando um owner ou admin muda o papel de um membro (owner, admin, member ou viewer) pelo app, pela API, pelo MCP ou pela MIA. member.role é o papel novo e previous_role, o anterior. Definir de novo o mesmo papel não o 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

As permissões por módulo de um membro mudaram

Dispara quando as permissões por módulo de um member ou viewer mudam: editadas manualmente (source manual) ou ao aplicar um modelo de permissões (source preset, um evento por membro). Traz os mapas novos: module_permissions para a organização e child_module_permissions para as Contas atribuídas ao membro (id do módulo → hidden, view_only ou full_access; um módulo ausente usa o padrão do papel) e o modelo de onde vieram. Salvar sem alterações não o 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

Alguém foi convidado para a organização

Dispara quando um convite novo é criado (pelo app, pela API, pelo MCP ou pela MIA), tenha o e-mail de convite sido enviado ou não. Convidar de novo um e-mail que já tem um convite pendente reaproveita esse convite e não o dispara. O convite vale por 30 dias; a pessoa entra quando o aceita.

{
  "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

O Brand Kit mudou

Dispara quando o Brand Kit da organização muda: nome do app, logos, favicon, logo dos relatórios, cores, fontes ou botões, pela tela de Branding, pela API, pelo MCP ou pela MIA. changed_fields lista os nomes públicos que mudaram; reset_section é colors, fonts ou buttons quando uma seção inteira voltou aos padrões do MB Suite (caso contrário, null). Salvar os mesmos valores não o 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

Um domínio ou subdomínio foi registrado

Dispara quando a organização registra um endereço: o próprio domínio ou um subdomínio do MB Suite, para o acesso da equipe (o app white-label) ou para o portal de clientes (surface team_access ou client_portal; kind custom_domain ou subdomain). Um domínio próprio começa sem verificação: branding.domain.verified dispara quando o DNS dele estiver correto. Mudar o subdomínio da equipe também dispara branding.domain.removed para o 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

Um domínio ou subdomínio foi removido

Dispara quando a organização remove um endereço (acesso da equipe ou portal de clientes; domínio próprio ou subdomínio), e para o subdomínio anterior da equipe quando ele é substituído. A partir daí esse endereço não abre mais o MB Suite; os registros DNS no registrador não são alterados.

{
  "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

Um domínio próprio foi verificado

Dispara uma vez quando um domínio próprio (acesso da equipe ou portal de clientes) passa de não verificado para verificado: o provedor de hospedagem validou a propriedade e o DNS aponta para o MB Suite, então o endereço começa a servir o app white-label ou o portal. É conferido quando alguém o verifica (tela de Branding, tela do portal de clientes, branding.custom_domain.verify ou 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

O domínio de envio foi verificado

Dispara uma vez quando o domínio de envio de e-mails da organização passa de pendente a verificado no Amazon SES (DKIM e MAIL FROM encontrados no DNS), quando alguém o confere pela tela de Branding, pela API ou pelo MCP. A partir daí os remetentes dele podem ser usados: campanhas, flows, relatórios e e-mails compartilhados saem dos endereços próprios da organização.

{
  "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

Um cliente foi convidado para o portal

Dispara quando um convite para o portal de clientes do workspace é criado, pelo app, pela API, pelo MCP ou pela MIA. Traz o convite (e-mail, as contas e seções que o cliente vai ter, quem convidou, expires_at) e email_sent (false quando o convite foi criado, mas o e-mail falhou; reenviá-lo não o dispara de novo). Nunca traz o link de cadastro. client_portal.client.registered dispara quando a pessoa cria a conta.

{
  "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

Um cliente convidado criou a conta do portal

Dispara uma vez quando uma pessoa aceita um convite para o portal e cria a conta (e-mail e senha, ou Google): a partir daí ela pode entrar. Traz o cliente novo (o id dele é o id de cliente em client_portal.clients.*: e-mail, contas, seções, auth_provider) e invitation_id; o ator é o cliente. Os clientes que recebem acesso direto com senha pelo app não o disparam.

{
  "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

Um cliente do portal perdeu o acesso

Dispara quando um cliente do portal é desativado pela API, pelo MCP ou pela MIA: ele não consegue mais entrar e as sessões abertas dele foram encerradas (sessions_ended). Traz o cliente com status inactive. Nada foi excluído: se o acesso voltar, dispara client_portal.client.reactivated. Desativá-lo pela lista de clientes do app ainda não o 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

Um cliente do portal recuperou o acesso

Dispara quando um cliente do portal desativado é reativado pela API, pelo MCP ou pela MIA: ele pode entrar de novo com o mesmo login e ver as contas e seções que tinha. Traz o cliente com status active. Reativá-lo pela lista de clientes do app ainda não o 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"
    }
  }
}

Integrações

integrations.credential.disconnected

Uma conexão de plataforma foi desconectada

Dispara quando alguém desconecta uma das conexões de plataforma da organização (Google Ads, Meta, TikTok, LinkedIn, YouTube, WhatsApp…), pelo app, pela API, pelo MCP ou pela MIA, uma vez por conexão (desconectar uma plataforma inteira dispara um por conexão). credential é o último estado dela, sem tokens; cleaned_data_sources lista as plataformas de Fontes de dados que foram desvinculadas com ela e paused_lead_sources, quantas fontes de leads do CRM foram pausadas. Cada conta desvinculada também dispara integrations.data_source.unlinked. Uma conexão removida pela própria Meta (a pessoa removeu o app) ainda não o dispara. A do LinkedIn ou do TikTok não chega a um webhook: os termos deles não deixam enviar a ele os dados da conta 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

Uma conta foi vinculada em Fontes de dados

Dispara quando uma conta de uma plataforma (uma conta de anúncios, uma propriedade de analytics, um site do Search Console, um perfil de empresa, uma página, um canal ou um número de WhatsApp) é vinculada à organização em Fontes de dados, pelo app, pela API, pelo MCP ou pela MIA (source manual) ou pela atribuição em lote do workspace (source bulk_assignment, disparado na Conta). Atualizar uma conta que já estava vinculada não o dispara. As contas escolhidas dentro de um fluxo de conexão OAuth (Meta, TikTok, cadastro do WhatsApp) ainda não o disparam.

{
  "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

Uma conta foi desvinculada de Fontes de dados

Dispara uma vez para cada conta que deixa de estar vinculada à organização em Fontes de dados, com o motivo: unlinked (essa conta), platform_unlinked (todas as contas da plataforma dela), replaced (outra conta ocupou o lugar dela), credential_disconnected (a conexão dela foi desconectada), inheritance_deactivated (o workspace deixou de conectar a plataforma nesta Conta), mode_changed (a Conta passou a plataforma para a própria conexão) ou bulk_assignment (a atribuição em lote do workspace deixou a Conta sem ela). data_source é o último estado dela.

{
  "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

Um convite de partner foi enviado por e-mail

Dispara quando o workspace envia por e-mail um convite de partner ao owner de outra organização (pelo app, pela API, pelo MCP ou pela MIA), e de novo a cada reenvio (resent: true, com o novo 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

Uma organização aceitou o convite e agora é uma conta

Dispara quando a pessoa convidada aceita um convite de partner no app do MB Suite com uma das organizações de que é owner: a partir de agora ela é uma conta do workspace (account) e continua pagando a própria assinatura (billing mode self_pays). O ator é a pessoa que aceitou, a partir da outra organização.

{
  "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

A pessoa convidada recusou um convite de partner

Dispara quando a pessoa convidada recusa um convite de partner no app do MB Suite. O ator é essa pessoa, de fora do 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

O workspace cancelou um convite de partner

Dispara quando o workspace cancela um convite de partner pendente (pelo app, pela API, pelo MCP ou pela MIA). Cancelar um que já estava cancelado não o dispara de novo.

{
  "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

O workspace pediu a uma conta para passar o faturamento para a agência

Dispara quando o workspace pede a uma das contas self_pays dele que passe a ser paga pela agência (pelo app, pela API, pelo MCP ou pela MIA). Nada muda no faturamento até a conta aceitar.

{
  "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

A conta aceitou: o faturamento passa para a agência no fim do período

Dispara quando a conta aceita o pedido no app do MB Suite enquanto tem uma assinatura ativa: a assinatura não é renovada e, em scheduled_for (o fim do período pago), a agência começa a pagar por ela (partners.billing_transition.completed). Uma conta em teste ou sem assinatura passa na hora e dispara só .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

Agora a agência paga pela conta

Dispara quando a mudança é executada: a conta passa para billing mode parent_pays (a agência paga pelos módulos dela a partir da próxima fatura) e herda as integrações da agência. Acontece quando a conta aceita durante o teste, ou pelo sistema quando o período pago dela termina (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

A conta recusou o pedido

Dispara quando o owner ou um admin da conta recusa o pedido (pelo app, pela API, pelo MCP ou pela MIA): a conta continua pagando a própria assinatura.

{
  "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

Um pedido de transição de faturamento foi cancelado

Dispara quando qualquer um dos lados cancela um pedido pendente (pelo app, pela API, pelo MCP ou pela MIA), ou um programado pelo app (a assinatura da conta volta a ser renovada). Nada muda no faturamento.

{
  "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"
    }
  }
}