# Eventos de Webhook do SimpleCRM / SimpleCRM Webhook Events

> Especificação de todos os eventos de webhook com payloads de exemplo e instruções de verificação de assinatura.

## Formato do Payload

Cada evento contém:

| Campo | Tipo | Descrição |
|-------|------|-----------|
| `event` | string | Nome do evento (ex: `contact.created`) |
| `timestamp` | integer | Unix timestamp em segundos |
| `data` | object | Dados do recurso afetado |

## Headers Enviados

| Header | Descrição |
|--------|-----------|
| `Content-Type` | `application/json` |
| `X-Webhook-Event` | Nome do evento |
| `X-Webhook-Timestamp` | Unix timestamp |
| `X-Webhook-Signature` | `sha256=<hmac_signature>` |
| `User-Agent` | `SimpleCRM-Webhook/1.0` |

## Verificação de Assinatura

```
message = "{timestamp}.{raw_body}"
signature = HMAC-SHA256(secret, message)
header = "sha256={signature}"
```

---

### Contatos

#### `contact.created`

Disparado quando um novo contato é criado.

```json
{
  "event": "contact.created",
  "timestamp": 1715100000,
  "data": {
    "id": "507f1f77bcf86cd799439011",
    "name": "Maria Santos",
    "email": "maria@empresa.com",
    "phone": "+5511987654321",
    "createdAt": "2026-05-07T10:00:00Z"
  }
}
```

#### `contact.updated`

Disparado quando os dados de um contato são atualizados.

```json
{
  "event": "contact.updated",
  "timestamp": 1715100000,
  "data": {
    "id": "507f1f77bcf86cd799439011",
    "name": "Maria Santos",
    "position": "CEO",
    "updatedAt": "2026-05-07T15:30:00Z"
  }
}
```

#### `contact.deleted`

Disparado quando um contato é removido.

```json
{
  "event": "contact.deleted",
  "timestamp": 1715100000,
  "data": {
    "id": "507f1f77bcf86cd799439011"
  }
}
```

### Empresas

#### `company.created`

Disparado quando uma nova empresa é cadastrada.

```json
{
  "event": "company.created",
  "timestamp": 1715100000,
  "data": {
    "id": "507f1f77bcf86cd799439022",
    "name": "Tech Solutions Ltda",
    "cnpj": "12.345.678/0001-90",
    "createdAt": "2026-05-07T10:00:00Z"
  }
}
```

#### `company.updated`

Disparado quando os dados de uma empresa são atualizados.

```json
{
  "event": "company.updated",
  "timestamp": 1715100000,
  "data": {
    "id": "507f1f77bcf86cd799439022",
    "name": "Tech Solutions Ltda",
    "updatedAt": "2026-05-07T15:30:00Z"
  }
}
```

#### `company.deleted`

Disparado quando uma empresa é removida.

```json
{
  "event": "company.deleted",
  "timestamp": 1715100000,
  "data": {
    "id": "507f1f77bcf86cd799439022"
  }
}
```

### Negócios

#### `deal.created`

Disparado quando um novo negócio é criado no funil de vendas.

```json
{
  "event": "deal.created",
  "timestamp": 1715100000,
  "data": {
    "id": "507f1f77bcf86cd799439033",
    "title": "Implantação ERP",
    "value": 45000.00,
    "stage": "novo",
    "status": "open",
    "createdAt": "2026-05-07T10:00:00Z"
  }
}
```

#### `deal.updated`

Disparado quando um negócio é atualizado (mudança de estágio, valor, etc).

```json
{
  "event": "deal.updated",
  "timestamp": 1715100000,
  "data": {
    "id": "507f1f77bcf86cd799439033",
    "title": "Implantação ERP",
    "stage": "negociacao",
    "probability": 70,
    "updatedAt": "2026-05-07T15:30:00Z"
  }
}
```

#### `deal.deleted`

Disparado quando um negócio é removido do funil de vendas.

```json
{
  "event": "deal.deleted",
  "timestamp": 1715100000,
  "data": {
    "id": "507f1f77bcf86cd799439033"
  }
}
```

### Tarefas

#### `task.created`

Disparado quando uma nova tarefa é criada.

```json
{
  "event": "task.created",
  "timestamp": 1715100000,
  "data": {
    "id": "507f1f77bcf86cd799439044",
    "title": "Follow-up Tech Solutions",
    "dueDate": "2026-05-10T14:00:00Z",
    "priority": "high",
    "createdAt": "2026-05-07T10:00:00Z"
  }
}
```

#### `task.completed`

Disparado quando uma tarefa é marcada como concluída.

```json
{
  "event": "task.completed",
  "timestamp": 1715100000,
  "data": {
    "id": "507f1f77bcf86cd799439044",
    "title": "Follow-up Tech Solutions",
    "completedAt": "2026-05-07T16:00:00Z"
  }
}
```

#### `task.deleted`

Disparado quando uma tarefa é removida.

```json
{
  "event": "task.deleted",
  "timestamp": 1715100000,
  "data": {
    "id": "507f1f77bcf86cd799439044"
  }
}
```

### Faturas

#### `invoice.created`

Disparado quando uma nova fatura é gerada.

```json
{
  "event": "invoice.created",
  "timestamp": 1715100000,
  "data": {
    "id": "507f1f77bcf86cd799439066",
    "number": "INV-2026-0042",
    "total": 7000.00,
    "status": "pending",
    "dueDate": "2026-06-07T00:00:00Z",
    "createdAt": "2026-05-07T10:00:00Z"
  }
}
```

#### `invoice.updated`

Disparado quando uma fatura é atualizada.

```json
{
  "event": "invoice.updated",
  "timestamp": 1715100000,
  "data": {
    "id": "507f1f77bcf86cd799439066",
    "number": "INV-2026-0042",
    "status": "pending",
    "updatedAt": "2026-05-07T15:30:00Z"
  }
}
```

#### `invoice.paid`

Disparado quando uma fatura é marcada como paga.

```json
{
  "event": "invoice.paid",
  "timestamp": 1715100000,
  "data": {
    "id": "507f1f77bcf86cd799439066",
    "number": "INV-2026-0042",
    "total": 7000.00,
    "paidAt": "2026-05-07T16:00:00Z"
  }
}
```

### Cotações

#### `quote.created`

Disparado quando uma nova cotação é criada.

```json
{
  "event": "quote.created",
  "timestamp": 1715100000,
  "data": {
    "id": "507f1f77bcf86cd799439077",
    "number": "QT-2026-0015",
    "total": 9450.00,
    "status": "draft",
    "createdAt": "2026-05-07T10:00:00Z"
  }
}
```

#### `quote.updated`

Disparado quando uma cotação é atualizada (status, itens, etc).

```json
{
  "event": "quote.updated",
  "timestamp": 1715100000,
  "data": {
    "id": "507f1f77bcf86cd799439077",
    "number": "QT-2026-0015",
    "status": "accepted",
    "updatedAt": "2026-05-07T15:30:00Z"
  }
}
```

### Produtos

#### `product.created`

Disparado quando um novo produto é adicionado ao catálogo.

```json
{
  "event": "product.created",
  "timestamp": 1715100000,
  "data": {
    "id": "507f1f77bcf86cd799439055",
    "name": "Consultoria Mensal",
    "price": 3500.00,
    "createdAt": "2026-05-07T10:00:00Z"
  }
}
```

#### `product.updated`

Disparado quando um produto é atualizado.

```json
{
  "event": "product.updated",
  "timestamp": 1715100000,
  "data": {
    "id": "507f1f77bcf86cd799439055",
    "name": "Consultoria Mensal",
    "price": 4000.00,
    "updatedAt": "2026-05-07T15:30:00Z"
  }
}
```

#### `product.deleted`

Disparado quando um produto é removido do catálogo.

```json
{
  "event": "product.deleted",
  "timestamp": 1715100000,
  "data": {
    "id": "507f1f77bcf86cd799439055"
  }
}
```

---

## Lista Completa de Eventos

`contact.created`, `contact.updated`, `contact.deleted`, `company.created`, `company.updated`, `company.deleted`, `deal.created`, `deal.updated`, `deal.deleted`, `task.created`, `task.completed`, `task.deleted`, `invoice.created`, `invoice.updated`, `invoice.paid`, `quote.created`, `quote.updated`, `product.created`, `product.updated`, `product.deleted`

