---
# System prepended metadata

title: Endpoints

---

# Endpoints
|Ambiente|Endpoint|
|-|-|
|PROD|https://vasp360api.vaspexpresso.pt|
|QUA|https://vasp360api-qua.vaspexpresso.pt|
|DEV|http://vasp360api-dev.vaspexpresso.local|

# Autenticação
O acesso à API é feito usando autenticação JWT (JSON Web Token).
## Obter token
### Input
:::info
`POST /Account/login`
|Campo|Obrigatório|
|-|-|
|username|Sim|
|password|Sim|
:::
### Output
:::success
**OK : 200**
Autenticação bem sucedida.

|Campo|Descrição|Tipo|
|-|-|-|
|user|dados utilizador||
|token|token de acesso|string|
:::
:::warning
**Unauthorized : 401**
Credenciais incorrectas
:::
### Código Exemplo
#### C#
```csharp=
var client = new RestClient("http://vasp360api-dev.vaspexpresso.local/Account/login");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\r\n    \"username\":\"dsidesenvolvimento@vasp.pt\",\r\n    \"password\":\"2021vasp360\"\r\n}",  ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
```
#### Java
```java=
Unirest.setTimeouts(0, 0);
HttpResponse<String> response = Unirest.post("http://vasp360api-dev.vaspexpresso.local/Account/login")
  .header("Content-Type", "application/json")
  .body("{\r\n    \"username\":\"dsidesenvolvimento@vasp.pt\",\r\n    \"password\":\"2021vasp360\"\r\n}")
  .asString();
```

#### Javascript
```javascript=
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify({
  "username": "dsidesenvolvimento@vasp.pt",
  "password": "2021vasp360"
});

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("http://vasp360api-dev.vaspexpresso.local/Account/login", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

# Encomendas
## Criar Encomenda
### Input
:::info
`POST /Order`
|Campo|Descrição|Tipo|Tamanho|Obrigatório|
|-|-|-|-|-|
|orderNumber|Numero de encomenda|string|20|Sim|
|isOrderNumberUnique|Validar se numero de encomenda já existe. Por defeito tem valor `false`. <details><summary>Ver detalhes</summary>Usado caso deseje assegurar que cada orderNumber é único; Caso seja `false` a API 360 permite ao cliente enviar encomendas com o mesmo orderNumber, e acrescenta automáticamente um prefixo no caso de encomendas com o mesmo orderNumber.</details>|boolean||Não|
|orderNumberAddPrefix|Adicionar prefixo do cliente ao numero de encomenda. Por defeito tem valor `false`.<details><summary>Ver detalhes</summary>No sistema interno da Vasp360, cada cliente tem um prefixo associado (para prevenir duplicados com outros clientes; Se cliente desejar que esse prefixo seja adicionado automaticamente ao orderNumber deverá ativar este campo).</details>|boolean||Não|
|isReadyToImport|Definir se a encomenda será automaticamente processada. Por defeito tem valor `true`|boolean||Não|
|receiverName|Nome destinatário|string|120|Sim|
|receiverEmail|Email destinatário|email|100|Não|
|receiverAddress|Morada destinatário|string|200|Sim|
|receiverPostalCode|Código Postal destinatário|Formato: 0000-000|7|Sim|
|receiverLocality|Localidade destinatário|string|100|Sim|
|receiverPhone|Telefone destinatário|numeric|9-15|Não|
|receiverVAT|NIF destinatário|numeric|9|Não|
|isVaspExpresso|É Serviço Expresso|boolean||Sim|
|serviceType|Tipo de Serviço expresso. *Verifique com o seu comercial os tipos de serviço que tem disponíveis*<details><summary>Ver detalhes</summary>Cada cliente, por contrato, pode ter vários tipos de serviço de entrega com a VaspExpresso (por exemplo, VASP24, VASPPAL, VMADAR, etc). Existe um tipo de serviço, configurado como o pré-definido, que é aplicado a todas as encomendas na ausência de informação específca, mas no caso de desejar usar tipos de serviço diferentes, deverá indicar qual o tipo de serviço a usar nessa encomenda neste campo.</details>|string|50|Não|
|agentCode|Cód Agente<details><summary>Ver detalhes</summary>Quando o tipo de serviço é VB2K (entrega num ponto Kios), é preciso que nos indiquem qual o código do ponto Kios onde a mercadoria deve ser entregue. Tipicamente, o vosso cliente quando encomenda no site, escolhe o ponto onde pretende efetuar o levantamento da mercadoria, e com base no ponto escolhido indicam o código. Através da API têm forma de obter a lista de pontos Kios disponíveis a qualquer altura (deverão ter sempre a lista atualizada, pois existem pontos novos a entrarem e outros a saírem).</details>|string|50|Não|
|isUrgent|Urgente<details><summary>Ver detalhes</summary>Serviço específico, e apenas para ser usado se fizer parte do contrato. Tem timings de execução diferentes. *Por favor valide com o seu comercial*.</details>|boolean||Não|
|priceToCharge|Preço a cobrar <details><summary>Ver detalhes</summary>Se for serviço a cobrar. Ou seja, na entrega se tiver de ser cobrado um valor ao destinatário é necessário indicar qual é esse valor neste campo.</details>|decimal||Não|
|date|Data pretendida de envio <details><summary>Ver detalhes</summary>Data pretendida para a entrega. A menos que esteja contrato datas de entrega especificas, este campo não deverão ser usado.</details>|data||Não|
|deliveryNotes|Notas de envio <details><summary>Ver detalhes</summary>Instruções especificas para a entrega. São instruções que são passadas ao distribuidor que efetua a entrega, e que consta na etiqueta Vasp Expresso.</details>|string|255|Não|
|expeditionNotes|Notas para expedição <details><summary>Ver detalhes</summary>o	Instruções especificas para a expedição. São instruções passadas para o armazém.<details>|string|255|Não|
|items|lista de produtos da encomenda|||Sim|

Artigos da encomenda
|Campo|Descrição|Tipo|Tamanho|Obrigatório|
|-|-|-|-|-|
|Code|Cód. artigo (SKU)|string|50|Sim|
|Quantity|Quantidade|numeric|1-9999|Sim|
|Name|Nome do artigo|string|100|Não|
|EAN|Cod. EAN|string|100|Não|
|CustomLabel|Objecto json com:<br/>Campos a usar na impressão de uma etiqueta adicional<br/>para cada volume<br/>Exemplo:`{"age":"adulto","name":"Boris","message":"És o meu melhor acordar"}`|object||Não|
:::
### Output
:::    success
**OK : 200**
Encomenda : 
|Campo|Descrição|Tipo|
|-|-|-|
|orderId|Id de base de dados|numeric|
|orderNumber|Numero de encomenda|numeric|
|orderStatus|Estado da criação de encomenda:<br/>- `FullyCreated`<br/>- `PartiallyCreated`<br/>- `NotCreated`|string|
|orderItems|Lista de estado dos artigos||

Linha de Encomenda : 
|Campo|Descrição|Tipo|
|-|-|-|
|success|volume foi criado com sucesso|boolean|
|code|Cod. Artigo|string|
|quantity|Quantidade|string|
|CustomLabel|Objecto json com:<br/>Campos a usar na impressão de uma etiqueta adicional<br/>para cada volume<br/>Exemplo:`{"age":"adulto","name":"Boris","message":"És o meu melhor acordar"}`|object|
|errorMessage|Mensagem de erro (Se ocorrer)|string|
:::

:::warning
**Bad Request : 400**
Formato da mensagem inválida ou parametros inválidos.

|Campo|Descrição|Exemplo|
|-|-|-|
|errors|lista de erros por campo|`{ "OrderNumber": [ "O Numero Encomenda é obrigatório." ] }`|
|status|Status HTTP|400|
:::


:::warning
**Unauthorized : 401**
Token de autorização invalido ou expirado.
:::


### Código Exemplo
#### C#
```csharp=
var client = new RestClient("http://vasp360api-dev.vaspexpresso.local/order");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6ImRzaWRlc2Vudm9sdmltZW50b0B2YXNwLnB0IiwiSXNWYXNwRXhwcmVzc28iOiJUcnVlIiwiV21zRW50aXR5SWQiOiIxMTI2NzYiLCJEZWZhdWx0U2VydmljZVR5cGVJZCI6IjkzIiwiV21zQ2xpZW50T3JkZXJEb2NJZCI6IjUyIiwiV21zV2FyZWhvdXNlSWQiOiIxNiIsIkRtc0NsaWVudElkIjoiMTciLCJVc2VyR3JvdXBJZCI6IjczIiwiQ2xpZW50UHJlZml4Q29kZSI6IkFBQSIsIm5iZiI6MTYyMDgxNDY3NSwiZXhwIjoxNjIwODIxODc1LCJpYXQiOjE2MjA4MTQ2NzV9.gO4tG88-eK7cU1zb54YeHzAfaT3GQcuCeSvPH-4wc34");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\r\n  \"orderNumber\": \"teste-ab\",\r\n  \"isOrderNumberUnique\": null,\r\n  \"orderNumberAddPrefix\": null,\r\n  \"receiverName\": \"ReceiverName test\",\r\n  \"receiverEmail\": \"ReceiverEmail@mail.com\",\r\n  \"receiverAddress\": \"ReceiverAddress\",\r\n  \"receiverPostalCode\": \"6000-321\",\r\n  \"receiverLocality\": \"Castelo Branco\",\r\n  \"receiverPhone\": \"213456789\",\r\n  \"receiverVAT\": \"283298251\",\r\n  \"isVaspExpresso\": false,\r\n  \"serviceType\": \"VASP24\",\r\n  \"agentCode\": \"0000\",\r\n  \"isUrgent\": true,\r\n  \"priceToCharge\": 5,\r\n  \"date\": \"2021-05-04T00:00:00\",\r\n  \"deliveryNotes\": \"DeliveryNotes\",\r\n  \"expeditionNotes\": \"ExpeditionNotes\",\r\n  \"items\": [\r\n    {\r\n      \"code\": \"HH-0007\",\r\n      \"quantity\": 15,\r\n      \"name\": null,\r\n      \"ean\": null\r\n    },\r\n    {\r\n      \"code\": \"HH-0008\",\r\n      \"quantity\": 1,\r\n      \"name\": null,\r\n      \"ean\": null\r\n    }\r\n  ]\r\n}",  ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
```
#### Java
```java=
Unirest.setTimeouts(0, 0);
HttpResponse<String> response = Unirest.post("http://vasp360api-dev.vaspexpresso.local/order")
  .header("Authorization", "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6ImRzaWRlc2Vudm9sdmltZW50b0B2YXNwLnB0IiwiSXNWYXNwRXhwcmVzc28iOiJUcnVlIiwiV21zRW50aXR5SWQiOiIxMTI2NzYiLCJEZWZhdWx0U2VydmljZVR5cGVJZCI6IjkzIiwiV21zQ2xpZW50T3JkZXJEb2NJZCI6IjUyIiwiV21zV2FyZWhvdXNlSWQiOiIxNiIsIkRtc0NsaWVudElkIjoiMTciLCJVc2VyR3JvdXBJZCI6IjczIiwiQ2xpZW50UHJlZml4Q29kZSI6IkFBQSIsIm5iZiI6MTYyMDgxNDY3NSwiZXhwIjoxNjIwODIxODc1LCJpYXQiOjE2MjA4MTQ2NzV9.gO4tG88-eK7cU1zb54YeHzAfaT3GQcuCeSvPH-4wc34")
  .header("Content-Type", "application/json")
  .body("{\r\n  \"orderNumber\": \"teste-ab\",\r\n  \"isOrderNumberUnique\": null,\r\n  \"orderNumberAddPrefix\": null,\r\n  \"receiverName\": \"ReceiverName test\",\r\n  \"receiverEmail\": \"ReceiverEmail@mail.com\",\r\n  \"receiverAddress\": \"ReceiverAddress\",\r\n  \"receiverPostalCode\": \"6000-321\",\r\n  \"receiverLocality\": \"Castelo Branco\",\r\n  \"receiverPhone\": \"213456789\",\r\n  \"receiverVAT\": \"283298251\",\r\n  \"isVaspExpresso\": false,\r\n  \"serviceType\": \"VASP24\",\r\n  \"agentCode\": \"0000\",\r\n  \"isUrgent\": true,\r\n  \"priceToCharge\": 5,\r\n  \"date\": \"2021-05-04T00:00:00\",\r\n  \"deliveryNotes\": \"DeliveryNotes\",\r\n  \"expeditionNotes\": \"ExpeditionNotes\",\r\n  \"items\": [\r\n    {\r\n      \"code\": \"HH-0007\",\r\n      \"quantity\": 15,\r\n      \"name\": null,\r\n      \"ean\": null\r\n    },\r\n    {\r\n      \"code\": \"HH-0008\",\r\n      \"quantity\": 1,\r\n      \"name\": null,\r\n      \"ean\": null\r\n    }\r\n  ]\r\n}")
  .asString();

```
#### Javascript
```javascript=
var myHeaders = new Headers();
myHeaders.append("Authorization", "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6ImRzaWRlc2Vudm9sdmltZW50b0B2YXNwLnB0IiwiSXNWYXNwRXhwcmVzc28iOiJUcnVlIiwiV21zRW50aXR5SWQiOiIxMTI2NzYiLCJEZWZhdWx0U2VydmljZVR5cGVJZCI6IjkzIiwiV21zQ2xpZW50T3JkZXJEb2NJZCI6IjUyIiwiV21zV2FyZWhvdXNlSWQiOiIxNiIsIkRtc0NsaWVudElkIjoiMTciLCJVc2VyR3JvdXBJZCI6IjczIiwiQ2xpZW50UHJlZml4Q29kZSI6IkFBQSIsIm5iZiI6MTYyMDgxNDY3NSwiZXhwIjoxNjIwODIxODc1LCJpYXQiOjE2MjA4MTQ2NzV9.gO4tG88-eK7cU1zb54YeHzAfaT3GQcuCeSvPH-4wc34");
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify({
  "orderNumber": "teste-ab",
  "isOrderNumberUnique": null,
  "orderNumberAddPrefix": null,
  "receiverName": "ReceiverName test",
  "receiverEmail": "ReceiverEmail@mail.com",
  "receiverAddress": "ReceiverAddress",
  "receiverPostalCode": "6000-321",
  "receiverLocality": "Castelo Branco",
  "receiverPhone": "213456789",
  "receiverVAT": "283298251",
  "isVaspExpresso": false,
  "serviceType": "VASP24",
  "agentCode": "0000",
  "isUrgent": true,
  "priceToCharge": 5,
  "date": "2021-05-04T00:00:00",
  "deliveryNotes": "DeliveryNotes",
  "expeditionNotes": "ExpeditionNotes",
  "items": [
    {
      "code": "HH-0007",
      "quantity": 15,
      "name": null,
      "ean": null
    },
    {
      "code": "HH-0008",
      "quantity": 1,
      "name": null,
      "ean": null
    }
  ]
});

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("http://vasp360api-dev.vaspexpresso.local/order", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

## Listar Encomendas
### Input
:::info
`GET /order`
**Campos de paginação:**
Estes campos são usados apenas para a paginação. Nenhum deles é obrigatório, ou seja, se não preenchidos, são devolvidos todos os registos.
|Campo|Descrição|Tipo|Obrigatório|
|-|-|-|-|
|start|Numero da linha de partida. Por defeito tem valor `0`|numeric|Não|
|length|Tamanho da página (numero de registos a mostrar). Por defeito tem valor `2147483647`|numeric|Não|
|sortField|Nome do campo a ordenar|string|Não|
|sortDirection|Direção da ordenação. Pode ser `ASC` ou `DESC`|string|Não|

**Campos de filtragem:**
Campos usados para filtrar os resultados. Apenas os campos preenchidos são considerados na filtragem.
|Campo|Descrição|Tipo|Obrigatório|Opções|
|-|-|-|-|-|
|orderId|Id de encomenda|numeric|Não|
|statusId|Estado da encomenda|numeric|Não|<table> <tr><th>Valor</th><th>Descrição</th></tr><tr><td>1 </td><td>Registado</td></tr><tr><td>2 </td><td>Pendente</td></tr><tr><td>3 </td><td>Em produção</td></tr><tr><td>4 </td><td>Produzido</td></tr><tr><td>5 </td><td>Produzido parcialmente</td></tr><tr><td>6 </td><td>Em trânsito</td></tr><tr><td>7 </td><td>Encomenda entregue</td></tr><tr><td>8 </td><td>Incidência</td></tr><tr><td>9 </td><td>Enc. Cancelada</td></tr><tr><td>10</td><td>Devolvida</td></tr><tr><td>11</td><td>Encomenda Cancelada</td></tr></table>|
|orderNumber|Numero de encomenda|string|Não|
|sku|Codigo do produto|string|Não|
:::
### Output
:::    success
**OK : 200**
Campos de paginação : 
|Campo|Descrição|Tipo|
|-|-|-|
|start|Numero da linha de partida|numeric|
|length|Tamanho da página (numero de registos a mostrar)|numeric|
|total|numero total de registos|numeric|
|rows|Listagem de registos||

Campos dos registos `rows` :
|Campo|Descrição|Tipo|
|-|-|-|
|orderId|Id de encomenda|numeric|
|orderNumber|Numero de encomenda|string|
|statusId|Id do estado|numeric|
|statusName|Descrição do estado|string|


:::
:::warning
**Bad Request : 400**
Formato da mensagem inválida ou parametros inválidos.
|Campo|Descrição|Exemplo|
|-|-|-|
|errors|lista de erros por campo|`{ "OrderNumber": [ "O Numero Encomenda é obrigatório." ] }`|
|status|Status HTTP|400|
:::


:::warning
**Unauthorized : 401**
Token de autorização invalido ou expirado.
:::
### Código Exemplo
#### C#
```csharp=
var client = new RestClient("http://vasp360api-dev.vaspexpresso.local/order?start=5&length=5&statusid=1");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6ImRzaWRlc2Vudm9sdmltZW50b0B2YXNwLnB0IiwiSXNWYXNwRXhwcmVzc28iOiJUcnVlIiwiV21zRW50aXR5SWQiOiIxMTI2NzYiLCJEZWZhdWx0U2VydmljZVR5cGVJZCI6IjkzIiwiV21zQ2xpZW50T3JkZXJEb2NJZCI6IjUyIiwiV21zV2FyZWhvdXNlSWQiOiIxNiIsIkRtc0NsaWVudElkIjoiMTciLCJVc2VyR3JvdXBJZCI6IjczIiwiQ2xpZW50UHJlZml4Q29kZSI6IkFBQSIsIm5iZiI6MTYyMDgzNjQ4OSwiZXhwIjoxNjIwODQzNjg5LCJpYXQiOjE2MjA4MzY0ODl9.m0GM-6uIwIJMTv7S4qaL0QgNgq3sYTGt74cinyOiYxw");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
```
#### java
```java=
Unirest.setTimeouts(0, 0);
HttpResponse<String> response = Unirest.get("http://vasp360api-dev.vaspexpresso.local/order?start=5&length=5&statusid=1")
  .header("Authorization", "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6ImRzaWRlc2Vudm9sdmltZW50b0B2YXNwLnB0IiwiSXNWYXNwRXhwcmVzc28iOiJUcnVlIiwiV21zRW50aXR5SWQiOiIxMTI2NzYiLCJEZWZhdWx0U2VydmljZVR5cGVJZCI6IjkzIiwiV21zQ2xpZW50T3JkZXJEb2NJZCI6IjUyIiwiV21zV2FyZWhvdXNlSWQiOiIxNiIsIkRtc0NsaWVudElkIjoiMTciLCJVc2VyR3JvdXBJZCI6IjczIiwiQ2xpZW50UHJlZml4Q29kZSI6IkFBQSIsIm5iZiI6MTYyMDgzNjQ4OSwiZXhwIjoxNjIwODQzNjg5LCJpYXQiOjE2MjA4MzY0ODl9.m0GM-6uIwIJMTv7S4qaL0QgNgq3sYTGt74cinyOiYxw")
  .asString();

```
#### javascript
```javascript=
var myHeaders = new Headers();
myHeaders.append("Authorization", "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6ImRzaWRlc2Vudm9sdmltZW50b0B2YXNwLnB0IiwiSXNWYXNwRXhwcmVzc28iOiJUcnVlIiwiV21zRW50aXR5SWQiOiIxMTI2NzYiLCJEZWZhdWx0U2VydmljZVR5cGVJZCI6IjkzIiwiV21zQ2xpZW50T3JkZXJEb2NJZCI6IjUyIiwiV21zV2FyZWhvdXNlSWQiOiIxNiIsIkRtc0NsaWVudElkIjoiMTciLCJVc2VyR3JvdXBJZCI6IjczIiwiQ2xpZW50UHJlZml4Q29kZSI6IkFBQSIsIm5iZiI6MTYyMDgzNjQ4OSwiZXhwIjoxNjIwODQzNjg5LCJpYXQiOjE2MjA4MzY0ODl9.m0GM-6uIwIJMTv7S4qaL0QgNgq3sYTGt74cinyOiYxw");

var requestOptions = {
  method: 'GET',
  headers: myHeaders,
  redirect: 'follow'
};

fetch("http://vasp360api-dev.vaspexpresso.local/order?start=5&length=5&statusid=1", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

## Cancelar Encomenda
### Input
Anular encomenda
:::info
`DELETE /order`
|Campo|Tipo|Obrigatório|
|-|-|-|
|orderId|numeric|Não|
|orderNumber|string|Não|
Um dos campos tem de ser preenchido
:::
### Output
:::    success
**OK : 200**
|Campo|Descrição|Tipo|
|-|-|-|
|orderId|Id de encomenda|number|
|orderNumber|Numero de encomenda|string|
|orderStatus|Estados possiveis :<br/>- `Canceled`<br/>- `NotCanceled`|string|
:::
:::warning
**Bad Request : 400**
Formato da mensagem inválida ou parametros inválidos.

|Campo|Descrição|Exemplo|
|-|-|-|
|errors|lista de erros por campo|`{ "OrderNumber": [ "O Numero Encomenda é obrigatório." ] }`|
|status|Status HTTP|400|
:::


:::warning
**Unauthorized : 401**
Token de autorização invalido ou expirado.
:::
### Código Exemplo
#### C#
```csharp=
var client = new RestClient("http://vasp360api-dev.vaspexpresso.local/order");
client.Timeout = -1;
var request = new RestRequest(Method.DELETE);
request.AddHeader("Authorization", "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6ImRzaWRlc2Vudm9sdmltZW50b0B2YXNwLnB0IiwiSXNWYXNwRXhwcmVzc28iOiJUcnVlIiwiV21zRW50aXR5SWQiOiIxMTI2NzYiLCJEZWZhdWx0U2VydmljZVR5cGVJZCI6IjkzIiwiV21zQ2xpZW50T3JkZXJEb2NJZCI6IjUyIiwiV21zV2FyZWhvdXNlSWQiOiIxNiIsIkRtc0NsaWVudElkIjoiMTciLCJVc2VyR3JvdXBJZCI6IjczIiwiQ2xpZW50UHJlZml4Q29kZSI6IkFBQSIsIm5iZiI6MTYyMDg0MDQwNywiZXhwIjoxNjIwODQ3NjA3LCJpYXQiOjE2MjA4NDA0MDd9.JQjhVEvuRzRHJ294-Lg9iERDLjz7ACJd88QyanYdG9A");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\r\n  \"orderNumber\": \"string\"\r\n}",  ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
```
#### Java
```java=
Unirest.setTimeouts(0, 0);
HttpResponse<String> response = Unirest.delete("http://vasp360api-dev.vaspexpresso.local/order")
  .header("Authorization", "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6ImRzaWRlc2Vudm9sdmltZW50b0B2YXNwLnB0IiwiSXNWYXNwRXhwcmVzc28iOiJUcnVlIiwiV21zRW50aXR5SWQiOiIxMTI2NzYiLCJEZWZhdWx0U2VydmljZVR5cGVJZCI6IjkzIiwiV21zQ2xpZW50T3JkZXJEb2NJZCI6IjUyIiwiV21zV2FyZWhvdXNlSWQiOiIxNiIsIkRtc0NsaWVudElkIjoiMTciLCJVc2VyR3JvdXBJZCI6IjczIiwiQ2xpZW50UHJlZml4Q29kZSI6IkFBQSIsIm5iZiI6MTYyMDg0MDQwNywiZXhwIjoxNjIwODQ3NjA3LCJpYXQiOjE2MjA4NDA0MDd9.JQjhVEvuRzRHJ294-Lg9iERDLjz7ACJd88QyanYdG9A")
  .header("Content-Type", "application/json")
  .body("{\r\n  \"orderNumber\": \"string\"\r\n}")
  .asString();

```
#### Javascript
```javascript=
var myHeaders = new Headers();
myHeaders.append("Authorization", "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6ImRzaWRlc2Vudm9sdmltZW50b0B2YXNwLnB0IiwiSXNWYXNwRXhwcmVzc28iOiJUcnVlIiwiV21zRW50aXR5SWQiOiIxMTI2NzYiLCJEZWZhdWx0U2VydmljZVR5cGVJZCI6IjkzIiwiV21zQ2xpZW50T3JkZXJEb2NJZCI6IjUyIiwiV21zV2FyZWhvdXNlSWQiOiIxNiIsIkRtc0NsaWVudElkIjoiMTciLCJVc2VyR3JvdXBJZCI6IjczIiwiQ2xpZW50UHJlZml4Q29kZSI6IkFBQSIsIm5iZiI6MTYyMDg0MDQwNywiZXhwIjoxNjIwODQ3NjA3LCJpYXQiOjE2MjA4NDA0MDd9.JQjhVEvuRzRHJ294-Lg9iERDLjz7ACJd88QyanYdG9A");
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify({
  "orderNumber": "string"
});

var requestOptions = {
  method: 'DELETE',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("http://vasp360api-dev.vaspexpresso.local/order", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

# Produtos
## Criar Produto
### Input

:::info
`POST /Product`
|Campo|Descrição|Tipo|Tamanho|Obrigatório|
|-|-|-|-|-|
|sku|Código|string|30|Sim|
|skuean|Código de Barras|numeric|10|Não|
|name|Designação|string|100|Sim|
|unit|Unidade : <br/>- `CX`<br/>- `ENV`<br/>- `KG`<br/>- `MIL`<br/>- `UN`|string|3|Sim|
|netWeight|Peso Líquido (g)|decimal||Não|
|grossWeight|Peso Bruto (g)|decimal||Não|
|requiresBatch|Controlo de Lote <details><summary>Ver detalhes</summary>Quando é necessário controlar o lote a que pertence cada expedição de produto, esta opção deverá ser ativada</details>|boolean||Não|
|requiresValidityDate|Controlo de Validade <details><summary>Ver detalhes</summary>Quando é necessário controlar a validade de produtos em armazém (tipicamente usado para bens perecíveis)</details>|boolean||Não|
|isActive|Activo <details><summary>Ver detalhes</summary>Permite ativar ou desativar um produto. Só é possível efetuar expedição de produtos ativos (e que tenham stock)</details>|boolean||Não|
|productGroupCode|Cod. Grupo de produto|string|10|Não|

Lista de Opções para ProdctGroupCode
|Codigo|Descrição|
|-|-|
|CA|CADERNETA|
|BI|BIJUTARIA|
|HI|ARTIGO HIGENE|
|MP|MAPA/PLANTA|
|PI|PILHA|
|CT|CARTÃO DE PRÉ-PAGAMENTO|
|BR|BRINQUEDO/JOGO|
|CP|CAPA|
|CD|CD/CASSETE MUSICAL|
|CO|COSMÉTICA|
|PO|POSTAIS|
|VR|VESTUÁRIO E ACESSÓRIO|
|PK|PACK|
|UT|UTENSÍLIO|
|LV|LIVRO|
|CR|CROMO|
|SN|PASTILHA|
|FA|FASCÍCULO|
|FT|ARTIGO FOTOGRAFIA|
|RV|REVISTA|
|NC|OUTROS|
|VC|VIDEO/CDROM/DVD|
|JR|JORNAL|
|FI|FILATELIA/NUMESMÁTICA|
|AL|ALIMENTARES|
|AF|ARTIGO FUMADOR|
|COM|COMUNICAÇÕES|
|EXP|EXPOSIÇÃO|
|INF|INFANTO/JUVENIL|
|PP|ARTIGO PAPELARIA|
|AGE|ARTIGOS GERAIS ESCRITÓRIO|
|ARC|ARQUIVO E CLASSIFICAÇÃO|
|CIO|CONSUMÍVEIS INFORMÁTICA E OUTROS|
|EC|ESCRITA E CORREÇÃO|
|PAT|PAPÉIS E TRANSFORMADOS|
|TAB|TABACOS|
|LOT|LOTARIAS|
|FES|ARTIGOS DE FESTA|
|INT|MATERIAIS DE REPARAÇÃO E CONSERVAÇÃO DE INSTALAÇÕE|
|MEM|MATERIAL DE EMBALAGEM|
|ECN|ECONOMATO|
|FAR|MATERIAL FARMÁCIA|
|BEM|BOLSAS E MALAS|
|ESC|ESCRITA E CORREÇÃO|
|THP|Tinteiros - HP|
|TEP|Tinteiros - Epson|
|TCA|Tinteiros - Canon|
|TBR|Tinteiros - Brother|
|MO|Mobiliário Comercial|
|TEX|Produtos de Impressão - Expositores|
|TGE|Produtos de Impressão - Gestetner|
|TOU|Produtos de Impressão - Outros|
|ALM|ALMOFADA|
|MI|MATERIAL DE ILUMINAÇÃO |
|PQ|PROTECÇÃO QUIMICA|
|PL|Protecção Lombar|
|CAR|Carimbo|
|EPI|EQUIP. PROTECÇÃO INDIVIDUAL|
|PEC|Produtos Economato Corporate|
|MED|Medicamento|
|PAY|Produtos EPAY|
|EEG|ENTRETENIMENTO/GIFTS|
|ECL|ESCOLAR|
|TNT|TINTEIROS|
|AUT|ARTIGOS AUTOMÓVEL|
:::
### Output
:::    success
**OK : 200**	
Produto criado com sucesso : 
|Campo|Descrição|Tipo|
|-|-|-|
|sku|Código|string|
|skuean|Código de Barras|numeric|
|name|Designação|string|
|unit|Unidade : <br/>- `CX`<br/>- `ENV`<br/>- `KG`<br/>- `MIL`<br/>- `UN`|string|
|netWeight|Peso Líquido (g)|decimal|
|grossWeight|Peso Bruto (g)|decimal|
|requiresBatch|Controlo de Lote|boolean|
|requiresValidityDate|Controlo de Validade|boolean|
|isActive|Activo|boolean|
|productGroupCode|Cod. Grupo de produto|string|
:::
:::warning
**Bad Request : 400**
Formato da mensagem inválida ou parametros inválidos.

|Campo|Descrição|Exemplo|
|-|-|-|
|errors|lista de erros por campo|`{ "Skuean": ["O 'Código de Barras' tem de ser numérico"] ] }`|
|status|Status HTTP|400|
:::

:::warning
**Bad Request : 409**
Se já existe um produto com o SKU preenchido.

|Campo|Descrição|Exemplo|
|-|-|-|
|errors|lista de erros por campo|`{ "Error": ["O objecto 'AAA-teste' já existe"] }`|
|status|Status HTTP|409|
:::


:::warning
**Unauthorized : 401**
Token de autorização invalido ou expirado.
:::
### Código Exemplo
#### C#
```csharp=
var client = new RestClient("http://vasp360api-dev.vaspexpresso.local/product");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6ImRzaWRlc2Vudm9sdmltZW50b0B2YXNwLnB0IiwiSXNWYXNwRXhwcmVzc28iOiJUcnVlIiwiV21zRW50aXR5SWQiOiIxMTI2NzYiLCJEZWZhdWx0U2VydmljZVR5cGVJZCI6IjkzIiwiV21zQ2xpZW50T3JkZXJEb2NJZCI6IjUyIiwiV21zV2FyZWhvdXNlSWQiOiIxNiIsIkRtc0NsaWVudElkIjoiMTciLCJVc2VyR3JvdXBJZCI6IjczIiwiQ2xpZW50UHJlZml4Q29kZSI6IkFBQSIsIm5iZiI6MTYyMDg0NTQyNywiZXhwIjoxNjIwODUyNjI3LCJpYXQiOjE2MjA4NDU0Mjd9.5dOk6mEzvUZ3G5DyfUSmg-4GETcrMtoEuBaUi-jZejA");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\r\n  \"skuean\": \"123456789\",\r\n  \"name\": \"teste\",\r\n  \"unit\": \"UN\",\r\n  \"netWeight\": 0,\r\n  \"grossWeight\": 0,\r\n  \"requiresBatch\": true,\r\n  \"requiresValidityDate\": true,\r\n  \"isActive\": true,\r\n  \"productGroupCode\": \"string\",\r\n  \"sku\": \"teste3\"\r\n}",  ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
```
#### Java
```java=
Unirest.setTimeouts(0, 0);
HttpResponse<String> response = Unirest.post("http://vasp360api-dev.vaspexpresso.local/product")
  .header("Authorization", "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6ImRzaWRlc2Vudm9sdmltZW50b0B2YXNwLnB0IiwiSXNWYXNwRXhwcmVzc28iOiJUcnVlIiwiV21zRW50aXR5SWQiOiIxMTI2NzYiLCJEZWZhdWx0U2VydmljZVR5cGVJZCI6IjkzIiwiV21zQ2xpZW50T3JkZXJEb2NJZCI6IjUyIiwiV21zV2FyZWhvdXNlSWQiOiIxNiIsIkRtc0NsaWVudElkIjoiMTciLCJVc2VyR3JvdXBJZCI6IjczIiwiQ2xpZW50UHJlZml4Q29kZSI6IkFBQSIsIm5iZiI6MTYyMDg0NTQyNywiZXhwIjoxNjIwODUyNjI3LCJpYXQiOjE2MjA4NDU0Mjd9.5dOk6mEzvUZ3G5DyfUSmg-4GETcrMtoEuBaUi-jZejA")
  .header("Content-Type", "application/json")
  .body("{\r\n  \"skuean\": \"123456789\",\r\n  \"name\": \"teste\",\r\n  \"unit\": \"UN\",\r\n  \"netWeight\": 0,\r\n  \"grossWeight\": 0,\r\n  \"requiresBatch\": true,\r\n  \"requiresValidityDate\": true,\r\n  \"isActive\": true,\r\n  \"productGroupCode\": \"string\",\r\n  \"sku\": \"teste3\"\r\n}")
  .asString();

```
#### Javascript
```javascript=
var myHeaders = new Headers();
myHeaders.append("Authorization", "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6ImRzaWRlc2Vudm9sdmltZW50b0B2YXNwLnB0IiwiSXNWYXNwRXhwcmVzc28iOiJUcnVlIiwiV21zRW50aXR5SWQiOiIxMTI2NzYiLCJEZWZhdWx0U2VydmljZVR5cGVJZCI6IjkzIiwiV21zQ2xpZW50T3JkZXJEb2NJZCI6IjUyIiwiV21zV2FyZWhvdXNlSWQiOiIxNiIsIkRtc0NsaWVudElkIjoiMTciLCJVc2VyR3JvdXBJZCI6IjczIiwiQ2xpZW50UHJlZml4Q29kZSI6IkFBQSIsIm5iZiI6MTYyMDg0NTQyNywiZXhwIjoxNjIwODUyNjI3LCJpYXQiOjE2MjA4NDU0Mjd9.5dOk6mEzvUZ3G5DyfUSmg-4GETcrMtoEuBaUi-jZejA");
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify({
  "skuean": "123456789",
  "name": "teste",
  "unit": "UN",
  "netWeight": 0,
  "grossWeight": 0,
  "requiresBatch": true,
  "requiresValidityDate": true,
  "isActive": true,
  "productGroupCode": "string",
  "sku": "teste3"
});

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("http://vasp360api-dev.vaspexpresso.local/product", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```
## Listar Produtos
### Input
:::info
`GET /product`
**Campos de paginação:**
Estes campos são usados apenas para a paginação. Nenhum deles é obrigatório, ou seja, se não preenchidos, são devolvidos todos os registos.
|Campo|Descrição|Tipo|Obrigatório|
|-|-|-|-|
|start|Numero da linha de partida. Por defeito tem valor `0`|numeric|Não|
|length|Tamanho da página (numero de registos a mostrar). Por defeito tem valor `2147483647`|numeric|Não|
|sortField|Nome do campo a ordenar|string|Não|
|sortDirection|Direção da ordenação. Pode ser `ASC` ou `DESC`|string|Não|

**Campos de filtragem:**
Campos usados para filtrar os resultados. Apenas os campos preenchidos são considerados na filtragem.
|Campo|Descrição|Tipo|Obrigatório|Opções|
|-|-|-|-|-|
|sku|Código do produto|string|Não|
|skuean|Código de Barras|numeric|Não|
|name|Designação do produto|string|Não|
|minimumStock|Apenas considera registos com o stock minimo definido neste campo.|numeric|Não|
|IsActive|Produtos activos ou desativos.|boolean|Não|
:::
### Output
:::    success
**OK : 200**
Campos de paginação : 
|Campo|Descrição|Tipo|
|-|-|-|
|start|Numero da linha de partida|numeric|
|length|Tamanho da página (numero de registos a mostrar)|numeric|
|total|numero total de registos|numeric|
|rows|Listagem de registos||

Campos dos registos `rows` :
|Campo|Descrição|Tipo|
|-|-|-|
|sku|Código|string|
|skuean|Código de Barras|numeric|
|name|Designação|string|
|unit|Unidade de Venda||
|netWeight|Peso Líquido (g)||
|grossWeight|Peso Bruto (g)|decimal|
|requiresBatch|Controlo de Lote|boolean|
|requiresValidityDate|Controlo de Validade|boolean|
|isActive|Activo|boolean|
|productGroupCode|Grupo do Artigo|string|
:::
:::warning
**Bad Request : 400**
Formato da mensagem inválida ou parametros inválidos.
|Campo|Descrição|Exemplo|
|-|-|-|
|errors|lista de erros por campo|`{ "OrderNumber": [ "O Numero Encomenda é obrigatório." ] }`|
|status|Status HTTP|400|
:::


:::warning
**Unauthorized : 401**
Token de autorização invalido ou expirado.
:::
### Código Exemplo
#### C#
```csharp=
var client = new RestClient("http://vasp360api-dev.vaspexpresso.local/product?start=5&length=5&sku=2");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6ImRzaWRlc2Vudm9sdmltZW50b0B2YXNwLnB0IiwiSXNWYXNwRXhwcmVzc28iOiJUcnVlIiwiV21zRW50aXR5SWQiOiIxMTI2NzYiLCJEZWZhdWx0U2VydmljZVR5cGVJZCI6IjkzIiwiV21zQ2xpZW50T3JkZXJEb2NJZCI6IjUyIiwiV21zV2FyZWhvdXNlSWQiOiIxNiIsIkRtc0NsaWVudElkIjoiMTciLCJVc2VyR3JvdXBJZCI6IjczIiwiQ2xpZW50UHJlZml4Q29kZSI6IkFBQSIsIm5iZiI6MTYyMDg0NTQyNywiZXhwIjoxNjIwODUyNjI3LCJpYXQiOjE2MjA4NDU0Mjd9.5dOk6mEzvUZ3G5DyfUSmg-4GETcrMtoEuBaUi-jZejA");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
```
#### Java
```java=
Unirest.setTimeouts(0, 0);
HttpResponse<String> response = Unirest.get("http://vasp360api-dev.vaspexpresso.local/product?start=5&length=5&sku=2")
  .header("Authorization", "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6ImRzaWRlc2Vudm9sdmltZW50b0B2YXNwLnB0IiwiSXNWYXNwRXhwcmVzc28iOiJUcnVlIiwiV21zRW50aXR5SWQiOiIxMTI2NzYiLCJEZWZhdWx0U2VydmljZVR5cGVJZCI6IjkzIiwiV21zQ2xpZW50T3JkZXJEb2NJZCI6IjUyIiwiV21zV2FyZWhvdXNlSWQiOiIxNiIsIkRtc0NsaWVudElkIjoiMTciLCJVc2VyR3JvdXBJZCI6IjczIiwiQ2xpZW50UHJlZml4Q29kZSI6IkFBQSIsIm5iZiI6MTYyMDg0NTQyNywiZXhwIjoxNjIwODUyNjI3LCJpYXQiOjE2MjA4NDU0Mjd9.5dOk6mEzvUZ3G5DyfUSmg-4GETcrMtoEuBaUi-jZejA")
  .asString();

```
#### Javascript
```javascript=
var myHeaders = new Headers();
myHeaders.append("Authorization", "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6ImRzaWRlc2Vudm9sdmltZW50b0B2YXNwLnB0IiwiSXNWYXNwRXhwcmVzc28iOiJUcnVlIiwiV21zRW50aXR5SWQiOiIxMTI2NzYiLCJEZWZhdWx0U2VydmljZVR5cGVJZCI6IjkzIiwiV21zQ2xpZW50T3JkZXJEb2NJZCI6IjUyIiwiV21zV2FyZWhvdXNlSWQiOiIxNiIsIkRtc0NsaWVudElkIjoiMTciLCJVc2VyR3JvdXBJZCI6IjczIiwiQ2xpZW50UHJlZml4Q29kZSI6IkFBQSIsIm5iZiI6MTYyMDg0NTQyNywiZXhwIjoxNjIwODUyNjI3LCJpYXQiOjE2MjA4NDU0Mjd9.5dOk6mEzvUZ3G5DyfUSmg-4GETcrMtoEuBaUi-jZejA");

var requestOptions = {
  method: 'GET',
  headers: myHeaders,
  redirect: 'follow'
};

fetch("http://vasp360api-dev.vaspexpresso.local/product?start=5&length=5&sku=2", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```
## Alterar Produto
### Input

:::info
`PUT /Product/{sku}`
|Campo|Descrição|Tipo|Tamanho|Obrigatório|
|-|-|-|-|-|
|sku|Código|string|30|Sim|
|skuean|Código de Barras|numeric|10|Não|
|name|Designação|string|100|Sim|
|unit|Unidade : <br/>- `CX`<br/>- `ENV`<br/>- `KG`<br/>- `MIL`<br/>- `UN`|string|3|Sim|
|netWeight|Peso Líquido (g)|decimal||Não|
|grossWeight|Peso Bruto (g)|decimal||Não|
|requiresBatch|Controlo de Lote|boolean||Não|
|requiresValidityDate|Controlo de Validade|boolean||Não|
|isActive|Activo|boolean||Não|
|productGroupCode|Cod. Grupo de produto|string|10|Não|
:::
### Output
:::    success
**OK : 200**	
Produto criado com sucesso : 
|Campo|Descrição|Tipo|
|-|-|-|
|sku|Código|string|
|skuean|Código de Barras|numeric|
|name|Designação|string|
|unit|Unidade : <br/>- `CX`<br/>- `ENV`<br/>- `KG`<br/>- `MIL`<br/>- `UN`|string|
|netWeight|Peso Líquido (g)|decimal|
|grossWeight|Peso Bruto (g)|decimal|
|requiresBatch|Controlo de Lote|boolean|
|requiresValidityDate|Controlo de Validade|boolean|
|isActive|Activo|boolean|
|productGroupCode|Cod. Grupo de produto|string|
:::
:::warning
**Bad Request : 400**
Formato da mensagem inválida ou parametros inválidos.

|Campo|Descrição|Exemplo|
|-|-|-|
|errors|lista de erros por campo|`{ "Skuean": ["O 'Código de Barras' tem de ser numérico"] ] }`|
|status|Status HTTP|400|
:::

:::warning
**Bad Request : 409**
Se já existe um produto com o SKU preenchido.

|Campo|Descrição|Exemplo|
|-|-|-|
|errors|lista de erros por campo|`{ "Error": ["O objecto 'AAA-teste' já existe"] }`|
|status|Status HTTP|409|
:::


:::warning
**Unauthorized : 401**
Token de autorização invalido ou expirado.
:::
### Código Exemplo
#### C#
```csharp=
var client = new RestClient("http://vasp360api-dev.vaspexpresso.local/product/AAA-teste6");
client.Timeout = -1;
var request = new RestRequest(Method.PUT);
request.AddHeader("Authorization", "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6ImRzaWRlc2Vudm9sdmltZW50b0B2YXNwLnB0IiwiSXNWYXNwRXhwcmVzc28iOiJUcnVlIiwiV21zRW50aXR5SWQiOiIxMTI2NzYiLCJEZWZhdWx0U2VydmljZVR5cGVJZCI6IjkzIiwiV21zQ2xpZW50T3JkZXJEb2NJZCI6IjUyIiwiV21zV2FyZWhvdXNlSWQiOiIxNiIsIkRtc0NsaWVudElkIjoiMTciLCJVc2VyR3JvdXBJZCI6IjczIiwiQ2xpZW50UHJlZml4Q29kZSI6IkFBQSIsIm5iZiI6MTYyMDg0NTQyNywiZXhwIjoxNjIwODUyNjI3LCJpYXQiOjE2MjA4NDU0Mjd9.5dOk6mEzvUZ3G5DyfUSmg-4GETcrMtoEuBaUi-jZejA");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\r\n  \"skuean\": \"123456789\",\r\n  \"name\": \"teste\",\r\n  \"unit\": \"UN\",\r\n  \"netWeight\": 0,\r\n  \"grossWeight\": 0,\r\n  \"requiresBatch\": true,\r\n  \"requiresValidityDate\": true,\r\n  \"isActive\": true,\r\n  \"productGroupCode\": \"PI\"\r\n}",  ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
```
#### Java
```java=
Unirest.setTimeouts(0, 0);
HttpResponse<String> response = Unirest.put("http://vasp360api-dev.vaspexpresso.local/product/AAA-teste6")
  .header("Authorization", "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6ImRzaWRlc2Vudm9sdmltZW50b0B2YXNwLnB0IiwiSXNWYXNwRXhwcmVzc28iOiJUcnVlIiwiV21zRW50aXR5SWQiOiIxMTI2NzYiLCJEZWZhdWx0U2VydmljZVR5cGVJZCI6IjkzIiwiV21zQ2xpZW50T3JkZXJEb2NJZCI6IjUyIiwiV21zV2FyZWhvdXNlSWQiOiIxNiIsIkRtc0NsaWVudElkIjoiMTciLCJVc2VyR3JvdXBJZCI6IjczIiwiQ2xpZW50UHJlZml4Q29kZSI6IkFBQSIsIm5iZiI6MTYyMDg0NTQyNywiZXhwIjoxNjIwODUyNjI3LCJpYXQiOjE2MjA4NDU0Mjd9.5dOk6mEzvUZ3G5DyfUSmg-4GETcrMtoEuBaUi-jZejA")
  .header("Content-Type", "application/json")
  .body("{\r\n  \"skuean\": \"123456789\",\r\n  \"name\": \"teste\",\r\n  \"unit\": \"UN\",\r\n  \"netWeight\": 0,\r\n  \"grossWeight\": 0,\r\n  \"requiresBatch\": true,\r\n  \"requiresValidityDate\": true,\r\n  \"isActive\": true,\r\n  \"productGroupCode\": \"PI\"\r\n}")
  .asString();

```
#### Javascript
```javascript=
var myHeaders = new Headers();
myHeaders.append("Authorization", "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6ImRzaWRlc2Vudm9sdmltZW50b0B2YXNwLnB0IiwiSXNWYXNwRXhwcmVzc28iOiJUcnVlIiwiV21zRW50aXR5SWQiOiIxMTI2NzYiLCJEZWZhdWx0U2VydmljZVR5cGVJZCI6IjkzIiwiV21zQ2xpZW50T3JkZXJEb2NJZCI6IjUyIiwiV21zV2FyZWhvdXNlSWQiOiIxNiIsIkRtc0NsaWVudElkIjoiMTciLCJVc2VyR3JvdXBJZCI6IjczIiwiQ2xpZW50UHJlZml4Q29kZSI6IkFBQSIsIm5iZiI6MTYyMDg0NTQyNywiZXhwIjoxNjIwODUyNjI3LCJpYXQiOjE2MjA4NDU0Mjd9.5dOk6mEzvUZ3G5DyfUSmg-4GETcrMtoEuBaUi-jZejA");
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify({
  "skuean": "123456789",
  "name": "teste",
  "unit": "UN",
  "netWeight": 0,
  "grossWeight": 0,
  "requiresBatch": true,
  "requiresValidityDate": true,
  "isActive": true,
  "productGroupCode": "PI"
});

var requestOptions = {
  method: 'PUT',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("http://vasp360api-dev.vaspexpresso.local/product/AAA-teste6", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```