# Eventos de webhook

> Todos os eventos de webhook da v1, quando cada um sai e um exemplo do corpo.

URL: https://precificador3d.com.br/docs/api/webhooks/eventos

Todo evento tem o mesmo envelope: `id`, `tipo`, `versao`, `criado_em`, `conta_id`, `dados` e `url`. `dados` traz o objeto e poucos campos, e pode ganhar campos novos sem aviso. `GET /tipos-de-evento` devolve esta lista.

### `cotacao.criada`

Uma cotação nova foi criada, no app ou pela API.

Em `dados`: `id`, `codigo`, `status`.

Só sai para endpoints criados por quem tem `cotacoes.ver`.

```json
{
  "id": "7b0c1d2e-3f4a-4b5c-8d6e-7f8a9b0c1d2e",
  "tipo": "cotacao.criada",
  "versao": "v1",
  "criado_em": "2026-10-03T14:00:00-03:00",
  "conta_id": "0b8e4c7a-5d2f-4a8e-9c1b-2f3a4b5c6d7e",
  "dados": {
    "objeto": "cotacao",
    "id": "9e0f1a2b-3c4d-4e5f-6a7b-8c9d0e1f2a3b",
    "codigo": "COT-0042",
    "status": "rascunho"
  },
  "url": "https://api.precificador3d.com.br/v1/cotacoes/9e0f1a2b-3c4d-4e5f-6a7b-8c9d0e1f2a3b"
}
```

### `cotacao.enviada`

A cotação foi enviada ao cliente (link ou PDF).

Em `dados`: `id`, `codigo`, `versao`.

Só sai para endpoints criados por quem tem `cotacoes.ver`.

```json
{
  "id": "7b0c1d2e-3f4a-4b5c-8d6e-7f8a9b0c1d2e",
  "tipo": "cotacao.enviada",
  "versao": "v1",
  "criado_em": "2026-10-03T14:00:00-03:00",
  "conta_id": "0b8e4c7a-5d2f-4a8e-9c1b-2f3a4b5c6d7e",
  "dados": {
    "objeto": "cotacao",
    "id": "9e0f1a2b-3c4d-4e5f-6a7b-8c9d0e1f2a3b",
    "codigo": "COT-0042",
    "versao": 1
  },
  "url": "https://api.precificador3d.com.br/v1/cotacoes/9e0f1a2b-3c4d-4e5f-6a7b-8c9d0e1f2a3b"
}
```

### `cotacao.fechamento_pedido`

O cliente clicou em "Quero fechar" no link da cotação.

Em `dados`: `id`, `codigo`, `cor_a_combinar`.

Só sai para endpoints criados por quem tem `cotacoes.ver`.

```json
{
  "id": "7b0c1d2e-3f4a-4b5c-8d6e-7f8a9b0c1d2e",
  "tipo": "cotacao.fechamento_pedido",
  "versao": "v1",
  "criado_em": "2026-10-03T14:00:00-03:00",
  "conta_id": "0b8e4c7a-5d2f-4a8e-9c1b-2f3a4b5c6d7e",
  "dados": {
    "objeto": "cotacao",
    "id": "9e0f1a2b-3c4d-4e5f-6a7b-8c9d0e1f2a3b",
    "codigo": "COT-0042",
    "cor_a_combinar": false
  },
  "url": "https://api.precificador3d.com.br/v1/cotacoes/9e0f1a2b-3c4d-4e5f-6a7b-8c9d0e1f2a3b"
}
```

### `cotacao.status_mudou`

Toda troca de status da cotação, pela tela, pela API, pelo link ou por rotina. Ignore o eco quando `origem.chave_id` for a sua chave.

Em `dados`: `id`, `codigo`, `de`, `para`, `origem { via, chave_id }`.

Só sai para endpoints criados por quem tem `cotacoes.ver`.

```json
{
  "id": "7b0c1d2e-3f4a-4b5c-8d6e-7f8a9b0c1d2e",
  "tipo": "cotacao.status_mudou",
  "versao": "v1",
  "criado_em": "2026-10-03T14:00:00-03:00",
  "conta_id": "0b8e4c7a-5d2f-4a8e-9c1b-2f3a4b5c6d7e",
  "dados": {
    "objeto": "cotacao",
    "id": "9e0f1a2b-3c4d-4e5f-6a7b-8c9d0e1f2a3b",
    "codigo": "COT-0042",
    "de": "enviada",
    "para": "aprovada",
    "origem": {
      "via": "api",
      "chave_id": "9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d"
    }
  },
  "url": "https://api.precificador3d.com.br/v1/cotacoes/9e0f1a2b-3c4d-4e5f-6a7b-8c9d0e1f2a3b"
}
```

### `cotacao.aprovada`

A cotação passou para Aprovada.

Em `dados`: `id`, `codigo`.

Só sai para endpoints criados por quem tem `cotacoes.ver`.

```json
{
  "id": "7b0c1d2e-3f4a-4b5c-8d6e-7f8a9b0c1d2e",
  "tipo": "cotacao.aprovada",
  "versao": "v1",
  "criado_em": "2026-10-03T14:00:00-03:00",
  "conta_id": "0b8e4c7a-5d2f-4a8e-9c1b-2f3a4b5c6d7e",
  "dados": {
    "objeto": "cotacao",
    "id": "9e0f1a2b-3c4d-4e5f-6a7b-8c9d0e1f2a3b",
    "codigo": "COT-0042"
  },
  "url": "https://api.precificador3d.com.br/v1/cotacoes/9e0f1a2b-3c4d-4e5f-6a7b-8c9d0e1f2a3b"
}
```

### `cotacao.recusada`

A cotação passou para Recusada.

Em `dados`: `id`, `codigo`.

Só sai para endpoints criados por quem tem `cotacoes.ver`.

```json
{
  "id": "7b0c1d2e-3f4a-4b5c-8d6e-7f8a9b0c1d2e",
  "tipo": "cotacao.recusada",
  "versao": "v1",
  "criado_em": "2026-10-03T14:00:00-03:00",
  "conta_id": "0b8e4c7a-5d2f-4a8e-9c1b-2f3a4b5c6d7e",
  "dados": {
    "objeto": "cotacao",
    "id": "9e0f1a2b-3c4d-4e5f-6a7b-8c9d0e1f2a3b",
    "codigo": "COT-0042"
  },
  "url": "https://api.precificador3d.com.br/v1/cotacoes/9e0f1a2b-3c4d-4e5f-6a7b-8c9d0e1f2a3b"
}
```

### `link.aberto`

O cliente abriu o link da cotação. Sem IP nem navegador de quem abriu.

Em `dados`: `cotacao_id`, `codigo`, `abertura_n`.

Só sai para endpoints criados por quem tem `cotacoes.ver`.

```json
{
  "id": "7b0c1d2e-3f4a-4b5c-8d6e-7f8a9b0c1d2e",
  "tipo": "link.aberto",
  "versao": "v1",
  "criado_em": "2026-10-03T14:00:00-03:00",
  "conta_id": "0b8e4c7a-5d2f-4a8e-9c1b-2f3a4b5c6d7e",
  "dados": {
    "objeto": "link",
    "cotacao_id": "9e0f1a2b-3c4d-4e5f-6a7b-8c9d0e1f2a3b",
    "codigo": "COT-0042",
    "abertura_n": 2
  },
  "url": "https://api.precificador3d.com.br/v1/cotacoes/9e0f1a2b-3c4d-4e5f-6a7b-8c9d0e1f2a3b"
}
```

### `pedido_producao.criado`

Um pedido de produção novo.

Em `dados`: `id`, `codigo`, `tipo`.

Só sai para endpoints criados por quem tem `producao.ver`.

```json
{
  "id": "7b0c1d2e-3f4a-4b5c-8d6e-7f8a9b0c1d2e",
  "tipo": "pedido_producao.criado",
  "versao": "v1",
  "criado_em": "2026-10-03T14:00:00-03:00",
  "conta_id": "0b8e4c7a-5d2f-4a8e-9c1b-2f3a4b5c6d7e",
  "dados": {
    "objeto": "pedido_producao",
    "id": "a0b1c2d3-e4f5-4a6b-8c7d-9e0f1a2b3c4d",
    "codigo": "OP-0107",
    "tipo": "cliente"
  },
  "url": "https://api.precificador3d.com.br/v1/pedidos-producao/a0b1c2d3-e4f5-4a6b-8c7d-9e0f1a2b3c4d"
}
```

### `pedido_producao.situacao_mudou`

O pedido mudou de situação (aberto, em produção, finalizado, cancelado).

Em `dados`: `id`, `codigo`, `situacao_de`, `situacao_para`.

Só sai para endpoints criados por quem tem `producao.ver`.

```json
{
  "id": "7b0c1d2e-3f4a-4b5c-8d6e-7f8a9b0c1d2e",
  "tipo": "pedido_producao.situacao_mudou",
  "versao": "v1",
  "criado_em": "2026-10-03T14:00:00-03:00",
  "conta_id": "0b8e4c7a-5d2f-4a8e-9c1b-2f3a4b5c6d7e",
  "dados": {
    "objeto": "pedido_producao",
    "id": "a0b1c2d3-e4f5-4a6b-8c7d-9e0f1a2b3c4d",
    "codigo": "OP-0107",
    "situacao_de": "aberto",
    "situacao_para": "em_producao"
  },
  "url": "https://api.precificador3d.com.br/v1/pedidos-producao/a0b1c2d3-e4f5-4a6b-8c7d-9e0f1a2b3c4d"
}
```

### `pedido_producao.concluido`

O pedido foi finalizado.

Em `dados`: `id`, `codigo`.

Só sai para endpoints criados por quem tem `producao.ver`.

```json
{
  "id": "7b0c1d2e-3f4a-4b5c-8d6e-7f8a9b0c1d2e",
  "tipo": "pedido_producao.concluido",
  "versao": "v1",
  "criado_em": "2026-10-03T14:00:00-03:00",
  "conta_id": "0b8e4c7a-5d2f-4a8e-9c1b-2f3a4b5c6d7e",
  "dados": {
    "objeto": "pedido_producao",
    "id": "a0b1c2d3-e4f5-4a6b-8c7d-9e0f1a2b3c4d",
    "codigo": "OP-0107"
  },
  "url": "https://api.precificador3d.com.br/v1/pedidos-producao/a0b1c2d3-e4f5-4a6b-8c7d-9e0f1a2b3c4d"
}
```

### `estoque.baixo`

O saldo de um insumo ficou abaixo do mínimo. No máximo um aviso por insumo por dia.

Em `dados`: `insumo { tipo, id }`, `abaixo_do_minimo`.

Só sai para endpoints criados por quem tem `estoque_insumos.ver`.

```json
{
  "id": "7b0c1d2e-3f4a-4b5c-8d6e-7f8a9b0c1d2e",
  "tipo": "estoque.baixo",
  "versao": "v1",
  "criado_em": "2026-10-03T14:00:00-03:00",
  "conta_id": "0b8e4c7a-5d2f-4a8e-9c1b-2f3a4b5c6d7e",
  "dados": {
    "objeto": "insumo",
    "insumo": {
      "tipo": "material_cor",
      "id": "4f5a6b7c-8d9e-4f0a-1b2c-3d4e5f6a7b8c"
    },
    "abaixo_do_minimo": true
  },
  "url": "https://api.precificador3d.com.br/v1/estoque-insumos?abaixo_do_minimo=true"
}
```

### `estoque.movimentado`

Entrada, saída ou ajuste de peças prontas. Agrupado a cada 60 segundos por variação.

Em `dados`: `variacao_id`, `local_id`, `tipo`.

Só sai para endpoints criados por quem tem `produtos.ver`.

```json
{
  "id": "7b0c1d2e-3f4a-4b5c-8d6e-7f8a9b0c1d2e",
  "tipo": "estoque.movimentado",
  "versao": "v1",
  "criado_em": "2026-10-03T14:00:00-03:00",
  "conta_id": "0b8e4c7a-5d2f-4a8e-9c1b-2f3a4b5c6d7e",
  "dados": {
    "objeto": "estoque",
    "variacao_id": "6b7c8d9e-0f1a-4b2c-3d4e-5f6a7b8c9d0e",
    "local_id": "7c8d9e0f-1a2b-4c3d-4e5f-6a7b8c9d0e1f",
    "tipo": "saida"
  },
  "url": "https://api.precificador3d.com.br/v1/estoque?variacao_id=6b7c8d9e-0f1a-4b2c-3d4e-5f6a7b8c9d0e"
}
```

### `produto.criado`

Um produto novo no catálogo.

Em `dados`: `id`, `sku`.

Só sai para endpoints criados por quem tem `produtos.ver`.

```json
{
  "id": "7b0c1d2e-3f4a-4b5c-8d6e-7f8a9b0c1d2e",
  "tipo": "produto.criado",
  "versao": "v1",
  "criado_em": "2026-10-03T14:00:00-03:00",
  "conta_id": "0b8e4c7a-5d2f-4a8e-9c1b-2f3a4b5c6d7e",
  "dados": {
    "objeto": "produto",
    "id": "5a6b7c8d-9e0f-4a1b-2c3d-4e5f6a7b8c9d",
    "sku": "CHAV-DRG"
  },
  "url": "https://api.precificador3d.com.br/v1/produtos/5a6b7c8d-9e0f-4a1b-2c3d-4e5f6a7b8c9d"
}
```

### `produto.atualizado`

Mudou preço, variação, faixa ou status de um produto. Agrupado a cada 60 segundos por produto.

Em `dados`: `id`, `sku`.

Só sai para endpoints criados por quem tem `produtos.ver`.

```json
{
  "id": "7b0c1d2e-3f4a-4b5c-8d6e-7f8a9b0c1d2e",
  "tipo": "produto.atualizado",
  "versao": "v1",
  "criado_em": "2026-10-03T14:00:00-03:00",
  "conta_id": "0b8e4c7a-5d2f-4a8e-9c1b-2f3a4b5c6d7e",
  "dados": {
    "objeto": "produto",
    "id": "5a6b7c8d-9e0f-4a1b-2c3d-4e5f6a7b8c9d",
    "sku": "CHAV-DRG"
  },
  "url": "https://api.precificador3d.com.br/v1/produtos/5a6b7c8d-9e0f-4a1b-2c3d-4e5f6a7b8c9d"
}
```

### `catalogo.atualizado_em_massa`

Uma operação mudou mais de 20 produtos (precificação em massa ou importação). A `url` do evento é `GET /produtos?ordem=atualizado_em`; para pegar só o que mudou, acrescente `atualizado_desde=<desde>`.

Em `dados`: `quantidade`, `desde`.

Só sai para endpoints criados por quem tem `produtos.ver`.

```json
{
  "id": "7b0c1d2e-3f4a-4b5c-8d6e-7f8a9b0c1d2e",
  "tipo": "catalogo.atualizado_em_massa",
  "versao": "v1",
  "criado_em": "2026-10-03T14:00:00-03:00",
  "conta_id": "0b8e4c7a-5d2f-4a8e-9c1b-2f3a4b5c6d7e",
  "dados": {
    "objeto": "catalogo",
    "quantidade": 48,
    "desde": "2026-10-04T12:58:00-03:00"
  },
  "url": "https://api.precificador3d.com.br/v1/produtos?ordem=atualizado_em"
}
```

### `webhook.teste`

Você clicou em "Enviar teste" na tela do endpoint.

Em `dados`: `mensagem`.

```json
{
  "id": "7b0c1d2e-3f4a-4b5c-8d6e-7f8a9b0c1d2e",
  "tipo": "webhook.teste",
  "versao": "v1",
  "criado_em": "2026-10-03T14:00:00-03:00",
  "conta_id": "0b8e4c7a-5d2f-4a8e-9c1b-2f3a4b5c6d7e",
  "dados": {
    "objeto": "teste",
    "mensagem": "Tudo certo com este endpoint."
  },
  "url": null
}
```
