API Yampi
Search…
Logística

Países

Listar países

GET https://api.dooki.com.br/v2/{alias}/logistics/countries
Response
[
{
"code": "BR",
"name": "Brasil"
},
]

Armazéns

Listar armazéns

GET https://api.dooki.com.br/v2/{alias}/logistics/warehouses
Request
{
"country_code": "BR",
"name": "Doca 1",
"zipcode": "14940000",
"street": "Street Test",
"number": 200,
"neighborhood": "Centro",
"city": "Ibitinga",
"state": "SP"
}
Response
{
"data": {
"id": 1,
"country_code": "BR",
"name": "Doca 1",
"zipcode": "14940000",
"street": "Street Test",
"number": 200,
"complement": null,
"neighborhood": "Centro",
"city": "Ibitinga",
"state": "SP",
},
}

Criar armazéns

POST https://api.dooki.com.br/v2/{alias}/logistics/warehouses
Parâmetro
Tipo
Obrigatório
Descrição
country_code
string
Sim
Código do país.
name
string
Sim
Nome do armazém.
zipcode
string
Sim
CEP do armazém.
street
string
Sim
Rua do armazém.
number
string
Sim
Número do armazém.
complement
string
Não
Complemento do armazém.
neighborhood
string
Sim
Bairro do armazém.
city
string
Sim
Cidade do armazém.
state
string
Sim
Estado do armazém.

Visualizar armazém

GET https://api.dooki.com.br/v2/{alias}/logistics/warehouses/{id}

Atualizar armazém

PUT https://api.dooki.com.br/v2/{alias}/logistics/warehouses/{id}

Excluir armazém

DELETE https://api.dooki.com.br/v2/{alias}/logistics/warehouses/{id}

Estoques

O lojista pode ter um cadastro de múltiplos estoques onde ele pode associar posteriormente os SKUS com suas respectivas quantidades. Um exemplo prático é permitir que ele consiga trabalhar com estoques de fornecedores externos com diferentes prazos de entrega.
Caso um SKU estiver relacionado a um estoque, a disponibilidade final de entrega será sempre a maior.

Listar estoques

GET https://api.dooki.com.br/v2/{alias}/logistics/stocks
Request
{
"name": "Estoque pronta entrega",
"delivery_days": 1,
"warehouse_id": 4
}
Response
{
"data": {
"id": 3,
"warehouse_id": 4,
"name": "Estoque pronta entrega",
"delivery_days": 1,
"warehouse": {
"data": {
"id": 4,
"country_code": "BR",
"name": "Doca 1",
"zipcode": 14940000,
"street": "Street Test",
"number": "200",
"complement": null,
"neighborhood": "Centro",
"city": "Ibitinga",
"state": "SP",
}
}
},
}

Criar estoque

POST https://api.dooki.com.br/v2/{alias}/logistics/stocks
Parâmetro
Tipo
Obrigatório
Descrição
name
string
Sim
Nome do estoque.
delivery_days
int
Sim
Dias de entrega do estoque.
warehouse_id
int
Não
ID do armazém.

Visualizar estoque

GET https://api.dooki.com.br/v2/{alias}/logistics/stocks/{id}

Atualizar estoque

PUT https://api.dooki.com.br/v2/{alias}/logistics/stocks/{id}

Excluir estoque

DELETE https://api.dooki.com.br/v2/{alias}/logistics/stocks/{id}

Reservas de estoque

Acesso as informações de reserva de estoque criada para pedidos. Includes disponíveis: orders.

Listar reservas de estoque

GET https://api.dooki.com.br/v2/{alias}/logistics/stock-reservation
Também é possível acessar as informações de uma reserva de estoque em específico
GET https://api.dooki.com.br/v2/{alias}/logistics/stock-reservation/{id}
Response ao listar reservas de estoque
{
"id": 17,
"order_id": 04,
"sku_id": 2020,
"stock_id": 19,
"sku": "170800-111202",
"sku_name": "Jogo",
"order_status": "handling_products",
"order_status_name": "Produtos em separação",
"order_number": 3329438969873,
"customer_name": "John Doe",
"quantity": 1,
"previous_quantity": 999992,
"authorized_at": "2020-05-20 03:33:04",
"cancelled_at": null,
"created_at": {
"date": "2020-05-19 17:07:25.000000",
"timezone_type": 3,
"timezone": "America/Sao_Paulo"
},
"updated_at": {
"date": "2020-05-20 03:33:04.000000",
"timezone_type": 3,
"timezone": "America/Sao_Paulo"
},
"stock": {
"data": {
"id": 11,
"warehouse_id": 92,
"priority": false,
"auto_refill": true,
"name": "Estoque",
"delivery_days": 5,
"created_at": {
"date": "2018-05-28 12:45:46.000000",
"timezone_type": 3,
"timezone": "America/Sao_Paulo"
},
"updated_at": {
"date": "2020-05-04 18:46:39.000000",
"timezone_type": 3,
"timezone": "America/Sao_Paulo"
},
"warehouse": {
"data": {
"id": 29,
"country_code": "BR",
"name": "Armazém",
"zipcode": "14940000",
"street": "Av. D. Pedro IV",
"number": "982",
"complement": null,
"neighborhood": "Centro",
"city": "Ibitinga",
"state": "SP",
"created_at": {
"date": "2018-05-28 12:22:48.000000",
"timezone_type": 3,
"timezone": "America/Sao_Paulo"
},
"updated_at": {
"date": "2018-05-28 12:22:48.000000",
"timezone_type": 3,
"timezone": "America/Sao_Paulo"
}
}
}
}
}
}
É possível utilizar filtros nesse endpoint por parâmetro, são eles: sku_id, stock_id, order_id e busca por nome de produto ou sku, pelo parâmetro q. Exemplos: GET https://api.dooki.com.br/v2/{alias}/logistics/stock-reservation?order_id=32
GET https://api.dooki.com.br/v2/{alias}/logistics/stock-reservation?q=Jogo

Embalagens

Listar embalagens

GET https://api.dooki.com.br/v2/{alias}/logistics/boxes
Request
{
"name": "Embalagem Test",
"outer_width": 12,
"outer_length": 12,
"outer_depth": 12,
"empty_weight": 12,
"inner_width": 12,
"inner_length": 12,
"inner_depth": 12,
"max_weight": 12
}
Response
{
"data": [
{
"id": 1,
"name": "Embalagem Test",
"outer_width": 12,
"outer_length": 12,
"outer_depth": 12,
"inner_width": 12,
"inner_length": 12,
"inner_depth": 12,
"empty_weight": 12,
"max_weigth": 0,
},
]
}

Criar embalagem

POST https://api.dooki.com.br/v2/{alias}/logistics/boxes
Parâmetro
Tipo
Obrigatório
Descrição
name
string
Sim
Nome da embalagem.
outer_width
float
Sim
Largura externa da embalagem (em cm).
outer_length
float
Sim
Comprimento externo da embalagem (em cm).
outer_depth
float
Sim
Altura externa da embalagem (em cm).
inner_width
float
Sim
Largura interna da embalagem (em cm).
inner_length
float
Sim
Comprimento interno da embalagem (em cm).
inner_depth
float
Sim
Altura interna da embalagem (em cm).
max_weight
float
Sim
Peso máximo da embalagem (em kg).
empty_weight
float
Sim
Peso da embalagem vazia (em kg).

Visualizar embalagem

GET https://api.dooki.com.br/v2/{alias}/logistics/boxes/{id}

Atualizar embalagem

PUT https://api.dooki.com.br/v2/{alias}/logistics/boxes/{id}

Excluir embalagem

DELETE https://api.dooki.com.br/v2/{alias}/logistics/boxes/{id}

Transportadoras

Listar transportadoras

GET https://api.dooki.com.br/v2/{alias}/logistics/carriers
Request
{
"active": true,
"name": "PAC",
"only_backup_use": false,
"origin_zipcode": "14940000",
"increment_percent": 0,
"max_weight": 100,
"active_cubic_weight": false,
"cubic_weight_factor": 0,
"min_cubic_weight": 10,
"weight_param": "real",
"weight_condition": ">"
}
Response
{
"data": {
"id": 1,
"active": true,
"name": "PAC",
"only_backup_use": false,
"origin_zipcode": "14940000",
"increment_percent": 0,
"max_weight": 100,
"active_cubic_weight": false,
"cubic_weight_factor": 0,
"min_cubic_weight": 10,
"weight_param": "real",
"weight_condition": ">"
},
}

Criar transportadora

POST https://api.dooki.com.br/v2/{alias}/logistics/carriers
Parâmetro
Tipo
Obrigatório
Descrição
active
boolean
Sim
Marca se a transportadora está ativa ou não.
name
string
Sim
Nome da transportadora.
only_backup_use
boolean
Sim
Marca se a transportadora será utilizada somente para backup em caso de falha de algum webservice.
origin_zipcode
string
Sim
CEP de origem.
increment_percent
float
Sim
Porcentagem adicional no preço de entrega. Valor padrão: 0
max_weight
float
Sim
Peso máximo que a transportadora suporta (em kg).
active_cubic_weight
boolean
Sim
Marca se será considerado o peso cúbico.
cubic_weight_factor
float
Sim
Fator de cubagem.
min_cubic_weight
float
Sim
Peso real mínimo para que o peso cúbico seja considerado.
weight_param
string
Sim
Marca qual o peso será considerado como parâmetro. Valores aceitos: real ou cubic
weight_condition
string
Sim
Condicional que compara os dois tipos de pesos. Valores aceitos: > ou <

Visualizar transportadora

GET https://api.dooki.com.br/v2/{alias}/logistics/carriers/{id}

Atualizar transportadora

PUT https://api.dooki.com.br/v2/{alias}/logistics/carriers/{id}

Excluir transportadora

DELETE https://api.dooki.com.br/v2/{alias}/logistics/carriers/{id}

Preços de frete (planilhas)

Request
{
"id": 117936,
"carrier_id": 42,
"description": "ACRE - CAPITAL",
"zipcode_min": 69900000,
"zipcode_max": 69920999,
"max_weight": 1,
"min_weight": 0,
"price": 66.51,
"extra_weight_price": 0,
"delivery_days": 8,
"increment_percent": 10
}
Response
{
"data": [
{
"id": 117936,
"carrier_id": 42,
"description": "ACRE - CAPITAL",
"zipcode_min": 69900000,
"zipcode_max": 69920999,
"max_weight": 1,
"min_weight": 0,
"price": 66.51,
"extra_weight_price": 0,
"delivery_days": 8,
"increment_percent": 10
},
{
"id": 117937,
"carrier_id": 42,
"description": "ACRE - CAPITAL",
"zipcode_min": 69900000,
"zipcode_max": 69920999,
"max_weight": 2,
"min_weight": 1.00,
"price": 86.62,
"extra_weight_price": 0,
"delivery_days": 8,
"increment_percent": 10
},
{
"id": 117938,
"carrier_id": 42,
"description": "ACRE - CAPITAL",
"zipcode_min": 69900000,
"zipcode_max": 69920999,
"max_weight": 3,
"min_weight": 2.00,
"price": 107.54,
"extra_weight_price": 0,
"delivery_days": 8,
"increment_percent": 10
},
]
}

Filtros personalizados

Esse tipo de filtro não utiliza a sintaxe global. Neste caso, o parâmetro é passado individualmente via query string na URL.
Parâmetro
Tipo
Descrição
zipcode
string
Faz o filtro de registros de acordo com o CEP informado.

Listar preços de uma transportadora

GET https://api.dooki.com.br/v2/{alias}/logistics/carriers/{carrierId}/prices

Criar preço para uma transportadora

POST https://api.dooki.com.br/v2/{alias}/logistics/carriers/{carrierId}/prices
Parâmetro
Tipo
Obrigatório
Descrição
carrier_id
int
Sim
ID da transportadora.
description
string
Sim
Descrição da faixa de CEP.
zipcode_min
string
Sim
CEP inicial.
zipcode_max
string
Sim
CEP final.
price
float
Sim
Preço do frete.
delivery_days
int
Sim
Dias para entrega.
extra_weight_price
float
Sim
Valor extra por kilo adicional.
increment_percent
float
Não
Porcentagem adicional no valor do frete.

Visualizar preço

GET https://api.dooki.com.br/v2/{alias}/logistics/carriers/{carrierId}/prices/{id}

Atualizar preço

PUT https://api.dooki.com.br/v2/{alias}/logistics/carriers/{carrierId}/prices/{id}

Excluir preço

DELETE https://api.dooki.com.br/v2/{alias}/logistics/carriers/{carrierId}/prices/{id}

Exportar preços

GET https://api.dooki.com.br/v2/{alias}/logistics/carriers/{carrierId}/prices/export
Dica: os filtros de busca também estão disponíveis no endpoint de exportação.
O sistema enviará para o usuário um e-mail com o link para download da planilha com os registros.

Consulta de CEP

Response de consulta de CEP
{
"data": {
"zipcode": "01505010",
"street": "Rua Anita Ferraz",
"neighborhood": "Sé",
"city": "São Paulo",
"uf": "SP",
"source": "database",
"city_id": 173
}
}

Consultar CEP

GET https://api.dooki.com.br/v2/{alias}/logistics/zipcode/{zipcode}

Calcular frete

Request
{
"zipcode": "14940000",
"total": 430.00,
"origin": "product_page",
"utm_email": "[email protected]",
"skus_ids": [1233, 2123, 3423, 41233, 54423],
"quantities": [1, 1, 1, 2, 2]
}
Response de cálculo de frete
{
"data": {
"INTELIPOST_CORREIOS_PAC_1": {
"id": "INTELIPOST_CORREIOS_PAC_1",
"service_id": 1,
"service_name": "Correios PAC",
"service_display_name": "Correios PAC",
"service_type_id": 1,
"service_type_name": "Correios",
"price": 0,
"delivery_time": 18,
"quote_id": 3517956284,
"gateway": "intelipost",
"zipcode": "14940000",
"street": null,
"neighborhood": null,
"city": "Ibitinga",
"uf": "SP",
"source": "database",
"city_id": 3,
"formated_delivery_time": "até 18 dias úteis",
"formated_price": "Grátis",
"free_shipment": true,
"real_price": 0
},
"INTELIPOST_CORREIOS_SEDEX_2": {
"id": "INTELIPOST_CORREIOS_SEDEX_2",
"service_id": 2,
"service_name": "Correios Sedex",
"service_display_name": "Correios Sedex",
"service_type_id": 2,
"service_type_name": "Correios",
"price": 24.32,
"delivery_time": 13,
"quote_id": 3517956284,
"gateway": "intelipost",
"zipcode": "14940000",
"street": null,
"neighborhood": null,
"city": "Ibitinga",
"uf": "SP",
"source": "database",
"city_id": 3,
"formated_delivery_time": "até 13 dias úteis",
"formated_price": "R$ 24,32",
"free_shipment": false,
"real_price": 24.32
},
}
}

Calcular frete

POST https://api.dooki.com.br/v2/{alias}/logistics/shipping-costs
Parâmetro
Tipo
Obrigatório
Descrição
zipcode
string
Sim
CEP de entrega.
total
float
Sim
Valor total da compra.
origin
string
Não
Origem da consulta. Exemplo: product_page, cart
utm_email
string
Não
E-mail do cliente que está consultando o frete.
skus_ids
array
Sim
IDs dos SKUS.
quantities
array
Sim
Quantidades dos SKUS (precisa seguir a ordem que os skus_ids foram declarados)

API de frete

Com este recurso é possível conectar APIS externas de cálculo de frete de serviços que não são integrados nativamente na Yampi.
Para habilitar este recurso, o lojista precisa criar uma API de frete pelo painel da Yampi, acessando o menu Configurações > Logística > API de Frete
Você deverá cadastrar:
  • Nome da API
  • URL da API
  • Headers (optional)
Já com sua API cadastrada, quando um comprador solicitar um cálculo de frete, a Yampi enviará um request via POST para a URL informada. O formato do payload será:
{
"zipcode": "14940472",
"amount": 120.00,
"skus": [
{
"id": 1231233,
"product_id": 12313,
"sku": "716237816313213",
"price": 12.00,
"quantity": 2,
"length": 1,
"width": 1,
"height": 1,
"weight": 1,
"platform": {
"name": "shopify",
"external_id": 1231231231313
}
}
]
}
Campo
Descrição
zipcode
CEP de entrega
amount
Valor do carrinho de compras
skus.id
ID do SKU na Yampi
skus.product_id
ID do Produto na Yampi
skus.sku
Código SKU
skus.quantity
Quantidade do item no carrinho
skus.length
Comprimento do SKU (unitário)
skus.width
Largura do SKU (unitário)
skus.height
Altura do SKU (unitário)
skus.weight
Peso do SKU (unitário e em KG)
skus.platform.name
Nome da plataforma externa que o SKU pertence
skus.platform.id
ID do SKU na plataforma externa
Após receber o request da Yampi, sua aplicação deverá, obrigatoriamente, retornar a cotação de frete no seguinte formato:
{
"quotes": [
{
"name": "OPÇÃO FRETE 1",
"service": "SEDEX",
"price": 37.5,
"days": 36,
"quote_id" : 1 // opcional
},
{
"name": "OPÇÃO FRETE 2",
"service": "PAC",
"price": 37.5,
"days": 36,
"quote_id" : 1 // opcional
}
]
}
Importante:
  • sua aplicação deve responder a request em até 5 segundos, no máximo. Caso contrário, a Yampi irá abortar a request;
  • A API de frete será automaticamente desativada se detectarmos 20 falhas de requisições.

Segurança nas requisições

A validação da requisição serve para verificar se realmente ela foi enviado pela Yampi, e é de extrema importância a sua utilização para que suas transações estejam seguras.
Para cada API de frete é gerada uma chave secreta, onde utilizamos dela para gerar uma assinatura em cima do body da solicitação.
  • Valor do header X-Yampi-Hmac-SHA256. Vamos chamar esse valor de "assinatura da requisição";
  • Corpo da requisição. Com esses dois valores, basta realizar o base64 do algoritmo HMAC-SHA256 do corpo da requisição utilizando a chave secreta da API de frete e comparar com a assinatura da requisição. Se os valores forem iguais, excelente. Caso contrário, não fomos nós que enviamos essa requisição!