A Netshoes disponibiliza a possibilidade de requisitar o romaneio/etiquetas via API, para sellers que utilizam o serviço de entrega Magalu Entregas, e assim unificar os processos junto as integradoras.
Para isso, disponibilizamos através do POST /api/v1/orders/shipping-tags, com a possibilidade de teste em ambiente SANDBOX.
Descrição API
Headers: { "client_id": "client_id" "access_token":"access_token" }
Onde:
client_id:
O APP Token usado para autenticar.
access_token:
O Access Token usado para autenticar.
Payload request exemplo:
{ "documentType": "ZEBRA", "shippingCodes": [ 860858200 ] }
Onde:
documentType:
Tipo de arquivo solicitado (A4 OU ZEBRA).
shippingCodes:
Lista de Shipping Code para serem geradas etiquetas.
Payload sucesso response exemplo:
[ { "trackingGroupNumber": "62cc2fdd0ee9d64a1e2221b2", "trackingGroupStatus": "GENERATED", "labelStatus": "NOT_VIEWED", "createdDate": "2022-07-11T11:12:45.155", "tag": { "url": "http://mocked" }, "trackings": [ { "shippingCode": 860858200, "trackingCode": "E95C18003DB9457A", "trackingStatus": "GENERATED", "labelStatus": "NOT_VIEWED", "trackingLink": "http://mocked" } ] } ]
Onde:
trackingGroupNumber:
Código agrupador de etiquetas.
trackingGroupStatus:
Status do Código agrupador de etiquetas, que pode ser: PROCESSING, GENERATED, ERROR, DISCARDED, SHIPPED, DELIVERED, EXTERNALLY_SENT.
labelStatus:
Status de visualização do Código agrupador de etiquetas.
createdDate:
Data de criação do Código agrupador de etiquetas.
tag.url:
URL do arquivo contendo as etiquetas do agrupamento (lote) de etiquetas para o formato solicitado.
trackings.shippingCode:
Shipping Code solicitado.
trackings.trackingCode:
Código de rastreio.
trackings.trackingStatus:
Status do tracking.
trackings.labelStatus:
Status de visualização do rastreio.
trackings.trackingLink:
Link de rastreio.
Payload erro response exemplo:
{ "errors": [ { "code": 2, "description": "It is only possible to request a pickup label for invoiced orders", "informationCodes": [ 2, 3 ] } ] }
Onde:
Code:
Código de erro relativo a validação feita (conforme a tabela abaixo) e não a um tipo de erro HTTP.
description:
Descrição do erro.
informationCodes:
Lista de shippingCode que apresentaram algum tipo de erro. Não retorna em todos os casos.
Code | Retorno PT_BR | Retorno EN_US |
1 - Não é Magalu Entregas | Pedido com serviço de envio diferente de Magalu Entregas. Somente é possível requisitar etiquetas para pedidos com serviço de envio via Magalu Entregas. | There are Orders with shipping gateway different from Magalu Entregas. It is only possible to request pickup labels for orders with shipping gateway service as Magalu Entregas. |
2 - Status Inválido | Somente é possível solicitar etiqueta para pedido com status faturado. | It is only possible to request a pickup label for invoiced orders. |
3 - Não Integrado ao Magalu Pagamentos | Pedido em processo de integração. Por favor, tente novamente dentro de alguns minutos. | Order has been integrated. Please try again in a few minutes. |
4 - Não Implementado | Funcionalidade desabilitada. | Feature disabled. |
5 - Em Processamento | Etiqueta já solicitada, por favor, aguarde o processamento. | Pickup label already requested. Please wait for processing. |
6 - Entidade Não Processável | Erro na geração. Tente novamente. | Generation error. Try again. |
7 - Pedido não encontrado | Pedido não localizado no serviço de geração de etiquetas. | Order not found in pickup label service. |
8 - Formato Inválido | Tipo de documento solicitado não existe | File format does not exists |
9 - Nenhuma entrega encontrada | Pedido não localizado para o lojista em referência. | Order not found for the seller in question. |
10 - Pedidos com estorno automático | Pedido(s) com solicitação de estorno já realizada. | There are orders with automatic refund already requested. |
Regras do Processo de Validação de Etiquetas:
Critérios para solicitação de etiquetas:
- ● Pedidos Magalu Entregas;
- ● Pedidos Faturados;
- ● Pedidos com integração de faturamento completos;
- ● Pedidos sem uma prévia solicitação de etiquetas;
- ● Pedidos com prévia solicitação de etiquetas que tenha retornado um status de erro de geração;
- ● Pedidos com prévia solicitação com sucesso na geração porém ainda com status FATURADOS;
- ● Pedidos sem solicitação de estorno já realizada.
Respostas:
200 | Success | Entregas solicitadas foram encontradas na base e suas respectivas etiquetas foram geradas e payload com links de acesso das etiquetas solicitadas será retornado (link etiqueta + link romaneio/rastreio) / "Delivery ids found and pickup sent to Logistics." |
400 | Request invalid or malformed | Erro ao não respeitar alguns dos critérios citados na seção anterior; |
401 | Unauthorized | Credenciais de autenticação fornecidas são inválidas. |
403 | Forbidden | Não foi possível validar as credenciais de autenticação fornecidas. |
404 | Not Found | ○ Pedido não encontrado no serviço de solicitação de etiquetas. ○ Nenhum pedido encontrato com os parâmetros passados; |
409 | Conflict | Erro de conflito para solicitações simultâneas contendo pelo menos um shippingCode em comum entre elas; |
422 | Unprocessable Entity | Erro na Geração de etiquetas. |
423 | Locked | Funcionalidade desabilitada. |
500 | Internal Server Error | Erro de disponibilidade do serviço. |
Importante salientar que:
Em caso de erro em pelo menos uma entrega/pedido, o endpoint irá retornar uma mensagem de erro e as etiquetas solicitadas poderão ser solicitadas novamente. OBS: Podem existir casos de solicitação em que o lote pode ser devolvido parcialmente, vide Cenário 11.
Cenários de solicitação de etiquetas
Cenário 01:
Input: shippingCodes 1,2,3 válidos e requisição realizada com sucesso
{ "documentType": "A4", "shippingCodes": [ 1, 2, 3 ] }
Output: Status 200
{ "pickupTrackingGroupResponses": [ { "createdDate": "2022-08-01T00:44:38.525Z", "labelStatus": "labelStatus", "tag": { "url": "href" }, "trackingGroupNumber": "trackingGroupNumber", "trackingGroupStatus": "trackingGroupStatus", "trackings": [ { "externalTrackingCode": "externalTrackingCode", "labelStatus": "labelStatus", "shippingCode": 1, "trackingCode": "trackingCode", "trackingLink": "trackingLink", "trackingStatus": "trackingStatus" }, { "externalTrackingCode": "externalTrackingCode", "labelStatus": "labelStatus", "shippingCode": 2, "trackingCode": "trackingCode", "trackingLink": "trackingLink", "trackingStatus": "trackingStatus" }, { "externalTrackingCode": "externalTrackingCode", "labelStatus": "labelStatus", "shippingCode": 3, "trackingCode": "trackingCode", "trackingLink": "trackingLink", "trackingStatus": "trackingStatus" } ] } ] }
Cenário 02:
Input: shippingCodes 1 válido, 2 e 3 com erro (pedidos com serviço de envio diferente de Magalu Entregas)
{ "documentType": "A4", "shippingCodes": [ 1, 2, 3 ] }
Output: Status 400
{ "errors": [ { "code": 1, "description": "There are Orders with shipping gateway different from Magalu Entregas. It is only possible to request pickup labels for orders with shipping gateway service as Magalu Entregas.", "informationCodes": [ 2, 3 ] } ] }
Cenário 03:
Input: shippingCodes 1 válido, 2 e 3 com erro (pedidos com status diferentes de faturado)
{ "documentType": "A4", "shippingCodes": [ 1, 2, 3 ] }
Output: Status 400
{ "errors": [ { "code": 2, "description": "It is only possible to request a pickup label for invoiced orders", "informationCodes": [ 2, 3 ] } ] }
Cenário 04:
Input: shippingCodes 1 válido, 2 e 3 com erro (pedidos faturados, porém ainda não finalizaram a integração com o ecossistema do Magalu Entregas, para assim permitir emissão de etiqueta)
{ "documentType": "A4", "shippingCodes": [ 1, 2, 3 ] }
Output: Status 400
{ "errors": [ { "code": 3, "description": "Order has been integrated. Please try again in a few minutes.", "informationCodes": [ 2, 3 ] } ] }
Cenário 05:
Input: shippingCodes 1 válido, 2 e 3 com erro (mais de uma requisição simultânea para o mesmo Shipping Code em processamento).
{ "documentType": "A4", "shippingCodes": [ 1, 2, 3 ] }
Output: Status 400/409
{ "errors": [ { "code": 5, "description": "Pickup label already requested. Please wait for processing." } ] }
Cenário 06:
Input: shippingCodes 1, 2 e 3 válidos, porém erro de integração com o serviço do Magalu Entregas.
{ "documentType": "A4", "shippingCodes": [ 1, 2, 3 ] }
Output: Status 422
{ "errors": [ { "code": 6, "description": "Generation error. Try again." } ] }
Cenário 07:
Input: shippingCodes 1, 2 e 3 não existentes para o lojista requisitante
{ "documentType": "A4", "shippingCodes": [ 1, 2, 3 ] }
Output: Status 404
{ "errors": [ { "code": 9, "description": "Order not found for the seller in question." } ] }
Cenário 08:
Input: shippingCodes 1, 2 e 3 válidos porém com retorno NOT_FOUND do Magalu Entregas.
{ "documentType": "A4", "shippingCodes": [ 1, 2, 3 ] }
Output: Status 404
{ "errors": [ { "code": 7, "description": "Order not found in pickup label service." } ] }
Cenário 09:
Input: shippingCodes:
shippingCode | Magalu Entregas | Faturado | Processado |
1 | N | N | N |
2 | S | N | N |
3 | S | S | N |
4 | S | S | S |
5 | N | S | S |
{ "documentType": "A4", "shippingCodes": [ 1, 2, 3, 4, 5, ] }
Output: Status 400
{ "errors": [ { "code": 1, "description": "There are Orders with shipping gateway different from Magalu Entregas. It is only possible to request pickup labels for orders with shipping gateway service as Magalu Entregas.", "informationCodes": [ 1, 5 ] }, { "code": 2, "description": "It is only possible to request a pickup label for invoiced orders", "informationCodes": [ 2, ] }, { "code": 3, "description": "Order has been integrated. Please try again in a few minutes.", "informationCodes": [ 3 ] } ] }
Cenário 10:
Input: shippingCodes 1, 2 e 3 válidos porém o tipo de etiqueta solicitado não é A4 ou ZEBRA
{ "documentType": "X8", "shippingCodes": [ 1, 2, 3 ] }
Output: Status 400
{ "errors": [ { "code": 8, "description": "File format does not exists." } ] }
Cenário 11:
Input: shippingCodes 1 válido, 2 e 3 não existentes para o lojista requisitante.
{ "documentType": "A4", "shippingCodes": [ 1, 2, 3 ] }
Output: Status 200
{ "pickupTrackingGroupResponses": [ { "createdDate": "2022-08-01T00:44:38.525Z", "labelStatus": "labelStatus", "tag": { "url": "href" }, "trackingGroupNumber": "trackingGroupNumber", "trackingGroupStatus": "trackingGroupStatus", "trackings": [ { "externalTrackingCode": "externalTrackingCode", "labelStatus": "labelStatus", "shippingCode": 1, "trackingCode": "trackingCode", "trackingLink": "trackingLink", "trackingStatus": "trackingStatus" } ] } ] }
Cenário 12:
Input: shippingCodes 9.
{ "documentType": "X8", "shippingCodes": [9] }
Output: Status 200
{ "pickupTrackingGroupResponses": [ { "createdDate": "2022-08-01T00:44:38.525Z", "labelStatus": "labelStatus", "tag": { "url": "href" }, "trackingGroupNumber": "trackingGroupNumber", "trackingGroupStatus": "trackingGroupStatus", "trackings": [ { "externalTrackingCode": "externalTrackingCode", "labelStatus": "labelStatus", "shippingCode": 1, "trackingCode": "trackingCode", "trackingLink": "trackingLink", "trackingStatus": "trackingStatus" } ] } ] }
Simulação em ambiente sandbox
Para simular os possíveis retornos da API em sandbox usar a tabela abaixo:
Cenário | Shipping Code final | Retorno PT_BR | Retorno EN_US |
Cenário 01 | 1 | Cenário de sucesso | Success scenario |
Cenário 02 | 2 | Pedido com serviço de envio diferente de Magalu Entregas. Somente é possível requisitar etiquetas para pedidos com serviço de envio via Magalu Entregas. | There are Orders with shipping gateway different from Magalu Entregas. It is only possible to request pickup labels for orders with shipping gateway service as Magalu Entregas. |
Cenário 03 | 3 | Somente é possível solicitar etiqueta para pedido com status faturado. | It is only possible to request a pickup label for invoiced orders. |
Cenário 04 | 4 | Pedido em processo de integração. Por favor, tente novamente dentro de alguns minutos. | Order has been integrated. Please try again in a few minutes |
Cenário 05 | 5 | Etiqueta já solicitada, por favor, aguarde o processamento. | Pickup label already requested. Please wait for processing. |
Cenário 06 | 6 | Erro na geração. Tente novamente. | Generation error. Try again. |
Cenário 07 | 7 | Pedido não localizado para o lojista em referência. | Order not found for the seller in question. |
Cenário 08 | 8 | Pedido não localizado no serviço de geração de etiquetas. | Order not found in pickup label service. |
Cenário 09 | envie uma lista de shippingCodes com finais 2,3 e 4 na mesma requisição | Pedido com serviço de envio diferente de Magalu Entregas. Somente é possível requisitar etiquetas para pedidos com serviço de envio via Magalu Entregas.; Somente é possível solicitar etiqueta para pedido com status faturado; Pedido em processo de integração. Por favor, tente novamente dentro de alguns minutos. | There are Orders with shipping gateway different from Magalu Entregas. It is only possible to request pickup labels for orders with shipping gateway service as Magalu Entregas; It is only possible to request a pickup label for invoiced orders; Order has been integrated. Please try again in a few minutes |
Cenário 10 | envie uma requisição com final 1 e um documentType invalido | Tipo de documento solicitado não existe. | File format does not exists. |
Cenário 11 | envie uma lista de shippingCodes que tenha final 1 e um ou mais shipping code inexistentes | Shipping Codes encontrados e etiquetas enviadas a Logística. | Shipping Codes found and pickup sent to Logistics. |
Cenário 12 | 9 | Pedido(s) com solicitação de estorno já realizada. | There are orders with automatic refund already requested. |
Para outros cenários:
Cenário onde se envia um payload vazio:
Input:
{ }
Output: Status 400
{ "errors": [ "shippingCodes:Number of values allowed in request must be between 1 and 50.", "shippingCodes:Field can not be null.", "shippingCodes:Field can not be empty.", "documentType:Field can not be empty." ] }
Cenário número de shippingCodes maior do que o suportado pela API (máx: 50 etiquetas):
Input:
{ "documentType": "ZEBRA", "shippingCodes": [ 860858200, ... , 160858200 ] }
Output: Status 400
{ "errors": [ "shippingCodes:Number of values allowed in request must be between 1 and 50." ] }
Cenário onde o fluxo está desabilitado:
Input: shippingCodes 1, 2 e 3 válidos, mas o fluxo está desabilitado.
{ "documentType": "A4", "shippingCodes": [ 1, 2, 3 ] }
Output: Status 423
{ "errors": [ { "code": 4, "description": "Locked." } ] }
Informações adicionais
Idioma da descrição do retorno de erro:
As mensagens de erro sempre serão exibidas de acordo com o locale do serviço que está fazendo a requisição, se for português (pt_BR), retornará em português (pt_BR), caso contrário o retorno padrão é em inglês (en_US).
Atenção
Caso tenha alguma dúvida e/ou problema, entre em contato conosco através do Suporte Netshoes