Comece aqui

Nesta página

Este guia implementa, em ordem, todo o contrato público. Ao final, sua aplicação autentica, cadastra os endereços, faz a cotação, cria o envio, emite e baixa a etiqueta, trabalha com DACE quando o envio for elegível e consulta o rastreamento.

Guias de apoio: autenticação, remetente e destinatário, cotações, criação do envio, emissão e download, DACE e rastreamento.

1. Crie e ative sua conta

  1. Crie uma conta grátis.
  2. Informe os dados de pessoa física ou jurídica.
  3. Confirme o e-mail para ativar a conta.
  4. Use na API o mesmo e-mail e a mesma senha usados no painel.

A API documentada usa o endereço de produção informado na próxima etapa.

2. Configure os segredos

API_URL=https://api.enviofacilencomendas.com.br
ACCOUNT_EMAIL=voce@empresa.com.br
ACCOUNT_PASSWORD=segredo

Mantenha esses valores somente no backend ou em um gerenciador de segredos.

3. Faça login

curl -X POST "$API_URL/api/v1/auth/login" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "integracao@empresa.com.br",
    "senha": "SENHA_ARMAZENADA_COM_SEGURANCA"
  }'

Persista accessToken, refreshToken e um lojas[].id. O campo do login é senha.

4. Envie os headers da loja

Nas operações seguintes:

Authorization: Bearer <accessToken>
X-Tenant-Id: <lojas[].id>

Nunca use o nome da loja no lugar do identificador.

5. Cadastre ou reutilize o remetente

Primeiro consulte os remetentes já salvos:

curl "$API_URL/api/v1/addresses?q=Matriz&page=1&pageSize=20" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "X-Tenant-Id: $LOJA_ID"

Se o remetente ainda não existir, cadastre-o com o endereço completo:

curl -X POST "$API_URL/api/v1/addresses" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "X-Tenant-Id: $LOJA_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Matriz São Paulo",
    "personName": "João Silva",
    "company": "Loja Exemplo Ltda.",
    "phone": "11999999999",
    "email": "expedicao@empresa.com.br",
    "street": "Avenida Paulista",
    "number": "1000",
    "complement": "Conjunto 101",
    "district": "Bela Vista",
    "city": "São Paulo",
    "state": "SP",
    "zip": "01310100",
    "cpfCnpj": "11222333000181",
    "country": "BR",
    "setAsDefault": true
  }'

6. Cadastre ou reutilize o destinatário

Consulte os destinatários salvos com GET /api/v1/recipients?q=Maria&page=1&pageSize=20. Cadastre quando não encontrar o registro correto:

curl -X POST "$API_URL/api/v1/recipients" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "X-Tenant-Id: $LOJA_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Maria Oliveira",
    "cpfCnpj": "52998224725",
    "phone": "21999999999",
    "email": "maria@example.com",
    "address": {
      "name": "Casa",
      "personName": "Maria Oliveira",
      "phone": "21999999999",
      "email": "maria@example.com",
      "street": "Rua do Mercado",
      "number": "45",
      "complement": "Apto 302",
      "district": "Centro",
      "city": "Rio de Janeiro",
      "state": "RJ",
      "zip": "20040020",
      "country": "BR"
    }
  }'

Veja a descrição de cada campo e os formatos das respostas em Remetente e destinatário.

7. Faça uma cotação

curl -X POST "$API_URL/api/v1/quotes/simulate" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "X-Tenant-Id: $LOJA_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "originCep": "01310100",
    "destinationCep": "20040020",
    "peso": 1.5,
    "comprimento": 30,
    "largura": 20,
    "altura": 10,
    "valorDeclarado": 89.9,
    "hasPackaging": true,
    "format": "2"
  }'

Persista quoteId, carrierId, serviceLevelId e expiresAt da opção selecionada.

8. Crie o envio pela API

Envie os identificadores da cotação, os endereços completos e o mesmo pacote usado na simulação:

curl -X POST "$API_URL/api/v1/shipments" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "X-Tenant-Id: $LOJA_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "externalRef": "PEDIDO-1001",
    "quoteId": "64b232e7-8f9c-4d65-bb1d-95bf5c21ea46",
    "carrierId": "aaf3b0d6-bf2a-4af0-bb97-bd056a749ad1",
    "serviceLevelId": "22222222-2222-4222-8222-222222222222",
    "originAddress": {
      "name": "Matriz São Paulo",
      "personName": "João Silva",
      "phone": "11999999999",
      "street": "Avenida Paulista",
      "number": "1000",
      "district": "Bela Vista",
      "city": "São Paulo",
      "state": "SP",
      "zip": "01310100",
      "cpfCnpj": "11222333000181",
      "country": "BR"
    },
    "destAddress": {
      "name": "Maria Oliveira",
      "personName": "Maria Oliveira",
      "phone": "21999999999",
      "street": "Rua do Mercado",
      "number": "45",
      "district": "Centro",
      "city": "Rio de Janeiro",
      "state": "RJ",
      "zip": "20040020",
      "cpfCnpj": "52998224725",
      "country": "BR"
    },
    "parcel": {
      "format": "2",
      "weightKg": 1.5,
      "lengthCm": 30,
      "widthCm": 20,
      "heightCm": 10,
      "declaredValueCents": 8990,
      "hasPackaging": true,
      "contentDescription": "Vestuário",
      "products": [
        {
          "content": "Camiseta de algodão",
          "quantity": 1,
          "valueCents": 8990,
          "ncm": "61091000"
        }
      ]
    },
    "invoice": {
      "type": "DCE",
      "valor": 89.9
    }
  }'

A resposta 201 contém shipmentId. Persista esse identificador e use-o na emissão. Veja todos os campos, formatos de pacote e exemplo com NF-e em Criar envio.

9. Emita a etiqueta

curl -X POST "$API_URL/api/v1/labels/shipments/6a4eaf6d-d962-4b0c-a421-f2d426128e92/emit" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "X-Tenant-Id: $LOJA_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "paymentMethod": "wallet"
  }'

wallet paga a emissão com o saldo disponível da loja.

Em 200, persista labelId, trackingCode e transactionId. Em 202, persista providerJobId e não repita a emissão.

10. Baixe a etiqueta

curl "$API_URL/api/v1/labels/ID_DA_ETIQUETA/download" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "X-Tenant-Id: $LOJA_ID"

A resposta contém downloadUrl. A URL é temporária: baixe o arquivo imediatamente e não a use como identificador permanente.

11. Gere o DACE quando aplicável

curl -X POST "$API_URL/api/v1/fiscal-documents/shipments/ID_DO_ENVIO/dace" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "X-Tenant-Id: $LOJA_ID" \
  -H "Content-Type: application/json" \
  -d '{ "tipoDace": "R" }'

O envio precisa ter etiqueta emitida e uma DC-e apta. Se available for false, não force novas tentativas.

12. Consulte o rastreamento

curl "$API_URL/api/v1/tracking/code/CODIGO_DE_RASTREIO?refresh=false" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "X-Tenant-Id: $LOJA_ID"

Use refresh=true somente quando precisar consultar o provedor naquele momento.

13. Renove a sessão

curl -X POST "$API_URL/api/v1/auth/refresh" \
  -H "Content-Type: application/json" \
  -d '{ "token": "REFRESH_TOKEN_MAIS_RECENTE" }'

Substitua os dois tokens de forma atômica e descarte o refresh token anterior.

Pronto para produção quando

  • os segredos não aparecem em código ou logs;
  • a loja é isolada por X-Tenant-Id;
  • remetentes e destinatários não são cadastrados em duplicidade;
  • a emissão 200 e 202 é reconciliada sem cobrança duplicada;
  • etiqueta e DACE são baixados antes da expiração;
  • o polling de rastreamento usa backoff;
  • erros 401, 403, 404, 409, 422, 429 e 5xx foram testados.

Confira os pré-requisitos e testes →

Buscar na documentação

Encontre guias, serviços e respostas na Central de Ajuda.