# Entrega

> Rota da API para liberar ou retirar acessos enviando uma venda para uma entrega Customizada, com processamento na hora.

Esta rota recebe uma venda no mesmo formato do postback da [entrega Customizada](/entregas/custom) e processa na hora, sem fila: cria o aluno se ele ainda não existir, libera (ou retira) os cursos configurados na entrega e já devolve o resultado.

Base: `https://<sua-plataforma>/api/v1` · Autenticação: cabeçalho `Authorization` com sua chave (veja [API](/configuracoes/api)).

:::info Só para entregas Customizadas
A venda precisa casar com uma entrega do tipo **Customizado**: o `produto_id` enviado tem que ser igual ao **ID do Produto** cadastrado na entrega. Veja como criar uma em [Entrega Customizada](/entregas/custom).
:::

## Enviar uma entrega

```
POST /entrega/enviar
```

| Parâmetro | Obrigatório | Descrição |
|---|---|---|
| `status` | Sim | Situação da venda: `aprovado` libera o acesso; `cancelado`, `reembolsado`, `chargeback` ou `disputa` retiram o acesso dado por essa venda |
| `produto_id` | Sim | O **ID do Produto** cadastrado na entrega Customizada |
| `cliente_email` | Sim | E-mail do aluno |
| `codigo` | Não | Código único da venda (se não enviar, a plataforma gera um). Envie o mesmo código para atualizar a mesma venda, por exemplo num reembolso |
| `cliente_nome` | Não | Nome do aluno |
| `cliente_doc` | Não | CPF ou CNPJ |
| `cliente_celular` | Não | Celular |
| `cliente_endereco`, `cliente_endereco_n`, `cliente_endereco_comp`, `cliente_endereco_bairro`, `cliente_endereco_cidade`, `cliente_endereco_estado`, `cliente_endereco_cep` | Não | Endereço do cliente |
| `produto_nome` | Não | Nome do produto vendido (só registro) |
| `valor` | Não | Valor da venda (ex.: `497.00`) |
| `pagamento` | Não | Forma de pagamento (só registro) |
| `recorrencia_id` | Não | Código da assinatura, em vendas recorrentes |
| `recorrencia_status` | Não | `em-atraso` ou `cancelado` retiram o acesso da assinatura |
| `tags` | Não | Tags a aplicar no aluno, separadas por ponto e vírgula (ex.: `VIP;Turma Outubro`) |
| `comecou_em` | Não | Data de início do acesso, para liberar com data retroativa |

O corpo pode ir em JSON ou como formulário. Ao contrário do postback, esta rota **não** precisa do campo `token`: a chave de API já autentica a requisição.

```bash
curl -X POST https://escola.asalahub.com/api/v1/entrega/enviar \
  -H "Authorization: ash_sua_chave_aqui" \
  -H "Content-Type: application/json" \
  -d '{
    "codigo": "PEDIDO-1001",
    "status": "aprovado",
    "produto_id": "CURSO-ATENDIMENTO",
    "cliente_nome": "Maria Silva",
    "cliente_email": "maria@email.com",
    "cliente_celular": "+5521999990000",
    "valor": "497.00",
    "tags": "Turma Outubro"
  }'
```

A resposta traz, dentro de uma lista, a venda registrada (a mesma que aparece em **Vendas** no painel):

```json
{
  "success": true,
  "code": 200,
  "data": [
    {
      "id": 845,
      "instancia_id": 3,
      "integracao_id": 21,
      "importacao_id": null,
      "importacao_comecou_em": null,
      "processado": 1,
      "engine": "custom",
      "engine_id": "1",
      "recorrencia_id": null,
      "recorrencia_status": null,
      "recorrencia_encerra_em": null,
      "status": "aprovado",
      "pagamento": null,
      "produto_id": "CURSO-ATENDIMENTO",
      "produto_nome": null,
      "itens": null,
      "cliente_nome": "Maria Silva",
      "cliente_doc": null,
      "cliente_email": "maria@email.com",
      "cliente_celular": "+5521999990000",
      "cliente_endereco": null,
      "cliente_endereco_cep": null,
      "cliente_endereco_comp": null,
      "cliente_endereco_n": null,
      "cliente_endereco_bairro": null,
      "cliente_endereco_cidade": null,
      "cliente_endereco_estado": null,
      "valor": "497.00",
      "erro": null,
      "payload": { "codigo": "PEDIDO-1001", "status": "aprovado", "...": "..." },
      "payload_headers": { "content-type": "application/json", "...": "..." },
      "updated_at": "15/10/2026 às 10:42",
      "created_at": "15/10/2026 às 10:42"
    }
  ],
  "profiler": { "start": 1789737057.12, "finish": 1789737057.31, "process": 0.19 }
}
```

| Campo | Descrição |
|---|---|
| `id` | ID da venda na plataforma |
| `integracao_id` | ID da entrega que recebeu a venda |
| `processado` | `1` quando a venda já foi processada |
| `status` | Situação da venda (`aprovado`, `cancelado`, `reembolsado`...) |
| `erro` | Motivo, se algo impediu o processamento |
| `payload` | O corpo que você enviou |

Se faltar um campo obrigatório, nenhuma entrega casar com o `produto_id` ou o processamento falhar (por exemplo, e-mail inválido ou de um administrador), a resposta é `409` com o motivo em `msg`.

## Postback por entrega (sem chave de API)

Se o sistema que vai avisar as vendas não consegue enviar o cabeçalho `Authorization` (caso da maioria dos gateways de pagamento), use o **postback da entrega** em vez desta rota. Cada entrega tem um endereço próprio, mostrado na tela da entrega, no formato:

```
https://<sua-plataforma>/api/postback/<gateway>/<token>
```

O `<token>` identifica e autoriza aquela entrega, então trate o endereço como uma senha. Diferente do `/entrega/enviar`, o postback entra numa fila e é processado em seguida. Veja como configurar em [Entregas e integrações](/entregas/entregas-e-integracoes) e, para o formato Customizado, em [Entrega Customizada](/entregas/custom).
