API REST de Recebimento
- Data de publicação: 09 de Outubro de 2026
- Versão necessária: plugin de Recebimento 11.261.2570
Objetivo
Disponibilizar no RUB a API de Recebimento, para que sistemas externos (ERP, TMS, WMS e Compras) incluam, atualizem e consultem ordens e avisos de recebimento por REST / JSON, com validação prévia dos produtos e integridade da gravação.
Contexto
A abertura de recebimentos dependia, em grande parte, da digitação ou de cargas internas. Integradores precisavam de um contrato estável para enviar o pedido antes da conferência, sem gravar itens inválidos e sem alterar uma ordem que já entrou em conferência.
O que mudou
A API fica disponível em /api/rest/receiving/v1 e contempla:
- POST para incluir uma ordem ou aviso de recebimento;
- PUT para atualizar uma ordem ainda editável;
- GET para listar ordens de forma paginada ou obter o detalhe completo pelo código.
Antes de persistir, todos os produtos do lote são validados. Por padrão, a gravação é tudo ou nada: ou a ordem entra completa, ou nada é gravado. Esse comportamento pode ser desligado para aceitar só os produtos válidos.
Fluxo de Decisão do Processamento
O motor de recebimento valida todos os itens antes de efetivar qualquer gravação. O diagrama a seguir ilustra a sequência de decisão entre a consistência estrita (tudo ou nada) e a continuidade operacional (aceite parcial):
graph TD
A[Requisição POST/PUT /api/rest/receiving/v1] --> B{Validar itens do lote}
B -->|Todos válidos| C[Gravar Ordem Completa no RUB]
C --> D[Retorno HTTP 200 Sucesso]
B -->|Há itens inválidos| E{accept_partial definido?}
E -->|Sim: true| F[Gravar itens válidos e registrar observação na ordem]
E -->|Sim: false| G[Reversão total - Rollback]
E -->|Não informado| H{Config recebimentoAceitaParcial ligada?}
H -->|Sim| F
H -->|Não| G
F --> I[Retorno HTTP 200 com unaccepted_products]
G --> J[Retorno HTTP 400 Bad Request com unaccepted_products]
Gravação Tudo ou Nada (Consistência Estrita)
Na modalidade tudo ou nada, o motor de recebimento exige que 100% dos produtos do lote sejam válidos para que a ordem seja persistida. Se houver qualquer divergência cadastral ou item inconsistente:
- Ocorre a reversão total (rollback) de toda a transação;
- Nenhum cabeçalho, item ou vínculo da ordem é gravado no banco de dados;
- Elimina-se o risco de criar ordens incompletas ou divergentes entre o sistema de origem (ERP/TMS/WMS) e a loja;
- A API retorna HTTP 400 Bad Request acompanhado do nó estruturado
unaccepted_products, listando os itens rejeitados e o motivo da recusa.
Como acionar a gravação tudo ou nada
- Explicitamente no payload: enviar
"accept_partial": false. - Por configuração do sistema: omitir o campo
accept_partialquando a configuraçãorecebimentoAceitaParcial(Permite aceite parcial de produtos na API) estiver desligada na loja ou tenant.
Exemplo: Gravação Tudo ou Nada com Falha em Produto
Requisição enviada (accept_partial: false):
{
"code": "ORD-2026-9001",
"store": 30001,
"accept_partial": false,
"items": [
{ "product": "78910001001", "quantity": 50 },
{ "product": "99999999999", "quantity": 10 }
]
}Retorno da API (HTTP 400 Bad Request — Nenhum item gravado):
{
"status": 400,
"message": "Ordem não pode ser processada pois contém produtos inválidos e o aceite parcial está desativado.",
"unaccepted_products": [
{
"product": "99999999999",
"reason": "PRODUTO_NAO_CADASTRADO"
}
]
}Gravação com Aceite Parcial (Continuidade Operacional)
A modalidade de aceite parcial foi concebida para cenários em que o descarregamento das mercadorias na doca não pode ser paralisado por divergências cadastrais pontuais ou cadastro incompleto de itens secundários.
Comportamento do motor:
- Os produtos aprovados e cadastrados são persistidos imediatamente na nova ordem de recebimento (ou na ordem atualizada);
- Os produtos inconsistentes ou não localizados são isolados e não compõem a ordem gerada;
- Geração automática de observação (obs): para assegurar total visibilidade na loja e rastreabilidade na conferência física, cada item não aceito ou não gravado gera automaticamente uma observação na ordem de recebimento no RUB, detalhando o produto recusado e o motivo da rejeição;
- A API responde sempre HTTP 200 OK (tanto na criação quanto na atualização), gerando a ordem com os itens aprovados e devolvendo o nó
unaccepted_productscom os itens que ficaram de fora; - Caso extremo: se todos os produtos do lote forem inválidos, a API responde HTTP 400 Bad Request, pois uma ordem de recebimento não pode ser aberta sem nenhum item válido.
Como acionar o aceite parcial
- Explicitamente no payload: enviar
"accept_partial": true. - Por configuração do sistema: omitir o campo
accept_partialquando a configuraçãorecebimentoAceitaParcial(Permite aceite parcial de produtos na API) estiver ligada na loja ou tenant.
Exemplo: Gravação com Aceite Parcial (Item Válido Persistido)
Requisição enviada (accept_partial: true):
{
"code": "ORD-2026-9001",
"store": 30001,
"accept_partial": true,
"items": [
{ "product": "78910001001", "quantity": 50 },
{ "product": "99999999999", "quantity": 10 }
]
}Retorno da API (HTTP 200 OK — Ordem criada com itens aceitos e observações geradas):
{
"status": 200,
"code": "ORD-2026-9001",
"message": "Ordem de recebimento criada com aceite parcial de produtos.",
"unaccepted_products": [
{
"product": "99999999999",
"reason": "PRODUTO_NAO_CADASTRADO"
}
]
}Comparativo: Quando Utilizar Cada Modalidade
| Critério | Tudo ou Nada (accept_partial: false) |
Aceite Parcial (accept_partial: true) |
|---|---|---|
| Garantia de integridade | Consistência estrita (ordem idêntica ao documento de origem) | Consistência de itens válidos com isolamento de pendências |
| Comportamento em inconsistência | Reversão total (rollback) sem gravar nenhum item | Grava itens válidos, gera observação na ordem para os recusados e devolve unaccepted_products |
| Status HTTP com aceite parcial | 400 Bad Request |
200 OK |
| Impacto operacional | Exige correção do cadastro ou reenvio integral antes da descarga | Permite iniciar imediatamente a conferência física dos produtos válidos |
| Recomendado para | Cargas fechadas com vínculo fiscal estrito (onde lote parcial gera bloqueio) | Cargas fracionadas de alto giro ou transferências onde pendências são tratadas depois |
| Configuração padrão (quando omitido) | recebimentoAceitaParcial desligada |
recebimentoAceitaParcial ligada |
Ordens que já não podem ser editadas — por exemplo, em conferência (EM_CONFERENCIA) — não são alteradas.
A autenticação segue o padrão das demais APIs REST do RUB, com token de aplicativo.
O contrato detalhado, exemplos de payload e códigos de cada campo estão na Documentação da API, na seção de Recebimento.
Códigos de retorno
- 200 — inclusão ou atualização concluída com sucesso (total ou com aceite parcial); se houver produtos recusados no aceite parcial, voltam em
unaccepted_productse geram observação na ordem; - 400 — recusa integral da requisição, com a relação de produtos não aceitos;
- 409 — a ordem existe, mas o status atual não permite alteração.
Benefícios
- Integração direta de avisos de recebimento a partir do ERP, TMS ou WMS;
- Menos retrabalho na loja, porque produtos inválidos são sinalizados antes da conferência;
- Previsibilidade para o integrador, com aceite parcial opcional e bloqueio de alteração fora da janela editável.