API All Delivery

Solicite um entregador da frota própria ou despache uma mercadoria por transportadora, direto do seu sistema — e-commerce, marketplace ou app de pedidos.

Introdução

Toda chamada é HTTPS, JSON no corpo (Content-Type: application/json) e JSON na resposta. A URL base é:

https://alldelivery.com.br/api/v1

Existem dois grupos de endpoints:

  • Entregas — pede um motoboy/entregador da frota própria pra sair agora buscando um pacote.
  • Transportadora — gera uma etiqueta e despacha pelos Correios (hoje a única transportadora disponível).

Autenticação

Toda requisição precisa do header Authorization com sua chave de API:

Authorization: Bearer alldev_live_xxxxxxxxxxxxxxxxxxxxxxxx

Sua chave é gerada pela All Delivery no momento em que sua conta de parceiro é criada — ela aparece uma única vez na tela, então guarde num cofre de segredos assim que receber. Se perder, peça uma nova (a antiga é revogada).

Sem o header, ou com uma chave inválida/revogada, toda chamada devolve 401 (ou 403 se a conta estiver suspensa).

Sandbox vs. Produção

Você recebe duas chaves, uma pra cada ambiente:

PrefixoAmbienteComportamento
alldev_test_...SandboxNada real acontece. Nenhum motorista é notificado, nenhuma etiqueta real é gerada, e sua carteira nunca é debitada. O status de uma entrega avança sozinho (buscando → aceito → coletado → entregue) numa linha do tempo simulada, com um motorista fictício.
alldev_live_...ProduçãoDebita sua carteira de verdade, notifica motoristas reais, gera etiquetas reais na transportadora.
Use o sandbox pra construir e testar toda a sua integração — inclusive o tratamento de erro (saldo insuficiente, rota não encontrada, etc.) — antes de trocar pra chave de produção.

Idempotência

Em todo POST que cria alguma coisa (POST /deliveries, POST /shipments), mande um header Idempotency-Key com um valor único seu por tentativa (um UUID, por exemplo):

Idempotency-Key: 7c3aa9c1-2b3e-4e1a-9f00-1a2b3c4d5e6f

Se a chamada precisar ser repetida (timeout, retry automático do seu lado), mandando a mesma chave você recebe de volta a resposta da primeira tentativa — sem criar uma segunda entrega/etiqueta duplicada.

Formato de erro e rate limit

Todo erro segue o mesmo formato, com um HTTP status apropriado:

{
  "error": {
    "code": "insufficient_balance",
    "message": "Saldo insuficiente na carteira do parceiro pra essa entrega."
  }
}

O limite é de 60 requisições por minuto por chave. Passar disso devolve 429 com um header Retry-After: 60.

POST/deliveries/quote

Calcula o preço e o tempo estimado de uma entrega, por tipo de veículo. Não cria nada ainda — o quote_id retornado vale por 15 minutos e é usado no próximo passo (POST /deliveries).

Corpo da requisição

CampoTipoObrigatórioDescrição
pickup.addressstringsimEndereço de coleta (rua, número, cidade — quanto mais completo, mais precisa a rota)
dropoff.addressstringsimEndereço de entrega
dropoff.complementstringnãoComplemento do destino (apto, bloco...)
package.descriptionstringnãoO que está sendo enviado
package.declared_valuenumbernãoValor declarado da mercadoria
recipient.name / .phonestringnãoQuem vai receber, no destino
citystringnãoNome da cidade, pra aplicar a tarifa local certa

Exemplo — curl

curl -X POST https://alldelivery.com.br/api/v1/deliveries/quote \
  -H "Authorization: Bearer alldev_test_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "pickup": { "address": "Av. Paulista, 1000, São Paulo, SP" },
    "dropoff": { "address": "Rua Augusta, 500, São Paulo, SP" },
    "package": { "description": "Caixa pequena", "declared_value": 150.00 },
    "recipient": { "name": "João Cliente", "phone": "5511999999999" }
  }'

Resposta — 200

{
  "quote_id": "bb5520115abdb36e2f322210eafd9cb3",
  "expires_in_seconds": 900,
  "distance": { "text": "2.3 km", "meters": 2283 },
  "duration": { "text": "9 mins", "seconds": 531 },
  "vehicles": {
    "electric_bicycle": { "label": "Bicicleta elétrica", "price": 6.00 },
    "motorcycle": { "label": "Moto", "price": 7.00 },
    "car": { "label": "Carro", "price": 10.00 }
  }
}

Erros possíveis: 422 invalid_request (faltou endereço) · 422 route_not_found (endereço não localizável).

POST/deliveries

Confirma uma cotação e despacha a entrega de verdade (ou de mentira, em sandbox). Aceita Idempotency-Key.

Corpo da requisição

CampoTipoObrigatórioDescrição
quote_idstringsimId retornado por /deliveries/quote
vehicle_typestringsimUma das chaves de vehicles da cotação (ex: motorcycle)

Exemplo — curl

curl -X POST https://alldelivery.com.br/api/v1/deliveries \
  -H "Authorization: Bearer alldev_test_xxx" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 7c3aa9c1-2b3e-4e1a-9f00-1a2b3c4d5e6f" \
  -d '{ "quote_id": "bb5520115abdb36e2f322210eafd9cb3", "vehicle_type": "motorcycle" }'

Resposta — 201

{
  "id": "153795931",
  "status": "searching",
  "is_sandbox": true,
  "vehicle_type": "motorcycle",
  "price": 7.00,
  "pickup_address": "Av. Paulista, 1000 - Bela Vista, São Paulo - SP",
  "dropoff_address": "R. Augusta, 500 - Cerqueira César, São Paulo - SP",
  "driver": null,
  "tracking_url": "https://alldelivery.com.br/customer?order=924600",
  "created_at": "2026-09-06 16:49:33"
}

status é sempre um destes: draft, searching, accepted, in_transit, delivered, cancelled. Quando um motorista é atribuído, driver vem preenchido com name, phone e vehicle_type.

Erros possíveis: 404 quote_not_found (cotação expirada/já usada) · 422 invalid_vehicle_type · 402 insufficient_balance.

GET/deliveries/{id}

Consulta o status atual — use isso pra fazer polling (a cada 5-10s é suficiente) até a entrega sair de searching. Devolve o mesmo formato do POST /deliveries.

curl https://alldelivery.com.br/api/v1/deliveries/153795931 \
  -H "Authorization: Bearer alldev_test_xxx"

Erro possível: 404 delivery_not_found.

POST/deliveries/{id}/cancel

Cancela — só funciona enquanto a entrega ainda está searching (nenhum motorista aceitou ainda). Devolve o objeto atualizado com status: "cancelled".

curl -X POST https://alldelivery.com.br/api/v1/deliveries/153795931/cancel \
  -H "Authorization: Bearer alldev_test_xxx"

Erro possível: 409 not_cancellable (já foi aceita ou finalizada).

PUT/sender-profile

Cadastra o endereço de remetente da sua loja — obrigatório antes de cotar ou despachar por transportadora (é o endereço que sai na etiqueta como remetente, e de onde a cotação de frete parte).

curl -X PUT https://alldelivery.com.br/api/v1/sender-profile \
  -H "Authorization: Bearer alldev_test_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Minha Loja Ltda",
    "document": "12345678000199",
    "phone": "5511999999999",
    "cep": "01310-930",
    "address": "Av. Paulista",
    "number": "1000",
    "district": "Bela Vista",
    "city": "São Paulo",
    "state": "SP"
  }'
{ "status": "ok" }

POST/shipments/quote

Cotação real, por transportadora e serviço, a partir do seu endereço de remetente já cadastrado.

curl -X POST https://alldelivery.com.br/api/v1/shipments/quote \
  -H "Authorization: Bearer alldev_test_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "destination_cep": "20040-020",
    "package": { "format": "pacote", "weight_grams": 500, "length_cm": 20, "width_cm": 15, "height_cm": 10 }
  }'
{
  "quotes": {
    "correios": {
      "03220": { "carrier_code": "correios", "service_code": "03220", "label": "Correios - SEDEX", "cost": 28.85, "markup_percent": 25, "delivery_days": 1, "total": 36.06 },
      "03298": { "carrier_code": "correios", "service_code": "03298", "label": "Correios - PAC", "cost": 18.40, "markup_percent": 25, "delivery_days": 5, "total": 23.00 }
    }
  }
}

Erro possível: 422 sender_profile_missing.

POST/shipments

Gera a etiqueta e despacha. Aceita Idempotency-Key.

curl -X POST https://alldelivery.com.br/api/v1/shipments \
  -H "Authorization: Bearer alldev_test_xxx" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 3f1e2d3c-4b5a-6978-8a9b-0c1d2e3f4a5b" \
  -d '{
    "carrier_code": "correios",
    "service_code": "03298",
    "package": { "format": "pacote", "weight_grams": 500, "length_cm": 20, "width_cm": 15, "height_cm": 10, "description": "Produto X", "declared_value": 100.00 },
    "recipient": {
      "name": "Cliente Final", "cep": "20040-020", "address": "Rua Tal", "number": "1",
      "district": "Centro", "city": "Rio de Janeiro", "state": "RJ", "phone": "5521999999999"
    }
  }'
{
  "id": "828032279",
  "is_sandbox": true,
  "status": "generated",
  "carrier_code": "correios",
  "service_code": "03298",
  "price": 23.00,
  "tracking_code": "SANDBOX13A26C6BB80A",
  "label_url": null,
  "last_tracking_status": null,
  "created_at": "2026-09-06 16:55:04"
}

label_url aponta pro PDF da etiqueta assim que o status vira generated com um tracking_code real (em sandbox fica null, já que a etiqueta é simulada).

Erros possíveis: 422 sender_profile_missing · 422 invalid_service · 402 insufficient_balance · 502 carrier_error (a transportadora recusou).

GET/shipments/{id}

Consulta status/rastreio — em produção, reconsulta a transportadora de verdade antes de responder.

curl https://alldelivery.com.br/api/v1/shipments/828032279 \
  -H "Authorization: Bearer alldev_test_xxx"

POST/shipments/{id}/cancel

Cancela a etiqueta/envio.

curl -X POST https://alldelivery.com.br/api/v1/shipments/828032279/cancel \
  -H "Authorization: Bearer alldev_test_xxx"

GET/vehicle-categories

Lista os tipos de veículo disponíveis pra usar em vehicle_type.

curl https://alldelivery.com.br/api/v1/vehicle-categories \
  -H "Authorization: Bearer alldev_test_xxx"
{
  "vehicle_categories": [
    { "slug": "electric_bicycle", "label": "Bicicleta elétrica", "icon": "ebike" },
    { "slug": "motorcycle", "label": "Moto", "icon": "motorcycle" },
    { "slug": "car", "label": "Carro", "icon": "car" }
  ]
}

Tabela de erros

HTTPcodeQuando acontece
401unauthorizedHeader Authorization ausente, ou chave inválida
403partner_suspendedConta de parceiro suspensa
429rate_limitedMais de 60 requisições no último minuto
422invalid_requestCampo obrigatório faltando
422route_not_foundEndereço de coleta/entrega não localizável
404quote_not_foundquote_id inexistente, já usado ou expirado (15 min)
422invalid_vehicle_typevehicle_type não existe na cotação
402insufficient_balanceSaldo da carteira do parceiro insuficiente
404delivery_not_found / shipment_not_foundId não existe ou não pertence a você
409not_cancellableEntrega já aceita/finalizada
422sender_profile_missingEndereço de remetente não cadastrado
422invalid_servicecarrier_code/service_code inválido pro destino
502carrier_errorA transportadora recusou o pedido

← Voltar pro playground interativo