# 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)); ```