YOM Docs

Untitled

Preço de entrega

A YOM pode delegar ao sistema do cliente o cálculo do custo de entrega de um pedido. Quando um comércio ou um vendedor cota ou confirma um pedido, a YOM envia uma requisição HTTP POST ao endpoint do cliente com o detalhe do Order. O cliente responde com o custo líquido da entrega, ou indica que não pode cotá-la.

<aside> 📝

O cliente só precisa expor o endpoint e informar à YOM sua URL. Nenhuma outra configuração é necessária.

</aside>

Quando a YOM o chama


A consulta ocorre em quatro momentos, sempre de forma síncrona:

Um mesmo pedido gera, portanto, mais de uma chamada: pelo menos uma ao cotar na tela e outra ao confirmá-lo.

<aside> ⚠️

A consulta é totalmente omitida quando o comércio não tem código no sistema do cliente. Sem order.externalId não há cotação e o pedido é criado com entrega em 0.

</aside>

Endpoint


POST <tu_dominio>/webhooks/yom/order/delivery-price

Corpo da requisição

{
  "order": { ... }
}

Campos


Order

A entidade order, dentro da chave order do corpo.

Campo Tipo Obrigatoriedade Descrição Exemplos
externalId 📝 Texto 🟢 Obrigatório Código do Comércio no sistema do cliente. É o único campo cuja ausência impede a consulta. "10023456"
domain 📝 Texto 🟢 Obrigatório Domínio do cliente ao qual o pedido pertence. "cliente.youorder.me"
shippingAddress 📝 Objeto → ShippingAddress 🟢 Obrigatório Endereço de entrega do pedido. Ver detalhe abaixo.
products 🔡 Lista de Objetos 🟢 Obrigatório Linhas do pedido, com sku, quantity e pricing. Úteis para cotar por peso ou volume.
pricing 📝 Objeto 🟢 Obrigatório Totais do pedido. Na ida, pricing.shipping viaja com seus valores padrão em 0. {"totalPrice": 35880}
estimatedDeliverAt 📅 Data ⚪ Opcional Data de entrega planejada, no formato ISO 8601. "2026-09-18T00:00:00.000Z"
distributionCenterId 🆔 ObjectId ⚪ Opcional Centro de distribuição associado ao pedido. "650a1b2c3d4e5f6a7b8c9d99"
commerceId
commerceName 📝 Texto ⚪ Opcional Identificador e nome do Comércio na YOM. "Minimarket Los Aromos"
sellerId 🔡 Lista de Textos ⚪ Opcional Identificadores do ou dos Vendedores associados ao pedido. ["186"]
type 📝 Texto ⚪ Opcional Tipo de pedido.
"order" → pedido
"quote" → cotação "order"
observation 📝 Texto ⚪ Opcional Observação do pedido. "Entregar por la mañana"

ShippingAddress

O objeto order.shippingAddress, com o destino da entrega.

Campo Tipo Obrigatoriedade Descrição Exemplos
address 📝 Texto 🟢 Obrigatório Rua e número do endereço de entrega. "Av. Siempre Viva 742"
commune 📝 Texto 🟢 Obrigatório Comuna de destino. É o campo que a maioria das tarifas usa para determinar a cobertura. "Maipú"
city 📝 Texto ⚪ Opcional Cidade de destino. "Santiago"
name
phone 📝 Texto ⚪ Opcional Nome e telefone de quem recebe a entrega. "Bodega central"
metadata.coordinates 📝 Objeto ⚪ Opcional Coordenadas do destino, com latitude e longitude. {"latitude": -33.5110, "longitude": -70.7580}
metadata.administrativeAreaLevel1 📝 Objeto ⚪ Opcional Região ou província do destino; o nome viaja em longName. {"longName": "Región Metropolitana"}
metadata.country 📝 Objeto ⚪ Opcional País do destino; o nome viaja em longName. {"longName": "Chile"}

<aside> ℹ️

Nas cotações prévias o pedido ainda não existe: é um rascunho montado com o que está na tela. Apenas os campos marcados como obrigatórios estão garantidos; o restante pode chegar vazio ou ausente.

</aside>

Resposta esperada


O endpoint deve responder 200 com Content-Type: application/json.

Campo Tipo Obrigatoriedade Descrição Exemplos
transportationCost 🔢 Número 🟢 Obrigatório Custo da entrega sem imposto. É o campo que a YOM valida para decidir se houve cotação.
O valor 0 é válido e significa entrega grátis. 1500
netValue 🔢 Número 🟢 Obrigatório Custo da entrega sem imposto. É o valor que é guardado no pedido e o que viaja ao sistema do cliente. Deve coincidir com transportationCost. 1500
netTaxedValue 🔢 Número 🟢 Obrigatório Custo da entrega com imposto incluído. É o valor exibido ao comprador. 1785
taxesApplied.code 🔢 Número ⚪ Opcional Código do imposto aplicado à entrega. 14
taxesApplied.value 🔢 Número ⚪ Opcional Taxa do imposto expressa como fração, não como porcentagem.
0.19 equivale a 19%. 0.19

<aside> 🚨

O campo netValue deve vir sempre. A YOM valida transportationCost, mas guarda netValue: uma resposta que traz o primeiro e omite o segundo é aceita como cotação válida e deixa o pedido com entrega em 0, sem nenhum erro visível. É a falha mais frequente ao conectar uma integração nova.

</aside>

Entrega cotada

{
  "transportationCost": 1500,
  "netValue": 1500,
  "netTaxedValue": 1785,
  "taxesApplied": {"code": 14, "value": 0.19}
}

Entrega grátis

{
  "transportationCost": 0,
  "netValue": 0,
  "netTaxedValue": 0,
  "taxesApplied": {"code": 14, "value": 0.19}
}

Sem cotação

Uma resposta 200 que não inclua transportationCost é interpretada como se não tivesse havido cotação. O pedido é criado da mesma forma, com entrega em 0, salvo se o cliente tiver ativada a exigência de cotação.

{}

Rejeição com motivo


Quando a entrega não pode ser cotada por uma razão de negócio — comuna fora de cobertura, peso máximo excedido, janela de entrega indisponível —, o endpoint deve responder um status 4xx com a explicação no corpo. A YOM a captura e a exibe ao usuário tal como está.

O texto é buscado, nesta ordem, em errors.message, detail ou message; se o corpo for texto simples, é usado por completo.

HTTP/1.1 422
Content-Type: application/json

{
  "message": "No existen parámetros de despacho hacia la comuna de destino."
}

O usuário vê esse mesmo texto na tela e o pedido não avança.

<aside> 🛑

Um 5xx nunca é interpretado como rejeição. Um erro de servidor é uma falha de infraestrutura, não uma decisão de negócio: é traduzido para um erro genérico que o comprador não consegue resolver. Para comunicar um motivo é preciso responder 4xx.

</aside>

Exemplo


POST <https://api.cliente.com/webhooks/yom/order/delivery-price>
Content-Type: application/json
Accept: application/json
x-auth-token: 6a5a8ee27726337b51c72405
origin: legacy.youorder.me

{
  "order": {
    "externalId": "10023456",
    "domain": "cliente.youorder.me",
    "commerceId": "6412f0a1b2c3d4e5f6a7b8c9",
    "commerceName": "Minimarket Los Aromos",
    "distributionCenterId": "64aa11bb22cc33dd44ee55ff",
    "estimatedDeliverAt": "2026-09-18T00:00:00.000Z",
    "type": "order",
    "status": "pending",
    "shippingAddress": {
      "name": "Bodega central",
      "address": "Av. Siempre Viva 742",
      "commune": "Maipú",
      "city": "Santiago",
      "metadata": {
        "coordinates": {"latitude": -33.5110, "longitude": -70.7580},
        "administrativeAreaLevel1": {"longName": "Región Metropolitana"},
        "country": {"longName": "Chile"}
      }
    },
    "products": [
      {"sku": "SKU-001", "quantity": 12, "pricing": {"totalPrice": 35880}}
    ],
    "pricing": {
      "totalPrice": 35880,
      "netTotalPrice": 30151,
      "finalTotalPrice": 35880,
      "shipping": {"netValue": 0, "netTaxedValue": 0}
    }
  }
}
curl -X POST \
  '<https://api.cliente.com/webhooks/yom/order/delivery-price>' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'x-auth-token: 6a5a8ee27726337b51c72405' \
  -d '{"order": { ... }}'

Considerações


<aside> ⏱️

O endpoint deve responder em menos de 30 segundos. Passados 60 segundos a conexão é cortada e a cotação se perde.

</aside>