# `return.close`

Devolução fechada.

A Kernos faz o POST no endereço cadastrado no webhook da conexão. Responda 2xx em até 10 s; sem isso, ela tenta de novo com espera crescente (30 s × 2ⁿ, até 1 h) por 3 dias. Confira a `Kernos-Signature` antes de confiar no corpo.

## Cabeçalhos

- `Kernos-Signature` (string, obrigatório): `t=<unix>,v1=<hex>`, com `v1 = HMAC-SHA256(webhook_secret, "<t>.<corpo>")`. Recuse `t` velho: barra o replay.
- `Kernos-Event-Id` (uuid, obrigatório): O id do evento: o mesmo em cada nova tentativa. Use para não processar duas vezes.

## Corpo

- `created_at` (data e hora, obrigatório)
- `data` (objeto, obrigatório)
  - `dispositions` (objeto): Na devolução: as unidades por destino decidido.
  - `divergent_lines` (integer): Linhas em que o contado difere da nota.
  - `id` (uuid)
  - `kind` (string): `purchase` para a nota do fornecedor, `return` para a devolução do cliente.
  - `legs` (lista de objeto): Para onde cada parte vai.
    - `location_code` (string)
    - `place_kind` (string)
    - `qty` (integer)
    - `stock_status` (string)
  - `nfe_key` (string, ou nulo)
  - `receive_cancelled` (integer)
  - `receive_work_order_id` (uuid, ou nulo)
  - `sales_order_id` (uuid, ou nulo)
  - `status` ("closed")
  - `stops` (integer): As paradas da OS de guarda.
  - `work_order_id` (uuid, ou nulo): A OS de guarda que nasceu do fechamento.
  - `written_off_lines` (integer)
- `id` (uuid, obrigatório): O id do fato, igual ao `Kernos-Event-Id`.
- `object` (objeto, obrigatório)
  - `id` (uuid)
  - `type` ("receipt")
- `tenant` (string, obrigatório): A empresa, pelo endereço (`minha-empresa` em `minha-empresa.kernos.com.br`).
- `type` ("return.close", obrigatório)

## Exemplo

A forma do corpo, sem dado real.

**return.close**

```json
{
  "created_at": "2026-10-03T12:00:00Z",
  "data": {
    "dispositions": {},
    "divergent_lines": 0,
    "id": "3f1e0c8a-5b7d-4c21-9a3e-0b1c2d3e4f50",
    "kind": "…",
    "legs": [
      {
        "location_code": "…",
        "place_kind": "…",
        "qty": 0,
        "stock_status": "…"
      }
    ],
    "nfe_key": "…",
    "receive_cancelled": 0,
    "receive_work_order_id": "3f1e0c8a-5b7d-4c21-9a3e-0b1c2d3e4f50",
    "sales_order_id": "3f1e0c8a-5b7d-4c21-9a3e-0b1c2d3e4f50",
    "status": "closed",
    "stops": 0,
    "work_order_id": "3f1e0c8a-5b7d-4c21-9a3e-0b1c2d3e4f50",
    "written_off_lines": 0
  },
  "id": "3f1e0c8a-5b7d-4c21-9a3e-0b1c2d3e4f50",
  "object": {
    "id": "3f1e0c8a-5b7d-4c21-9a3e-0b1c2d3e4f50",
    "type": "receipt"
  },
  "tenant": "…",
  "type": "return.close"
}
```
