# Introdução

Conheça a LogAPI, a única API as a Service logística do Brasil.

<figure><img src="https://199438269-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlNdVVjNNd0RKdkU6LEPR%2Fuploads%2FO06YzP0wDE2DwQinbODJ%2Fimage.png?alt=media&amp;token=b3fc599a-d01f-43da-86fc-dcec0cb22b32" alt=""><figcaption></figcaption></figure>

## LogAPI, API as a Service <a href="#grupo-find-my-pack" id="grupo-find-my-pack"></a>

A LogAPI é uma plataforma de API, que está conectada às principais transportadoras.  Utilizada internamente na Find My Pack há mais de 5 anos, chegou a hora de liberar nossa tecnologia para quem precisar.&#x20;

Nossa missão é **facilitar o rastreamento de entregas**, independentemente de qual transportadora você fez o envio.&#x20;

Por intermédio de nossa solução, com uma simples implementação de código, seu aplicativo será capaz de obter o andamento das entregas sempre com informações precisas e padronizadas.&#x20;

Você pode utilizá-la para atualizar o andamento de entrega em sua plataforma de e-commerce, construir o seu bot de rastreamento e qualquer outra automatização em que você precise obter o rastreamento de alguma entrega.&#x20;

Aproveite os 7 dias úteis para testar nossa solução!

## Grupo Find My Pack <a href="#grupo-find-my-pack" id="grupo-find-my-pack"></a>

Fazemos parte do grupo **Find My Pack**, que há mais de 12 anos desenvolve ferramentas de automação logística para e-commerce. Somos um dos principais players do mercado, reconhecidos pela inovação e eficiência em nossas soluções.

Nossa tecnologia já automatizou mais de 18 milhões de entregas, movimentou mais de R$2,6 bilhões em transações e impactou mais de 16 milhões de consumidores.

Estamos dedicados a ajudar seu negócio a crescer, proporcionando ferramentas logísticas que otimizam operações e melhoram a satisfação do cliente.

Nosso suporte especializado está sempre disponível para garantir que você aproveite ao máximo todas as funcionalidades da nossa plataforma.

Conheça nossas soluções:

[**Link de rastreio**](https://www.linkderastreio.com.br/), que cria um site de rastreamento para sua empresa.

[**Troque e Devolva**](https://www.troqueedevolva.com.br/), que gerencia toda a logística reversa de seu e-commerce:

[**Find My Pack**](https://www.findmypack.com.br/), que rastreia, classifica e automatiza todas as tarefas logísticas de todas as transportadoras.


# Privacidade e LGPD

Descrição de como a LogAPI trata os dados das consultas.

## Não armazenamos as consultas

Todos os dados consultados nas requisições são exclusivamente devolvidos na requisição e não são armazenados. Não possuímos histórico de nenhum dado de rastreamento.&#x20;

Os dados utilizados são de total responsabilidade do contratante da LogAPI.

## Os dados de rastreamento são de responsabilidade das transportadoras

Não produzimos nenhum dado. Tudo o que consultamos e devolvemos na requisição, é totalmente de responsabilidade da transportadora consultada.&#x20;

## Nenhum dado pessoal (tampouco sensível) é armazenado

A LogAPI é um serviço de API, ou seja, apenas consulta informações na transportadora de destino, reclassifica de forma que seja entendível e devolve ao solicitante.&#x20;

Nenhuma dessas informações é tratada por um ser humano. Todas as requisições são sistemicas e os dados não são armazenados em nenhum local dentro da LogAPI.&#x20;

Apenas os dados do contratante (assinante da LogAPI) é armazenado para fins da prestação de serviço, cobrança e afins.&#x20;


# Conceitos básicos

O que você precisasaber para utilizar a LogAPI.

{% hint style="info" %}
**Atenção**: é essencial que você tenha as credenciais de acesso da transportadora que deseja integrar. Utilizamos as APIs oficiais das transportadoras, e quase todas exigem autenticação para permitir o acesso.

Se não for você o titular do contrato com a transportadora ou se você não tiver os dados, não será possível realizar rastreamentos.
{% endhint %}

## O que é a LogAPI

A LogAPI é uma solução **API as a Service**, e como o próprio tipo de serviço diz, somos uma empresa que fornece uma API como serviço, um conjunto de integrações técnicas conectadas nas principais transportadoras, que realiza o intermédio da consulta de rastreamento.&#x20;

Significa que, para utilizar a LogAPI, você **obrigatoriamente** deve ter um programador para conectar seu aplicativo ao nosso sistema.&#x20;

## Somos uma solução para desenvolvedores

{% hint style="info" %}
**Se você não é programador:** Se você busca um serviço completo com painel de acompanhamento, automações de tarefas, identificação de problemas e várias outras funcionalidades logísticas, conheça nossa solução [Find My Pack](https://www.findmypack.com.br) — pode ser exatamente o que você precisa.
{% endhint %}

Não oferecemos um software ou painel para rastrear encomendas. Nosso serviço é totalmente baseado em API, ou seja, apenas seu desenvolvedor poderá utilizar nossas integrações para conectar a outro sistema.

&#x20;Atuamos como uma ponte entre seu sistema e as transportadoras: em vez de programar integrações individualmente com cada transportadora, você conecta sua empresa à LogAPI, e nós cuidamos das integrações com todas as transportadoras.


# Preço e consumo

Cobramos por quantidade de requisições na LogAPI.

A cobrança da LogAPI é feita com base na quantidade de requisições (chamadas) que você realiza. Oferecemos dois planos de consumo e também planos personalizados para grandes empresas.&#x20;

Para consultar os preços e limites atuais, visite nossa [**Página de preços**](https://www.logapi.com.br/#pricing)**.**&#x20;

## Vetores de precificação e limites

{% hint style="success" %}
**Priorize consultas em lote**: em cada requisição, é possível enviar até 10 entregas para rastrear. O consumo é contabilizado por requisição, não pelo número de entregas, então, ao enviar 10 entregas por requisição, você multiplica por 10 o seu limite sem aumentar o custo.
{% endhint %}

### Quantidade de requisições por dia

Cada plano tem um limite de requisições que você pode fazer por dia. Esse limite se reinicia todos os dias à meia-noite (00h00) e dura até 23h59.

&#x20;Assim, dentro de cada período de 24 horas, você poderá fazer até a quantidade de requisições permitida pelo seu plano.

### Quantidade de requisições por segundo

Além do limite diário, existe um limite de requisições que podem ser feitas por segundo.&#x20;

Esse limite evita que muitas requisições sejam enviadas em um curto período de tempo, prevenindo sobrecarga do sistema e garantindo a estabilidade do serviço.

## Implemente um controle de requisições

Para usar o plano de maneira eficiente, recomenda-se **implementar uma estratégia de&#x20;*****throttling*****&#x20;(limitação de requisições)**, distribuindo as requisições ao longo do dia. Esse tipo de controle impede que todas as requisições sejam feitas de uma vez, o que ajudaria a evitar o esgotamento do limite diário antes do final do dia e garantiria o uso equilibrado dos recursos.

### Exemplo de Controle de Requisições

Se você assinar um plano com **1000 requisições diárias**, o ideal é fazer apenas a quantidade necessária para rastrear as entregas, sem exceder esse limite, e também respeitar o limite máximo de **1 requisição por segundo**.

**Passos para Implementar o Throttling:**

1. **Limite de Requisições por Segundo**:

   * A LogAPI permite até 1 requisição por segundo, no plano mais básico. No desenvolvimento, implemente um controle para que o sistema não envie mais de uma requisição por segundo. Isso pode ser feito com uma função de *throttling* que espaça as requisições automaticamente.

2. **Distribuição de Requisições ao Longo do Dia**:

   * Divida as 1000 requisições ao longo das 24 horas do dia para não concentrá-las em um único período.
   * Por exemplo, se precisar utilizar o limite total, faça uma média de aproximadamente **42 requisições por hora**. Esse cálculo ajuda a evitar bloqueios e permite o monitoramento contínuo das entregas.
   * Se você tiver **100 entregas para rastrear**, poderá rastrear cada uma delas até **10 vezes no mesmo dia** (o que geralmente é um exagero). Na prática, rastrear cada entrega **4 vezes ao dia** costuma atender às necessidades da maioria dos casos, garantindo atualizações regulares e mantendo as requisições dentro dos limites diários e por segundo.

3. **Uso Inteligente do Limite Diário**:
   * Adapte a frequência de requisições ao fluxo de pedidos e entregas do seu negócio. Priorize as requisições mais essenciais dentro do limite diário para rastrear as entregas de forma eficiente.

Implementando essas práticas, você pode otimizar o uso da API e garantir que suas requisições não ultrapassem os limites impostos.

{% hint style="info" %}
Se a sua necessidade de consumo superar os limites disponíveis na nossa página de preços, entre em contato para adequarmos o plano conforme suas necessidades, ajustando a quantidade de requisições diárias e por segundo.
{% endhint %}


# Como funciona

Aprenda como funciona a LogAPI.

Você via integrar seu aplicativo à LogAPI, utilizando uma requisição padronizada. Independentemente de qual transportadora estiver consultando, o json de retorno será sempre igual, garantindo consistência de dados e quase nenhum esforço de programação do seu lado.

### Funcionamento da requisição

Você deve estar familiarizado com requisições REST, especialmente chamadas GET, para utilizar a LogAPI.

1. Seu sistema realiza uma requisição na LogAPI.
2. A LogAPI identifica a transportadora e realiza a conexão.
3. A transportadora devolve os dados atualizados.
4. A LogAPI classifica e transforma a resposta para o padrão de dados de rastreamento LogAPI.
5. A informação é devolvida para ser tratada pelo seu aplicativo.

A cada requisição, você pode enviar um lote de até 10 entregas para rastrear.


# Autenticação

LogAPI utiliza autenticação por header.

Para acessar a LogAPI, é necessário autenticar as requisições através do envio de dois valores no cabeçalho (*header*): o `token` e a `appkey`.

* **token**: único para cada conta, esse valor identifica seu acesso principal à LogAPI.
* **appkey**: uma chave gerada para cada integração, permitindo que você conecte diferentes sistemas à mesma conta.

Embora não haja limite para o número de aplicativos que você pode integrar, todos compartilharão o mesmo limite de requisições do seu plano.

## Criando uma integração&#x20;

Dentro do Painel LogAPI, você deve criar a aplicação para ter acesso ao `appkey`.

A `appkey` não expira. Caso precise alterá-lo, faça através do nosso Painel. Se não for mais utilizar este aplicativo, basta excluí-lo.&#x20;


# Transportadoras

Consulte as transportadoras integradas na LogAPI

## Consultando as transportadoras

Envie uma requisição GET para o endpoint de transportadoras:

{% code title="Endpoint transportadoras" %}

```url
https://api.logapi.com.br/carriers
```

{% endcode %}

Retornaremos um array completo com todos os dados de cada uma das tranportadoras, contendo:

* `carrierName` que você precisará para consultar o rastreamento.
* `integrationFields` para você saber quais credenciais de autentiação são necessárias.
* `trackingFields` para saber quais dados podem ser utilizados para rastrear entregas.
* `logo` com a imagem em PNG da logo da transportadora
* `statusMappings` que são os status da transportadora convertidos para o padrão LogAPI.&#x20;

Exemplo de objeto de transportadora:

```json
{
        "active": true,
        "logo_visibility": true,
        "_id": "655ebb94d08d04a86df31c0e",
        "carrierName": "total-express",
        "trackingFields": [
            {
                "fieldName": "trackingCode",
                "fieldType": "string",
                "required": false,
                "description": "Código de Rastreamento (AWB)",
                "_id": "655ebb94d08d04a86df31c0f"
            },
            {
                "_id": "672d6de260d4816f00fffa6a",
                "fieldName": "invoiceNumber",
                "fieldType": "string",
                "required": false,
                "description": "Número da Nota Fiscal"
            },
            {
                "_id": "672d6de260d4816f00fffa6b",
                "fieldName": "orderNumber",
                "fieldType": "string",
                "required": false,
                "description": "Número do Pedido"
            }
        ],
        "integrationFields": [
            {
                "fieldName": "reid",
                "fieldType": "string",
                "required": true,
                "_id": "655ebb94d08d04a86df31c10"
            },
            {
                "fieldName": "usuario",
                "fieldType": "string",
                "required": true,
                "_id": "655ebb94d08d04a86df31c11"
            },
            {
                "fieldName": "senha",
                "fieldType": "string",
                "required": true,
                "_id": "655ebb94d08d04a86df31c12"
            }
        ],
        "createdAt": "2023-11-23T02:40:20.586Z",
        "updatedAt": "2024-06-02T20:43:14.408Z",
        "logo": "https://api.logapi.com.br/public/carrier/total-express.png",
        "statusMappings": [
            {
                "carrier_status": "57",
                "logapi_status": "PendingPostage",
                "_id": "65e76a469ec7c33756bbaa64"
            },
            {
                "carrier_status": "99",
                "logapi_status": "PendingPostage",
                "_id": "65e76a469ec7c33756bbaa65"
            },
            {
                "carrier_status": "100",
                "logapi_status": "PendingPostage",
                "_id": "65e76a469ec7c33756bbaa66"
            },
            {
                "carrier_status": "82",
                "logapi_status": "PendingPostage",
                "_id": "65e76a469ec7c33756bbaa67"
            },
            {
                "carrier_status": "60",
                "logapi_status": "InTransit",
                "_id": "65e76a469ec7c33756bbaa68"
            },
            {...}
     ],
}
```


# Requisição de Rastreamento

LogAPI utiliza o padrão GET para rastrear encomendas.

Independente de qual transportadora você vá consultar, a requisição obedece sempre o mesmo padrão.&#x20;

{% hint style="danger" %}
[**Não se esqueça**: você deve enviar o `token` e `appkey` no header da sua requisição.](/intergrando-logapi/autenticacao)
{% endhint %}

## Endpoint da requisição

Você deve submeter uma requisição **GET** para a LogAPI:

{% code title="Endpoint de produção" fullWidth="false" %}

```url
https://api.logapi.com.br/tracking
```

{% endcode %}

## Payload padrão da requisição

No json da requisição, você deve enviar sempre três chaves comuns.&#x20;

[Consulte o endpoint de transportadoras para saber quais os nomes e os dados necessários para cada uma. ](/intergrando-logapi/transportadoras)

* **`carrierName`** deve informar qual transportadora você deseja consultar.&#x20;
* **`trackingIdentifiers`** deve informar qual o dado de rastreamento você possuí. Cada transportadora tem os seus, mas sempre usamos as mesmas variaveis:
  * **`trackingCode`** é o código de rastreamento da entrega.&#x20;
  * **`invoiceNumber`** é o numero da nota fiscal
  * **`invoiceSeries`** é a série da nota fiscal
  * **`invoiceKey`** é a chave de 44 dígitos da nota fiscal
* **`credentials`** dados de credenciamento da API da transportadora.

### Exemplo de payload:

```json
{
    "carrierName": "loggi",
    "trackingIdentifiers": {
        "trackingCode": "EBW2NR3T"
    },
    "credentials": {
        "client_id": "CLIENT_ID_LOGGI",
        "client_secret": "CLIENT_SECRET_LOGGI",
        "company_id": "COMPANY_ID_LOGGI"
    }
}
```

### Exemplo de requisição completa cURL:

```http
curl --location 'https://api.logapi.com.br/tracking' \
--header 'token: SEU_TOKEN' \
--header 'appkey: APP_KEY_DO_SEU_APLICATIVO' \
--header 'Content-Type: application/json' \
--data '{
    "carrierName": "loggi",
    "trackingIdentifiers": {
        "trackingCode": "EBW2NR3T"
    },
    "credentials": {
        "client_id": "CLIENT_ID_LOGGI",
        "client_secret": "CLIENT_SECRET_LOGGI",
        "company_id": "COMPANY_ID_LOGGI"
    }
}'
```

### Exemplo de requisição e retorno

<mark style="color:green;">`GET`</mark>`https://api.logapi.com.br/tracking`

\<Description of the endpoint>

**Headers**

| Name         | Value              |
| ------------ | ------------------ |
| Content-Type | `application/json` |
| token        | `<token>`          |
| appkey       | `<appkey>`         |

**Body**

| Name                  | Type   | Description                                                                                                 |
| --------------------- | ------ | ----------------------------------------------------------------------------------------------------------- |
| `carrierName`         | string | Nome da transportadora                                                                                      |
| `trackingIdentifiers` | object | Dados para rastreamento                                                                                     |
| `credentials`         | object | <p>Credenciais de autenticação da transportadora.<br><br>Opcional, caso você cadastre no painel LogAPI.</p> |

**Response**

{% tabs %}
{% tab title="200" %}

```json
{
    "shipmentDetails": {
        "carrier": "Gol Log",
        "cost": {
            "value": 0,
            "unit": "cents"
        },
        "trackingCode": "12721182618",
        "type": "E-COMMERCE",
        "deliveryEstimate": {
            "date": "2024-11-11",
            "timezone": "America/Sao_Paulo",
            "utcOffset": "-03:00"
        },
        "invoice": {
            "number": "000017751",
            "series": "",
            "key": "",
            "total": 0,
            "totalUnit": "cents"
        },
        "cte": "",
        "sender": {
            "name": "",
            "email": "",
            "mobile": "",
            "document": "",
            "address": "",
            "number": "",
            "complement": "",
            "neighborhood": "",
            "city": "",
            "state": "",
            "postalCode": ""
        },
        "recipient": {
            "name": "",
            "email": "",
            "mobile": "",
            "phoneNumber": "",
            "document": "",
            "address": "",
            "number": "",
            "complement": "",
            "neighborhood": "",
            "city": "",
            "state": "",
            "postalCode": ""
        },
        "weight": {
            "value": 0.592,
            "unit": "grams"
        },
        "dimensions": {
            "length": {
                "value": 0,
                "unit": "cm"
            },
            "width": {
                "value": 0,
                "unit": "cm"
            },
            "height": {
                "value": 0,
                "unit": "cm"
            }
        },
        "volume": {
            "value": 0,
            "unit": "cm³"
        },
        "carrierLogo": "https://api.logapi.com.br/public/carrier/gol-log.png",
        "postDate": {
            "date": "2024-11-04T15:11:59-03:00",
            "timezone": "America/Sao_Paulo",
            "utcOffset": "-03:00"
        }
    },
    "tracking": [
        {
            "date": "2024-11-04T15:11:59-03:00",
            "timezone": "America/Sao_Paulo",
            "utcOffset": "-03:00",
            "title": "Emitida",
            "description": "1 volume foi recebido na loja GOLLOG - QHV",
            "location": "QHV - RS",
            "status": "Posted",
            "details": {
                "statusText": "Postado",
                "description": "O pacote foi postado e iniciou seu trajeto.",
                "toDo": "Aguardar atualização de status."
            }
        },
        {
            "date": "2024-11-04T15:16:46-03:00",
            "timezone": "America/Sao_Paulo",
            "utcOffset": "-03:00",
            "title": "Manifestada",
            "description": "1 volume foi manifestado no transporte G38953t",
            "location": "QHV - RS",
            "status": "InTransit",
            "details": {
                "statusText": "Em Trânsito",
                "description": "O pacote está em movimento entre as unidades de logística.",
                "toDo": "Aguardar atualização de status."
            }
        },
        {
            "date": "2024-11-04T19:45:04-03:00",
            "timezone": "America/Sao_Paulo",
            "utcOffset": "-03:00",
            "title": "Despachada",
            "description": "1 volume está em transferência de QHV para POA no transporte G38953t",
            "location": "QHV - RS",
            "status": "InTransit",
            "details": {
                "statusText": "Em Trânsito",
                "description": "O pacote está em movimento entre as unidades de logística.",
                "toDo": "Aguardar atualização de status."
            }
        },
        {
            "date": "2024-11-04T19:45:34-03:00",
            "timezone": "America/Sao_Paulo",
            "utcOffset": "-03:00",
            "title": "Recebimento em base intermediária",
            "description": "1 volume foi recebido na unidade POA no transporte G38953t para conexão",
            "location": "POA - RS",
            "status": "InTransit",
            "details": {
                "statusText": "Em Trânsito",
                "description": "O pacote está em movimento entre as unidades de logística.",
                "toDo": "Aguardar atualização de status."
            }
        },
        {
            "date": "2024-11-05T04:10:33-03:00",
            "timezone": "America/Sao_Paulo",
            "utcOffset": "-03:00",
            "title": "Manifestada",
            "description": "1 volume foi manifestado no transporte G31247",
            "location": "POA - RS",
            "status": "InTransit",
            "details": {
                "statusText": "Em Trânsito",
                "description": "O pacote está em movimento entre as unidades de logística.",
                "toDo": "Aguardar atualização de status."
            }
        },
        {
            "date": "2024-11-05T17:24:03-03:00",
            "timezone": "America/Sao_Paulo",
            "utcOffset": "-03:00",
            "title": "Despachada",
            "description": "1 volume está em transferência de POA para GRU no transporte G31247",
            "location": "POA - RS",
            "status": "InTransit",
            "details": {
                "statusText": "Em Trânsito",
                "description": "O pacote está em movimento entre as unidades de logística.",
                "toDo": "Aguardar atualização de status."
            }
        },
        {
            "date": "2024-11-05T21:42:44-03:00",
            "timezone": "America/Sao_Paulo",
            "utcOffset": "-03:00",
            "title": "Recebimento em base intermediária",
            "description": "1 volume foi recebido na unidade GRU no transporte G31247 para conexão",
            "location": "GRU - RS",
            "status": "InTransit",
            "details": {
                "statusText": "Em Trânsito",
                "description": "O pacote está em movimento entre as unidades de logística.",
                "toDo": "Aguardar atualização de status."
            }
        },
        {
            "date": "2024-11-06T13:19:38-03:00",
            "timezone": "America/Sao_Paulo",
            "utcOffset": "-03:00",
            "title": "Saiu para entrega",
            "description": "1 volume em processo de entrega ao destinatário",
            "location": "QGL - RS",
            "status": "OutForDelivery",
            "details": {
                "statusText": "Saiu para Entrega",
                "description": "O pacote saiu para ser entregue",
                "toDo": "Certificar-se de que alguém está disponível para receber."
            }
        },
        {
            "date": "2024-11-06T11:03:52-03:00",
            "timezone": "America/Sao_Paulo",
            "utcOffset": "-03:00",
            "title": "Despachada",
            "description": "1 volume está em transferência de GRU para QGL no transporte G31925D",
            "location": "GRU - RS",
            "status": "InTransit",
            "details": {
                "statusText": "Em Trânsito",
                "description": "O pacote está em movimento entre as unidades de logística.",
                "toDo": "Aguardar atualização de status."
            }
        },
        {
            "date": "2024-11-06T11:30:26-03:00",
            "timezone": "America/Sao_Paulo",
            "utcOffset": "-03:00",
            "title": "Recebida no destino",
            "description": "1 volume desembarcado no destino QGL no transporte G31925D",
            "location": "QGL - RS",
            "status": "InTransit",
            "details": {
                "statusText": "Em Trânsito",
                "description": "O pacote está em movimento entre as unidades de logística.",
                "toDo": "Aguardar atualização de status."
            }
        },
        {
            "date": "2024-11-06T12:21:53-03:00",
            "timezone": "America/Sao_Paulo",
            "utcOffset": "-03:00",
            "title": "Saiu para entrega",
            "description": "1 volume em processo de entrega ao destinatário",
            "location": "QGL - RS",
            "status": "OutForDelivery",
            "details": {
                "statusText": "Saiu para Entrega",
                "description": "O pacote saiu para ser entregue",
                "toDo": "Certificar-se de que alguém está disponível para receber."
            }
        },
        {
            "date": "2024-11-06T07:57:32-03:00",
            "timezone": "America/Sao_Paulo",
            "utcOffset": "-03:00",
            "title": "Manifestada",
            "description": "1 volume foi manifestado no transporte G31925D",
            "location": "GRU - RS",
            "status": "InTransit",
            "details": {
                "statusText": "Em Trânsito",
                "description": "O pacote está em movimento entre as unidades de logística.",
                "toDo": "Aguardar atualização de status."
            }
        },
        {
            "date": "2024-11-07T14:06:57-03:00",
            "timezone": "America/Sao_Paulo",
            "utcOffset": "-03:00",
            "title": "Entrega",
            "description": "1 volume recebido em domicílio por Marluce Teles ",
            "location": "QGL - RS",
            "status": "Delivered",
            "details": {
                "statusText": "Entregue",
                "description": "O pacote foi entregue ao destinatário.",
                "toDo": "Confirmar se foi recebido corretamente."
            }
        }
    ],
    "originalData": [
        {
            "found": true,
            "showEvents": false,
            "header": {
                "code": "12728182611",
                "nf": "000017571",
                "reference": "145035746",
                "service": "ECG",
                "serviceName": "E-COMMERCE",
                "pieces": 1,
                "weight": 0.592
            },
            "routing": {
                "origin": {
                    "code": "QHV",
                    "name": "FRG LOGISTICA EIRELI - EPP",
                    "document": "27971339000191",
                    "phoneNumber": "(51) 30354611",
                    "email": "qhvfk@voegol.com.br",
                    "address": "Rua Sete de Setembro",
                    "addressNumber": "660",
                    "addressComplement": null,
                    "postalCode": "93334174",
                    "city": "NOVO HAMBURGO",
                    "state": "RS",
                    "country": "BRA",
                    "availableForBooking": "true",
                    "linkedAirportCode": "POA",
                    "officeHours": [
                        {
                            "name": "Manhã",
                            "from": "9:00 AM",
                            "to": "12:00 PM"
                        },
                        {
                            "name": "Tarde",
                            "from": "12:01 PM",
                            "to": "6:00 PM"
                        },
                        {
                            "name": "Noite",
                            "from": "6:01 PM",
                            "to": "7:15 PM"
                        }
                    ],
                    "latitude": "-29.7124837",
                    "longitude": "-51.1427524",
                    "distance": 0
                },
                "destination": {
                    "code": "QGL",
                    "name": "N. D TRANSPORTES E LOGISTICA LTDA - ME",
                    "document": "03581953000189",
                    "phoneNumber": "(11) 20912246",
                    "email": "qglfk@voegol.com.br",
                    "address": "Rua Rupiara",
                    "addressNumber": "20",
                    "addressComplement": null,
                    "postalCode": "03443020",
                    "city": "SÃO PAULO",
                    "state": "SP",
                    "country": "BRA",
                    "availableForBooking": "true",
                    "linkedAirportCode": "GRU",
                    "officeHours": [
                        {
                            "name": "Manhã",
                            "from": "9:00 AM",
                            "to": "12:00 PM"
                        },
                        {
                            "name": "Tarde",
                            "from": "12:01 PM",
                            "to": "6:00 PM"
                        }
                    ],
                    "latitude": "-23.542482",
                    "longitude": "-46.536933",
                    "distance": 0
                }
            },
            "events": [
                {
                    "agent": "NOME DO AGENTE",
                    "pid": "197970357",
                    "date": "2024-11-07T14:06:57Z",
                    "code": "DLV",
                    "codeDescription": "Entrega",
                    "station": "QGL",
                    "arrivalPoint": null,
                    "message": "1 volume recebido em domicílio por Marluce Teles ",
                    "scheduleType": null
                },
                {
                    "agent": "NOME DO AGENTE",
                    "pid": "197740089",
                    "date": "2024-11-06T07:57:32Z",
                    "code": "MAN",
                    "codeDescription": "Manifestada",
                    "station": "GRU",
                    "arrivalPoint": "QGL",
                    "message": "1 volume foi manifestado no transporte G31925D",
                    "scheduleType": "Surface"
                },
                {
                    "agent": "NOME DO AGENTE",
                    "pid": "197782668",
                    "date": "2024-11-06T12:21:53Z",
                    "code": "OND",
                    "codeDescription": "Saiu para entrega",
                    "station": "QGL",
                    "arrivalPoint": null,
                    "message": "1 volume em processo de entrega ao destinatário",
                    "scheduleType": null
                },
                {
                    "agent": "NOME DO AGENTE",
                    "pid": "197775124",
                    "date": "2024-11-06T11:30:26Z",
                    "code": "RCF",
                    "codeDescription": "Recebida no destino",
                    "station": "QGL",
                    "arrivalPoint": "QGL",
                    "message": "1 volume desembarcado no destino QGL no transporte G31925D",
                    "scheduleType": "Surface"
                },
                {
                    "agent": "NOME DO AGENTE",
                    "pid": "197771044",
                    "date": "2024-11-06T11:03:52Z",
                    "code": "DEP",
                    "codeDescription": "Despachada",
                    "station": "GRU",
                    "arrivalPoint": "QGL",
                    "message": "1 volume está em transferência de GRU para QGL no transporte G31925D",
                    "scheduleType": "Surface"
                },
                {
                    "agent": "NOME DO AGENTE",
                    "pid": "197789985",
                    "date": "2024-11-06T13:19:38Z",
                    "code": "OND",
                    "codeDescription": "Saiu para entrega",
                    "station": "QGL",
                    "arrivalPoint": null,
                    "message": "1 volume em processo de entrega ao destinatário",
                    "scheduleType": null
                },
                {
                    "agent": "NOME DO AGENTE",
                    "pid": "197682904",
                    "date": "2024-11-05T21:42:44Z",
                    "code": "CIE",
                    "codeDescription": "Recebimento em base intermediária",
                    "station": "GRU",
                    "arrivalPoint": "GRU",
                    "message": "1 volume foi recebido na unidade GRU no transporte G31247 para conexão",
                    "scheduleType": "Air"
                },
                {
                    "agent": "NOME DO AGENTE",
                    "pid": "197649912",
                    "date": "2024-11-05T17:24:03Z",
                    "code": "DEP",
                    "codeDescription": "Despachada",
                    "station": "POA",
                    "arrivalPoint": "GRU",
                    "message": "1 volume está em transferência de POA para GRU no transporte G31247",
                    "scheduleType": "Air"
                },
                {
                    "agent": "NOME DO AGENTE",
                    "pid": "197544261",
                    "date": "2024-11-05T04:10:33Z",
                    "code": "MAN",
                    "codeDescription": "Manifestada",
                    "station": "POA",
                    "arrivalPoint": "GRU",
                    "message": "1 volume foi manifestado no transporte G31247",
                    "scheduleType": "Air"
                },
                {
                    "agent": "NOME DO AGENTE",
                    "pid": "197504914",
                    "date": "2024-11-04T19:45:34Z",
                    "code": "CIE",
                    "codeDescription": "Recebimento em base intermediária",
                    "station": "POA",
                    "arrivalPoint": "POA",
                    "message": "1 volume foi recebido na unidade POA no transporte G38953t para conexão",
                    "scheduleType": "Surface"
                },
                {
                    "agent": "NOME DO AGENTE",
                    "pid": "197504441",
                    "date": "2024-11-04T19:45:04Z",
                    "code": "DEP",
                    "codeDescription": "Despachada",
                    "station": "QHV",
                    "arrivalPoint": "POA",
                    "message": "1 volume está em transferência de QHV para POA no transporte G38953t",
                    "scheduleType": "Surface"
                },
                {
                    "agent": "NOME DO AGENTE",
                    "pid": "197471842",
                    "date": "2024-11-04T15:16:46Z",
                    "code": "MAN",
                    "codeDescription": "Manifestada",
                    "station": "QHV",
                    "arrivalPoint": "POA",
                    "message": "1 volume foi manifestado no transporte G38953t",
                    "scheduleType": "Surface"
                },
                {
                    "agent": "NOME DO AGENTE",
                    "pid": "197471249",
                    "date": "2024-11-04T15:11:59Z",
                    "code": "RCS",
                    "codeDescription": "Emitida",
                    "station": "QHV",
                    "arrivalPoint": null,
                    "message": "1 volume foi recebido na loja GOLLOG - QHV",
                    "scheduleType": null
                }
            ],
            "originAdvancedPost": "QHV - SALGADO FILHO (PORTO ALEGRE)",
            "destinationAdvancedPost": "QGL - GUARULHOS INTERNATIONAL (GUARULHOS)",
            "nfeCode": null,
            "isHomeDelivery": true,
            "deliveryPlace": "delivery",
            "isCancelled": false,
            "cancellationDateTime": null,
            "expectedDeliveryDate": "11/11",
            "deliveryDeadline": "11/11",
            "lastStatus": {
                "code": "DLV",
                "description": "1 volume recebido em domicílio por NOME",
                "supportedCodes": []
            },
            "rcs": true,
            "dep": true,
            "rcf": true,
            "dlv": true,
            "ond": true,
            "gre": false,
            "crc": false,
            "crcOccurredAtDestiny": false,
            "ccd": false,
            "ccdOccurredAtDestiny": false,
            "deliveryAddress": {
                "street": "RUA DO ENDEREÇO",
                "number": "111",
                "complement": "CASA X",
                "postalCode": "03685010",
                "neighborhood": "JARDIM SÃO NICOLAU",
                "city": "SÃO PAULO",
                "state": "SP",
                "country": "BRA"
            },
            "trackingIdentifiers": {
                "awb": "5778884455",
                "invoiceNumber": "17175"
            }
        }
    ],
    "trackingIdentifiers": {
                "awb": "5778884455",
                "invonvoiceNumber": "15177"
    },
    "error": false
}
```

{% endtab %}

{% tab title="400" %}

```json
{
    "code": "BadRequest",
    "message": "Entrega não localizada no transportador"
}
```

{% endtab %}
{% endtabs %}


# Armazenando credenciais na LogAPI

Se preferir, você pode armazenar as credenciais das transportadoras dentro da LogAPI.

Por padrão, você deve enviar as credenciais da API da transportadora na requisição de rastreamento.

No entanto, você pode armazenar esses dados no painel LogAPI, o que torna a requisição mais segura (pois as credenciais não são transmitidas) e muito mais prática, já que não precisará ajustar as credenciais em cada requisição ao alternar transportadoras.

Assim, a requisição ficará como o exemplo a seguir, dispensando o envio das credenciais.

```json
{
    "carrierName": "loggi",
    "trackingIdentifiers": {
        "trackingCode": "EBW2NR3T"
    }
}
```

Para isso, acesse o painel LogAPI e cadastre as transportadoras que pretende utilizar, salvando as credenciais.&#x20;


# Padrão de Retorno

Toda requisição segue o mesmo padrão de retorno json.

A requisição retornará um json completo, sempre com as mesmas chaves e com o array de rastreamento padronizado.

## Descrição dos dados retornados

Ao fim desta página, você terá o exemplo de json retornado. Agora, vamos explicar o seu formato.

{% hint style="info" %}
**Importante**: Cada transportadora fornece diferentes conjuntos de dados, portanto, nem todos os campos do JSON serão sempre preenchidos. Algumas transportadoras podem retornar o endereço de entrega, enquanto outras não. Ainda assim, a LogAPI devolve todos os campos em sua resposta, mesmo que alguns estejam vazios.
{% endhint %}

A resposta é composta por:

* `cost` é o preço do frete.
* `trackingCode` é o codigo de rastreamento.
* `type` é a modalidade de entrega.
* `deliveryEstimate` é a previsão de entrega.
* `invoice` contém os dados da nota fiscal.
* `cte` é o número do conhecimento de transporte eletrônico.
* `sender` possuí os dados do remetente.
* `recipient` possuí os dados do destinatário.
* `weight` contém o peso.
* `dimensions` contém a altura, largura e comprimento.
* `volume` é a cubagem do pacote.
* `carrierLogo` é a logo em PNG da transportadora.
* `postDate` é a data de postagem.
* `tracking` é o array dos eventos de rastreamento:
  * `date` é a data do evento.
  * `title` é o nome do evento na transportadora.
  * `description` é a descrição fornecida pela transportadora.
  * `location` o local que informaram o evento.
  * **`status` é o status padronizado da LogAPI.**&#x20;
  * **`details` descrevem o status padronizado em português.**
* `originalData` contém o json original completo retornado pela transportadora.

## Status padronizado LogAPI

Cada transportadora nomeia o evento de rastreamento de forma própria. Por exemplo, para o evento "saiu para entrega", temos:

* **Correios**: "saiu para entrega"
* **Jadlog**: "em rota"
* **Braspress**: "em rota para entrega"
* **Total Express**: "104"

Esses eventos indicam a mesma situação: a entrega está a caminho do endereço final. Para simplificar, a LogAPI mantém um tabelamento de status para cada transportadora, convertendo as informações originais em um status padrão.

Para o exemplo acima, todos esses eventos são nomeados como **OutForDelivery**. Nossa resposta incluí ainda uma descrição, assim:

```json
{
            "date": "2024-11-06T13:19:38-03:00",
            "timezone": "America/Sao_Paulo",
            "utcOffset": "-03:00",
            "title": "Saiu para entrega",
            "description": "1 volume em processo de entrega ao destinatário",
            "location": "QGL - RS",
            "status": "OutForDelivery",
            "details": {
                "statusText": "Saiu para Entrega",
                "description": "O pacote saiu para ser entregue",
                "toDo": "Certificar-se de que alguém está disponível para receber."
            }
}
```

Portanto, você não precisa criar nenhum mapa de andamentos em sua aplicação. Utilize nossos campos **status** e **details** para mostrar as informações em seu sistema.


# Status Padronizados

Lista de status existentes na LogAPI.

Temos uma extensa lista de status mapeados de todas as transportadoras. No entanto, você só precisa observar os **status da LogAPI**, que são uma "tradução" dos status enviados pelas transportadoras.&#x20;

Esse status padronizado sempre é retornado no campo `status` dentro do array `tracking` no nosso [Padrão de Retorno](/intergrando-logapi/padrao-de-retorno).

```json
{
    "PendingPostage": {
      "pt-BR": "Postagem Pendente",
      "description": "O embarcador solicitou a coleta do pacote, mas ele ainda não foi postado.",
      "to-do": "Verificar com o embarcador a previsão para postagem do pacote."
    },
    "Posted": {
      "pt-BR": "Postado",
      "description": "O pacote foi postado e iniciou seu trajeto.",
      "to-do": "Aguardar atualização de status."
    },
    "InTransit": {
      "pt-BR": "Em Trânsito",
      "description": "O pacote está em movimento entre as unidades de logística.",
      "to-do": "Aguardar atualização de status."
    },
    "OutForDelivery": {
      "pt-BR": "Saiu para Entrega",
      "description": "O pacote saiu para ser entregue",
      "to-do": "Certificar-se de que alguém está disponível para receber."
    },
    "Delivered": {
      "pt-BR": "Entregue",
      "description": "O pacote foi entregue ao destinatário.",
      "to-do": "Confirmar se foi recebido corretamente."
    },
    "Issue": {
      "pt-BR": "Problema",
      "description": "Ocorreu um problema não especificado com a entrega.",
      "to-do": "Contactar a transportadora."
    },
    "AbsentRecipient": {
      "pt-BR": "Destinatário Ausente",
      "description": "Não foi possível entregar devido à ausência do destinatário.",
      "to-do": "Reagendar entrega ou buscar o pacote."
    },
    "LockerDelivery": {
      "pt-BR": "Entregue em Locker",
      "description": "O pacote foi entregue em um armário de autoatendimento.",
      "to-do": "Retirar o pacote do armário."
    },
    "OnTime": {
      "pt-BR": "No Prazo",
      "description": "Entregue dentro do prazo estimado.",
      "to-do": ""
    },
    "Delayed": {
      "pt-BR": "Atrasado",
      "description": "Entrega realizada após o prazo estimado.",
      "to-do": ""
    },
    "ReadyForCustomerPickup": {
      "pt-BR": "Aguardando Retirada",
      "description": "O pacote está disponível para retirada pelo destinatário.",
      "to-do": "Comunicar o destinatário para buscar a entrega em agência"
    },
    "AddressIssue": {
      "pt-BR": "Erro de Endereço",
      "description": "Inconsistência ou erro no endereço fornecido.",
      "to-do": "Corrigir o endereço e informar à transportadora."
    },
    "Lost": {
      "pt-BR": "Extraviado",
      "description": "O pacote foi perdido durante o processo de entrega.",
      "to-do": "Contactar a transportadora e verificar opções."
    },
    "Returning": {
      "pt-BR": "Retornando ao Remetente",
      "description": "O pacote está sendo devolvido ao remetente.",
      "to-do": "Aguardar a devolução"
    },
    "Returned": {
      "pt-BR": "Retornado ao Remetente",
      "description": "O pacote foi devolvido ao remetente.",
      "to-do": "Verificar o objeto recebido e seguir os trâmites internos."
    },
    "IncorrectData": {
      "pt-BR": "Dados Incorretos",
      "description": "Dados de entrega fornecidos estão incorretos.",
      "to-do": "Corrigir os dados e informar à transportadora."
    },
    "UnknownRecipient": {
      "pt-BR": "Destinatário Desconhecido",
      "description": "O pacote não pôde ser entregue porque o destinatário é desconhecido.",
      "to-do": "Verificar os dados do destinatário e entrar em contato com a transportadora."
    },
    "Unavailable": {
      "pt-BR": "Indisponível",
      "description": "O pacote não está disponível na transportadora no momento.",
      "to-do": "Contactar a transportadora."
    },
    "Rejected": {
      "pt-BR": "Recusado",
      "description": "O pacote foi recusado pelo destinatário.",
      "to-do": "Contactar o cliente e proceder aos trâmites internos."
    },
    "CustomsHold": {
      "pt-BR": "Retido pela Alfândega",
      "description": "O pacote foi retido para inspeção alfandegária.",
      "to-do": "Aguardar liberação ou fornecer documentos necessários."
    },
    "PaymentPending": {
      "pt-BR": "Pagamento Pendente",
      "description": "Aguardando confirmação de pagamento para prosseguir.",
      "to-do": "Efetuar o pagamento pendente."
    },
    "PaymentCompleted": {
      "pt-BR": "Pagamento Efetuado",
      "description": "Pagamento confirmado, pacote liberado para seguir.",
      "to-do": "Aguardar atualização de status."
    },
    "Damaged": {
      "pt-BR": "Danificado",
      "description": "O pacote sofreu danos durante o transporte.",
      "to-do": "Contactar a transportadora para resolução."
    },
    "Violated": {
      "pt-BR": "Violado",
      "description": "O pacote foi aberto ou violado.",
      "to-do": "Contactar a transportadora para resolução."
    },
    "UnderReview": {
      "pt-BR": "Sob Revisão",
      "description": "O pacote está sob revisão por alguma razão específica.",
      "to-do": "Aguardar atualização de status ou contactar a transportadora."
    },
    "ContactCarrier": {
      "pt-BR": "Entre em Contato com a Transportadora",
      "description": "É necessário entrar em contato com a transportadora para mais informações.",
      "to-do": "Contactar a transportadora."
    },
    "Canceled": {
      "pt-BR": "Cancelado",
      "description": "O serviço de entrega foi cancelado.",
      "to-do": "Aguardar a devolução, caso já tenha sido postado."
    },
    "Destroyed": {
      "pt-BR": "Destruído",
      "description": "O pacote foi destruído devido a condições insalubres ou outros motivos.",
      "to-do": "Contactar a transportadora para resolução."
    },
    "CustomsReview": {
      "pt-BR": "Revisão Alfandegária",
      "description": "O pacote está em revisão alfandegária.",
      "to-do": "Aguardar liberação ou fornecer documentos necessários."
    },
    "SpecialHandling": {
      "pt-BR": "Manuseio Especial Necessário",
      "description": "O pacote requer condições especiais para entrega.",
      "to-do": "Contactar a transportadora para mais informações."
    },
    "CompensationPending": {
      "pt-BR": "Indenização Pendente",
      "description": "A transportadora está processando o pagamento da indenização.",
      "to-do": "Acompanhar o processo de indenização junto à transportadora."
    },
    "CompensationPaid": {
      "pt-BR": "Indenização Paga",
      "description": "A transportadora já pagou a indenização. .",
      "to-do": "Confirmar o recebimento da indenização e finalizar o caso."
    }
}
```


