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