Pular para o conteúdo principal

Fechar cesta

Quem fecha a cesta é o ERP. Quando isso acontece, o ERP faz uma chamada no canal com os itens finais, e o Sipru registra o que foi fechado.

Não é uma segunda gravação do pedido: os itens já estão no ERP, lançados pelo próprio ERP ou vindos do Siprinho.

A rota​

Use o endpoints.cesta que voltou na abertura do canal:

POST $SIPRU_BASE_URL/api/erp/channel/{channelId}/cesta

/orcamento é o nome antigo de /cesta, mantido por compatibilidade: responde igual. Integrações novas usam /cesta.

curl -X POST $SIPRU_BASE_URL/api/erp/channel/$CHANNEL_ID/cesta \
-H "Authorization: Bearer $SIPRU_SECRET" \
-H "X-Sipru-Partner-Id: $SIPRU_PARTNER_ID" \
-H "X-ERP-Name: $ERP_NAME" \
-H "X-ERP-Version: $ERP_VERSION" \
-H "X-Local-MAC-Address: $DEVICE_MAC_ADDRESS" \
-H "X-Local-Machine-Name: $LOCAL_MACHINE_NAME" \
-H "X-CNPJ: $CNPJ_LOJA" \
-H "X-Codigo-Externo-Rede: $CODIGO_DA_REDE" \
-H "X-Codigo-Externo-Loja: $CODIGO_DA_LOJA" \
-H "Content-Type: application/json" \
-d '{
"items": [
{
"sku": "<codigo-do-produto>",
"quantity": 1,
"price": 0,
"vendedor": {
"cpf": "<cpf-do-vendedor>",
"email": "<email-do-vendedor>",
"login": "<login-do-vendedor>",
"codigoExterno": "<codigo-do-vendedor-no-erp>"
}
}
],
"cestaId": "<id-da-cesta>",
"cestaCodigoExterno": "<codigo-externo-da-cesta>",
"cestaAbertaEm": "<data-de-abertura-da-cesta>",
"cestaFechadaEm": "<data-de-fechamento-da-cesta>"
}'

Os headers são os mesmos de toda chamada à Sipru — ver Headers.

O corpo​

CampoTipoObrigatórioDescrição
itemsarraysimOs itens finais da cesta no ERP. De 1 a 200 linhas.
items[].skustringsimCódigo do produto no ERP (o mesmo productCode).
items[].quantitynúmerosimQuantidade. Maior que zero.
items[].pricenúmerosimPreço unitário fechado, a partir de zero.
items[].vendedorobjeto—Vendedor que lançou o item. Envie os identificadores que tiver: cpf, email, login, codigoExterno ou outro com que o ERP trabalhe.
cestaIdstring—Identificador da cesta no ERP.
cestaCodigoExternostring—Código externo da cesta no ERP.
cestaAbertaEmdata e hora—Quando a cesta foi aberta no ERP.
cestaFechadaEmdata e hora—Quando a cesta foi fechada no ERP.

Mande todos os itens da cesta, inclusive os que o vendedor lançou direto no ERP: o Sipru só conhece a cesta inteira por aqui.

Uma linha inválida — sem sku, com quantity menor ou igual a zero ou price negativo — recusa a requisição inteira, em vez de gravar o resto em silêncio: o ERP não fecha achando que mandou tudo. Qualquer outro campo, no corpo ou em cada linha, é opcional: a Sipru guarda o que vier, mesmo sem usar ainda em nenhuma regra, e ele nunca recusa o fechamento sozinho.

A resposta​

{
"success": true,
"id": "temp-12345:cesta",
"documentType": "cesta",
"tempQuoteId": "temp-12345",
"quoteId": null,
"itemCount": 3,
"total": 78.73,
"closedCount": 12,
"createdAt": "2026-09-14T11:46:27.592Z",
"updatedAt": "2026-10-13T21:44:22.335Z",
"extra": {
"cestaId": "7f11e004-0498-4892-8b34-096838fffeda",
"cestaCodigoExterno": "PV-000126",
"vendedorInicial": {
"cpf": "31793058865"
},
"clienteCpfCnpj": "01234567891025",
"cestaAbertaEm": "2026-09-10T10:41:21.0695393+00:00",
"cestaFechadaEm": "2026-09-14T20:56:21.0695393+00:00"
}
}
  • id identifica o registro do fechamento: a cotação temporária seguida de :cesta.
  • itemCount e total são as linhas gravadas e a soma de quantity × price.
  • closedCount conta os fechamentos naquele atendimento. Refechar a mesma cesta sobrescreve o registro anterior e soma 1 a closedCount.
  • quoteId vem null enquanto a cotação temporária não tiver virado cotação no ERP.
  • createdAt é o primeiro fechamento; updatedAt, o último.
  • extra traz os campos opcionais que vieram no corpo (como cestaId e cestaAbertaEm), guardados como vieram. A Sipru ainda não usa esses campos em nenhuma regra.

O canal continua aberto depois do fechamento: o ERP pode corrigir a cesta e fechá-la de novo.

Quando a cesta virar pedido no ERP, informe a venda com o número do pedido.

Erros​

HTTPcodeSignificado
400—items ausente ou vazio, mais de 200 linhas, ou linha sem sku/quantity/price válidos.
401—Credencial de parceiro ausente ou inválida.
404CHANNEL_NOT_FOUNDCanal inexistente — ou pertencente a outro parceiro.
404CHANNEL_PENDING_SIGNUPO vendedor ainda não concluiu o cadastro na Sipru — ver Vendedor sem conta Sipru.
409CHANNEL_CLOSEDO canal já foi encerrado.
500—Erro inesperado no servidor.
503—Falha ao gravar o fechamento. Pode repetir.

O contrato formal está em closeChannelAsCesta na referência da API.