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).
401 (ou 403 se a conta estiver suspensa).Sandbox vs. Produção
Você recebe duas chaves, uma pra cada ambiente:
| Prefixo | Ambiente | Comportamento |
|---|---|---|
alldev_test_... | Sandbox | Nada 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ção | Debita sua carteira de verdade, notifica motoristas reais, gera etiquetas reais na transportadora. |
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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
pickup.address | string | sim | Endereço de coleta (rua, número, cidade — quanto mais completo, mais precisa a rota) |
dropoff.address | string | sim | Endereço de entrega |
dropoff.complement | string | não | Complemento do destino (apto, bloco...) |
package.description | string | não | O que está sendo enviado |
package.declared_value | number | não | Valor declarado da mercadoria |
recipient.name / .phone | string | não | Quem vai receber, no destino |
city | string | não | Nome 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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
quote_id | string | sim | Id retornado por /deliveries/quote |
vehicle_type | string | sim | Uma 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
| HTTP | code | Quando acontece |
|---|---|---|
| 401 | unauthorized | Header Authorization ausente, ou chave inválida |
| 403 | partner_suspended | Conta de parceiro suspensa |
| 429 | rate_limited | Mais de 60 requisições no último minuto |
| 422 | invalid_request | Campo obrigatório faltando |
| 422 | route_not_found | Endereço de coleta/entrega não localizável |
| 404 | quote_not_found | quote_id inexistente, já usado ou expirado (15 min) |
| 422 | invalid_vehicle_type | vehicle_type não existe na cotação |
| 402 | insufficient_balance | Saldo da carteira do parceiro insuficiente |
| 404 | delivery_not_found / shipment_not_found | Id não existe ou não pertence a você |
| 409 | not_cancellable | Entrega já aceita/finalizada |
| 422 | sender_profile_missing | Endereço de remetente não cadastrado |
| 422 | invalid_service | carrier_code/service_code inválido pro destino |
| 502 | carrier_error | A transportadora recusou o pedido |