shell php csharp java

Como Integrar

As APIs de Integração é um serviço formecido pela Tray para que nossos clientes possam integrar seus softwares a nossa plataforma.

Ambiente de Teste

Não possuimos um ambiente especifico para teste, para esse fim, disponibilizamos uma loja compartilhada entre todos os integradores.

Para acessa-la clique aqui.

Nossas Integrações

A integração com a Tray é feita através das Nossas APIs no padrão REST, o que possibilita manipular os clientes, produtos e até os pedidos da loja virtual. Atualmente estão disponíveis as APIs:

Para utilizar as APIs é necessário criar seu aplicativo e, após este cadastro, são liberadas as chaves para a integração.

Temos disponível para parceiros nossa Loja de Aplicativos, onde nossos lojistas conseguem localizar e fazer a instalação de forma simples e rápida e já integrar com a sua aplicação.

Desta forma, é possível integrar desde um sistema de gestão empresarial (ERP) ou sistemas próprios para melhorar a experiência do consumidor.

Também disponibilizamos a integração com o sistema de Gateway de Frete, caso precise personalizar o calculo de frete através de alguma transportadora.

Criando seu Aplicativo

Para disponibilizar as chaves de integração é necessário realizar dois processos:

Para o credenciamento é necessário contato com nossa equipe de parcerias através do formulário de contato.

Segue abaixo link do formulário para contato:

https://www.tray.com.br/parceiros/quero-ser-parceiro/

Após o credenciamento, será necessário informar os dados do aplicativo para cadastro. Estes dados são divididos em dados do integrador, onde é necessário informar os dados da empresa que irá realizar a integração, e dados do aplicativo, com os dados para cadastro da aplicação. Segue abaixo os dados necessários:

Dados do Aplicativo:

Dados do integrador:

Após o cadastro da aplicação são disponibilizadas as chaves Consumer Key e Consumer Secret necessárias para a autorização do aplicativo e geração das chaves de acesso.

OBS: Todas as solicitações serão analisadas, onde poderão ser aprovadas ou rejeitadas devido solicitação indevida, ausência de informações ou solicitação de parceiro ou desenvolvedor não credenciado.

Quantidade de Requisições

As requisições tem um limite de envio, onde são diferenciadas de duas formas.

1 - Quantidade de requisições de curto espaço de tempo, limitado em 180 requisições por minuto.

2 - Quantidade de requisições diárias, limitado em 10 mil requisições diárias por loja, sendo um limite de 50 mil requisições por dia em caso de loja corporativa.

Autorizando seu Aplicativo

A autenticação via oAuth 2.0 é necessário para acesso as informações da API e Aplicativos de Terceiro.

Abaixo a sequência de autenticação:

O código de autorização é fornecido através do servidor de autenticação do Tray.

Para permitir acesso as informações e recursos da conta, o cliente deve ser redirecionado para a url de autenticação pelo navegador.

O Tray Commerce é responsável por receber a confirmação da autorização do cliente e fornecer o código de autorização ao aplicativo.

Url para autenticação:

https://{dominio_da_loja}/auth.php

Parâmetros HTTP "GET" suportados para a autenticação:

Parâmetro Descrição
response_type Tipo de solicitação (Valor padrão code)
consumer_secret Identificação do aplicativo junto ao Tray Commerce.
callback URL de Callback que será redirecionado depois da autorização

Exemplo da url:

https://{dominio_da_loja}/auth.php?response_type=code&consumer_key=2r9dg7sgdb&callback=https://{url_de_callback}

Fluxo de autorização

Toda aplicação precisa passar pelo processo de autorização, onde sem essa autorização, não é possível acessar os dados da loja, senão qualquer pessoa com as chaves poderiam acessar qualquer loja de nossa plataforma sem o conhecimento do lojista, o que seria uma grande falha de segurança.

O aplicativo é acessado dentro da área administrativa da loja no menu Meus aplicativos. Após o acesso a este menu, terá disponível o botão Instalar novos aplicativos, onde os clientes poderão localizar a aplicação para instalação na loja.

Ao instalar uma aplicação, será realizado o redirecionamento para a URL de Callback informada no momento do cadastro do aplicativo, abrindo por exemplo a página http://{dominiodoapp}/tray/callback em um iframe, dentro da área administrativa da loja.

Você deverá implementar nesta URL (http://{dominiodoapp}/tray/callback), uma Landing Page apresentando os detalhes do aplicativo e disponibilizar um botão para o cliente solicitando a integração com a aplicação. Geralmente este botão tem o titulo de Instale agora ou Inicie agora.

Neste botão você irá direcionar o cliente para a URL de autorização da loja, onde esta URL ficaria:

http://{URL da loja}/auth.php?response_type=code&consumer_key=CONSUMER_KEY&callback=http://{dominiodoapp}/tray/callback/auth/

Quando direcionado o cliente para essa pagina, irá aparecer uma tela solicitando a autorização da aplicação, conforme abaixo:

imagem

Uma observação importante é que, após autorizado, não será mais exibida essa tela, já passando automaticamente para o fluxo abaixo.

Após a autorização, o cliente é redirecionado para URL informada no parâmetro callback passado no momento da autorização (no exemplo acima é a URL http://{dominiodoapp}/tray/callback/auth/), onde ficará da seguinte forma esta URL:

http://{dominiodoapp}/tray/callback/auth/?code=2132112312321313abc123edf&store=391250&api_address=http://{URL da loja}/web_api/

Neste processo deve-se capturar as informações dessa URL e utilizá-las para configurar em sua aplicação, sendo os parâmetros code e api_address mais importantes no processo de integração.

Com o code e api_address é possível utilizar a API de Gerar Chave de Acesso, para gerar o valor do access_tokenutilizados nas outras APIs. É de extrema importância armazenar todas as informações de retorno desta API, pois serão utilizados constantemente durante a comunicação com a Tray.

Pode-se notar que no retorno da API de Gerar Chave de Acesso existe a expiração dessa chave e, quando expirado, deverá utilizar a API de Atualizar Chave de Acesso, onde será gerada um novo access_token para continuar realizando requisições nas APIs.

Dessa forma, toda referência que encontrar na documentação de {api_address} deverá ser utilizada a URL retornada no momento da autorização da API, conforme informado acima, e utilizar o access_token gerado para não ocorrer problema de permissão de acesso aos dados.

Dúvidas e Suporte

Para dúvidas relacionadas ao consumo das APIs disponibilizadas pedimos que abra um chamado diretamente através da nossa central de atendimento.

Autorização

Gerar Chaves de Acesso#post

api_address: "urldaloja.com.br/web_api"

curl --location -g --request POST '{{api_address}}/auth' \
--data-urlencode 'consumer_key={{consumer_key}}' \
--data-urlencode 'consumer_secret={{consumer_secret}}' \
--data-urlencode 'code={{code}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('{{api_address}}/auth');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->addPostParameter(array(
  'consumer_key' => '{{consumer_key}}',
  'consumer_secret' => '{{consumer_secret}}',
  'code' => '{{code}}'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("{{api_address}}/auth");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddParameter("consumer_key", "{{consumer_key}}");
request.AddParameter("consumer_secret", "{{consumer_secret}}");
request.AddParameter("code", "{{code}}");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "consumer_key={{consumer_key}}&consumer_secret={{consumer_secret}}&code={{code}}");
Request request = new Request.Builder()
  .url("{{api_address}}/auth")
  .method("POST", body)
  .build();
Response response = client.newCall(request).execute();

A Chave de Acesso é a crêdencial utilizada para acessar os recursos protegidos do cliente.

Essa chave representa a autorização emitida pelo cliente no servidor de autorização do Tray Commerce.

É possível gerar a Chave de Acesso utilizando as chaves disponibilizados para o aplicativo (consumer key e consumer secret) e o código de autorização (code), resgatado após a permissão do usuário, sendo realizada esta solicitação para a API de Gerar Chave de Acesso.

Método POST

https://{api_address}/auth

Dados para ser enviados no corpo da requisição:

Campo Tipo Descrição
consumer_key String Chave da aplicação
consumer_secret String Chave secreta da aplicação
code String Código de autorização


Exemplo de retorno:

  {
    "message": "Created tokens",
    "code": "200",
    "access_token": "APP_ID-9999-4c78abce105a578987987987987987asdasd4c14ec98eeca880dc9aa76ed118372ae4",
    "refresh_token": "86188asd456asd456asd9c192721dbdc03851a791a9cd6d3568a0dcb6a87080e229",
    "date_expiration_access_token": "2021-03-02 14:58:21",
    "date_expiration_refresh_token": "2021-04-01 11:58:21",
    "date_activated": "2021-03-02 11:58:21",
    "api_host": "https://urldaloja.com.br/web_api",
    "store_id": "123456"
  }

Retorno em caso de sucesso (status code 200 ou 201):

Campo Tipo Descrição
code Number Código de status de retorno
message String Mensagem de retorno
access_token String Chave de acesso
refresh_token String Chave para atualização
date_expiration_access_token Datetime Data de expiração da chave de acesso
date_expiration_refresh_token Datetime Data de expiração da chave de atualização
date_activated Datetime Data de ativação da chave de acesso
api_host String URL da API para a loja
store_id Number Código da loja

Atualizar Chave de Acesso#get

Método GET

api_address: "urldaloja.com.br/web_api"



curl --location -g --request GET '{{api_address}}/auth?refresh_token={{refresh_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('{{api_address}}/auth?refresh_token={{refresh_token}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}


var client = new RestClient("{{api_address}}/auth?refresh_token={{refresh_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("{{api_address}}/auth?refresh_token={{refresh_token}}")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

https://{api_address}/auth

Parâmetros enviados:

Field Type Description
refresh_token String Chave para atualização

Exemplo de retorno:

  {
    "message": "Refreshed tokens",
    "code": "200",
    "access_token": "APP_ID-9999-4c78abce105a578987987987987987asdasd4c14ec98eeca880dc9aa76ed118372ae4",
    "refresh_token": "86188asd456asd456asd9c192721dbdc03851a791a9cd6d3568a0dcb6a87080e229",
    "date_expiration_access_token": "2021-03-02 14:58:21",
    "date_expiration_refresh_token": "2021-04-01 11:58:21",
    "date_activated": "2021-03-02 11:58:21",
    "api_host": "https://urldaloja.com.br/web_api",
    "store_id": "123456"
  }

Retorno em caso de sucesso (status code 200 ou 201):

Campo Tipo Descrição
code Number Código de status de retorno
message String Mensagem de retorno
access_token String Chave de acesso
refresh_token String Chave para atualização
date_expiration_access_token Datetime Data de expiração da chave de acesso
date_expiration_refresh_token Datetime Data de expiração da chave de atualização
date_activated Datetime Data de ativação da chave de acesso
api_host String URL da API para a loja
store_id Number Código da loja

APIs de Sistema de Notificação(Webhook)

API DE SISTEMA DE NOTIFICAÇÃO (WEBHOOK)

Documentação – Sistema de Notificações

A Tray disponibiliza atualmente o sistema de Webhook, que possui a finalidade de agregar agilidade no fluxo das APIs.

Exemplo de caso: se a loja possui 1000 pedidos e foram alterados 50 pedidos e criados mais 50, ao invés do Integrador reprocessar todos os mil pedidos, com o webhook informando quais ids de pedidos foram alterados/criados, você irá consultar apenas 100 pedidos.

Ativação da Notificação:

Para ativar as notificações, é necessário informar uma URL de Notificação, onde será cadastrada em seu aplicativo que já esteja credenciado junto a Tray.

Sendo assim, favor abrir um chamado através deste link: https://atendimento.tray.com.br/hc/pt-br/requests/new e em: Precisa de ajuda com sua loja virtual? escolher o escopo: "TRAY DESENVOLVEDORES" > "INTEGRAÇÕES API" e informar o nome do aplicativo e url de notificação para iniciar o processo de ativação.

Funcionalidade:

A Tray irá realizar o envio dos parâmetros (scope_name | scope_id | seller_id | act) via POST, para a url de notificação cadastrada no aplicativo.

Esta url deverá estar disponível, para receber os parâmetros que a Tray vai enviar.

No caso, a url de notificação deve ser uma url externa preparada para receber requisições via POST, ou seja, deve ser disponibilizada de forma externa e deve conseguir interpretar as notificações enviadas pela Tray.

Notificações:

Estas notificações serão realizadas para uma URL do aplicativo, através de uma requisição via POST, onde o aplicativo irá receber essas notificações quando ocorrer alguma inserção, atualização ou exclusão de informações na plataforma, referente ao escopo que estiver habilitado, para o recebimento dessas notificações.

Atualmente, a notificações dos escopos só ocorrem a partir de novas ações, ou seja, começaram a ser notificados a partir do momento em que o aplicativo aderiu ao sistema de Webhook, desse momento em diante, qualquer ação nova será notificada.

Não será notificado nenhum escopo do qual já tenha ocorrido uma ação passada, antes de aderir ao sistema de notificação.

Dessa forma, para ter acesso as informações que ocorreram antes de aderir as notificações do Webhook, será necessário consultar diretamente as APIs respectivas, em que deseja saber.

Tempo de Notificação:

O tempo do envio das notificações da Tray para a url de notificação, ocorre em questão de minutos, sendo enviadas no mesmo instante.

É possível, por uma questão pontual, ocorrer um atraso no processo do envio.

O processo do envio das notificações podem ocorrem da seguinte forma:

A Tray realiza o primeiro envio das informações para a url de notificação, se houver alguma falha em sua url neste recebimento, a Tray irá realizar um segundo envio das informações, no entanto, se no primeiro envio, ocorreu em questão de minutos, o segundo envio irá ocorrer dentro de meio hora, e assim se sucederá aumentando o espaçamento do envio, até que a Tray consiga realizar os envios de todas as informações necessárias para a url de notificação.

Dessa forma é necessário que a url de notificação sempre esteja disponível e livre de impedimentos para receber as notificações da Tray, pois caso ocorra uma tentativa excessiva e impacte nosso banco, ficará passível do nosso time de infra, bloquear o serviço. E não, não conseguimos informar qual é o limite máximo das retentativas, pois tudo irá depender do processamento interno de nossa fila.

Recomendações de Implementação:

São recomendados dois tratamentos para utilização do sistem de notificação que são, armazenar as notificações e agrupar as notificações idênticas antes de gerar qualquer ação.

Desta forma, pode-se evitar diversas requisições ao mesmo escopo, visto que um produto pode sofrer diversas atualizações em um curto interválo de tempo, assim como o pedido pode sofrer alterações rápidas.

Exemplo de envio do payload:

Segue exemplo abaixo de payload, sobre o que é enviado via POST da Tray para a url do Webhook, dessa forma, é necessário realizar a captura dessas informações via código e então implementar as configurações dentro do sistema, de acordo com a necessidade do aplicativo.

{ "seller_id"=>391250, "scope_id"=>4375797, "scope_name"=>"order", "act"=>"update", "app_code"=>"718", "url_notification"=>"https://suaurldenotificacao" }

É possível habilitar o webhook para lojas específicas ou desabilitar de lojas específicas?

Não. Atualmente o serviço disponibilizado atua sobre o aplicativo e não sobre as lojas, ou seja, qualquer loja integrada ao app, o Integrador receberá as notificações das mesmas, sendo assim, para não receber as notificações de determinada loja, somente realizando a desinstalação do app dentro dessa loja.

É possível receber outros tipos de notificações, conforme demostrando no exemplo do playload?

Não. Atualmente não é possível. Caso deseje receber outros tipos de notificações, você poderá enviar uma solicitação para o nosso canal de SUGESTÕES.

Segue o link: https://clientes.tray.com.br/sugestao-tray/

Exclusão do serviço em caso de desinstalação do aplicativo?

(será o mesmo comportamento para troca de url de notificação)

Por um período de 20 dias, é provável que sua url ainda receba notificações da loja que realizou a desinstalação do seu aplicativo, pois o nosso sistema irá realizar a tentativa de entregas das notificações pendentes, até o momento em que o app foi desinstalado. Sendo assim, enquanto nosso sistema receber o status do HTTP da URL diferente de 200, continuaremos enviando diversas retentativas de envio das notificações até que esse esse resíduo de notificações retorne com o HTTP Code 200, o que poderá perdurar por aproximadamente 20 dias.

Parâmetros da Notificação

Para identificar o tipo de dado e qual a informação que foi atualizada, são enviados alguns parâmetros via POST no momento da notificação. Esses parâmetros são:

Parâmetros de envio Descrição
scope_name Nome do escopo notificado.
scope_id Código do escopo da notificação.
seller_id Código do vendedor.
act Ação realizada.

Abaixo os escopos disponíveis na notificação:

Lembrando que, inicialmente realizamos a liberação somente do escopo de "PEDIDOS", caso deseje realizar a liberação dos demais escopos, ou até mesmo de todos eles, isso deverá ser informado via chamado, no momento do envio da url.

Exemplo de código:

php
    $sellerID = $_POST["seller_id"]; //Código da Loja

    switch($_POST["scope_name"] . "_" . $_POST["act"] ){
        case "product_insert":
            // Tratamento da atualização produto
            $productID = $_POST["scope_id"]; // Código do produto
        break;
        case "product_update":
            // Tratamento da atualização do produto
            $productID = $_POST["scope_id"]; // Código do produto
        case "variant_stock_update":
            // Tratamento da atualização de estoque de uma variação de produto
            $variantID = $_POST["scope_id"]; // Código da variação do produto
        break;
        case "order_insert":
            // Tratamento da insersão de um novo pedido
            $orderID = $_POST["scope_id"]; // Código do pedido
        break;
        case "customer_delete":
            // Tratamento da exclusão de um cliente
            $customerID = $_POST["scope_id"]; // Código do cliente
        break;
    }

Tipos de Escopos de Notificação Descrição
product Notificação de produto.
product_price Notificação de preço de produto.
product_stock Notificação de estoque de produto.
variant Notificação de variação do produto.
variant_price Notificação de preço da variação.
variant_stock Notificação de estoque da variação.
order Notificação de pedido.
customer Notificação de cliente.

As ações disponíveis na notificação são localizadas abaixo:

Tipos de Ações Descrição
insert Inserção de um novo registro.
update Atualizaçao de um registro.
delete Exclusão de um registro.

API de Produtos

Listagem de Produtos#get

Requisição para a consulta de uma lista produtos.

Método GET

https://{api_address}/products

Parâmetros enviados

Campo Tipo Descrição
access_token String Chave de acesso
id Number Código do produto
name String Nome do produto
reference String Referência do produto
category_id Number Código da categoria principal do produto
ean String Código EAN do produto
price Decimal Preço do produto
price_range String Faixa de preço do produto
brand String Marca do produto
available Number Produto disponível (Veja Tabela A)
stock Number Estoque do produto
promotion Number Produto em promoção (Veja Tabela B)
free_shipping Number Produto com frete grátis (Veja Tabela C)
release Number Produto em lançamento (Veja Tabela D)
hot Number Produto em destaque (Veja Tabela E)
quantity_sold Number Quantidade vendida do produto
release_date Date Data de lançamento do produto (Formato: aaaa-mm-dd)
rand Number Ordem aleatória
sort String Ordenação
limit Number Limite de Registros
page Number Página corrente
attrs String Atributos do produto
created Date Filtro de data de criação, ex.: (Formato: aaaa-mm-dd)
modified Date Filtro de data de modificação, ex.: (Formato: aaaa-mm-dd)

Retorno em caso de sucesso (status code 200 ou 201)

Exemplo de retorno:

{
    "paging": {
        "total": 108,
        "page": 1,
        "offset": 0,
        "limit": 30,
        "maxLimit": 50
    },
    "sort": [
        {
            "id": "asc"
        }
    ],
    "availableFilters": [
        "id",
        "name",
        "category_id",
        "ean",
        "available",
        "price",
        "brand",
        "model",
        "hot",
        "quantity_sold",
        "release",
        "free_shipping",
        "weight",
        "image",
        "release_date",
        "stock",
        "promotion",
        "reference",
        "has_buy_together",
        "has_free_gift",
        "has_description",
        "brand_id",
        "additional_button",
        "virtual_product",
        "has_ean",
        "is_kit",
        "has_title",
        "has_meta_description",
        "has_keywords",
        "has_variations",
        "has_brand",
        "has_model",
        "has_dimension",
        "has_weight",
        "property_name",
        "property_id",
        "property_value",
        "property_value_id",
        "activation_date",
        "deactivation_date",
        "show_properties",
        "kit_has_variation",
        "modified",
        "created",
        "price_range",
        "current_price_range",
        "date_range",
        "date_range_deactivation",
        "current_price"
    ],
    "appliedFilters": [],
    "Products": [
        {
            "Product": {
                "modified": "2018-12-26 13:46:12",
                "ean": "",
                "is_kit": "0",
                "slug": "produto-teste",
                "ncm": "0",
                "activation_date": "0000-00-00",
                "deactivation_date": "0000-00-00",
                "id": "0",
                "name": "PRODUTO TESTE",
                "price": "139.00",
                "cost_price": "0.00",
                "dollar_cost_price": "0.00",
                "promotional_price": "0.00",
                "start_promotion": "0000-00-00",
                "end_promotion": "0000-00-00",
                "brand": "",
                "brand_id": "",
                "model": "",
                "weight": "958",
                "length": "0",
                "width": "0",
                "height": "0",
                "stock": "51",
                "category_id": "25",
                "available": "1",
                "availability": "",
                "reference": "016301",
                "hot": "0",
                "release": "0",
                "additional_button": "0",
                "has_variation": "0",
                "rating": "0",
                "count_rating": "0",
                "quantity_sold": "0",
                "url": {
                    "http": "http://{dominio_da_loja}/categoria/produto-de-teste",
                    "https": "https://{dominio_da_loja}/categoria/produto-de-teste"
                },
                "created": "2016-10-19 09:30:12",
                "Properties": [],
                "payment_option": "R$ 125,10 à vista com desconto Boleto - Yapay ou 12x de R$ 13,14 com juros",
                "payment_option_details": [
                    {
                        "display_name": "Boleto - Yapay",
                        "type": "bank_billet",
                        "plots": "1",
                        "value": "125.10",
                        "tax": "0.00"
                    },
                    {
                        "display_name": "Cartão MasterCard - Yapay",
                        "type": "credit_card",
                        "plots": "12",
                        "value": "13.14",
                        "tax": "1.99"
                    }
                ],
                "related_categories": [],
                "release_date": "2016-12-21",
                "shortcut": "produto-test",
                "virtual_product": "",
                "minimum_stock": "0",
                "minimum_stock_alert": "0",
                "free_shipping": "0",
                "video": "",
                "metatag": [],
                "payment_option_html": " ",
                "upon_request": "0",
                "available_for_purchase": "1",
                "all_categories": "0",
                "ProductImage": [],
                "Variant": [],
                "AdditionalInfos": []
            }
        }
}
Campo Tipo Descrição
paging Object Dados de paginação
total Number Total de registros
page Number Página corrente
offset Number Registro inicial da página
limit Number Limite de registros
maxLimit Number Máximo de registros
sort Object Ordenação
availableFilters String Filtros disponíveis
appliedFilters String Filtros utilizados
Products Object Dados do produto
Product Object Dados do produto
id Number Código do produto
ean String Código EAN do produto
modifield Date Data de modificação do produto
slug String Final da url do produto
ncm String Código NCM do produto
name String Nome do produto
is_kit Number O produto possui kit
payment_options_details String Detalhes das opções de pagamento do produto
additionalInfos String Informações adicionais do produto
price Decimal Preço do produto
cost_price Decimal Preço de custo do produto
promotional_price Decimal Preço promocional do produto
start_promotion Date Data de início da promoção do produto
end_promotion Date Data de termino da promoção do produto
brand String Marca do produto
model String Modelo do produto
weight Number Peso do produto
length Number Comprimento do produto
width Number Largura do produto
height Number Altura do produto
cubic_weight Number Peso cúbico do produto
stock Number Estoque do produto
category_id Number Código da categoria principal do produto
available Number Produto disponível (Veja Tabela A)
availability String Disponibilidade do produto
reference String Referência do produto
hot Number Produto em destaque (Veja Tabela E)
release Number Produto lançamento (Veja Tabela D)
additional_button Number Botão adicional do produto
has_variation Number Produto com variação (Veja Tabela F)
brand_id Number Código da marca do produto
all_categories String Todas as categorias do produto
rating Number Classificação do produto
count_rating Number Valor da classificação do produto
quantity_sold Number Quantidade vendida do produto
ProductImage Object Imagens do produto
http String URL da imagem do produto
https String URL segura da imagem do produto
thumbs Object Miniaturas da imagem do produto
30 Object Miniaturas da imagem do produto (30px)
http String URL da miniaturas da imagem do produto (30px)
https String URL segura da miniaturas da imagem do produto (30px)
90 Object Miniaturas da imagem do produto (90px)
http String URL da miniaturas da imagem do produto (90px)
https String URL segura da miniaturas da imagem do produto (90px)
180 Object Miniaturas da imagem do produto (180px)
http String URL da miniaturas da imagem do produto (180px)
https String URL segura da miniaturas da imagem do produto (180px)
image Number Produto com imagem
url Object URLs do produto
http String URL do produto
https String URL segura do produto
created Date Data de criação do produto
Properties Object Propriedades do produto
type String Tipo da propriedade do produto (cor, tamanho, ...)
payment_option String Detalhes/Opções de pagamento do produto
related_categories Number Categorias adicionais do produto
release_date Date Data de lançamento do produto
shortcut String Atalho do produto
virtual_product Number Produto virtual (Veja Tabela I)
minimum_stock Number Estoque mínimo do produto
minimum_stock_alert Number Aviso de estoque mínimo do produto
upon_request Number Produto sob consulta
related_products Number Produtos relacionados
free_shipping Number Produto com frete grátis (Veja Tabela C)
payment_options_html String Opções de pagamento do produto em HTML
metatag Object Objeto
type String Tipo da metatag, só recebe keywords
Description String Descrição da metatag
video String Vídeo do produto
activation_date Date Data de ativação do produto
deactivation_date Date Data de desativação do produto
dollar_cost_price Number Preço de custo do produto em dollar
Variant Object Variação do produto
id Number Código da variação do produto

Tabelas Auxiliares de Produtos

Tabela A - Disponibilidade do produto (campo available)

Valor Descrição
0 Produto indisponível
1 Produto disponível

Tabela B - Produto promocional (campo promotion)

Valor Descrição
0 Produto não promocional
1 Produto promocional

Tabela C - Produto com frete grátis (campo free_shipping)

Valor Descrição
0 Produto sem frete grátis
1 Produto com frete grátis

Tabela D - Lançamento de produto (campo release)

Valor Descrição
0 Produto já lançado
1 Produto em lançamento

Tabela E - Produto em destaque (campo hot)

Valor Descrição
0 Produto normal
1 Produto em destaque

Tabela F - Produto com variação (campo has_variation)

Valor Descrição
0 Produto sem variação
1 Produto com variação

Tabela G - Produto em destaque (campo has_acceptance_terms)

Valor Descrição
0 Produto sem termo de aceite
1 Produto com termo de aceite

Tabela H - Produto em destaque (campo has_buy_together)

Valor Descrição
0 Produto sem compre junto
1 Produto com compre junto

Tabela I - Produto em destaque (campo virtual_product)

Valor Descrição
0 Produto normal
1 Produto virtual

Consultar Dados do Produto#get

Requisição para a consulta de dados de um produto.

Método GET

https://{api_address}/products/:id

Código de Exemplo:



curl --location -g --request GET '{{api_address}}/products/:id?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('{{api_address}}/products/:id?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}


var client = new RestClient("{{api_address}}/products/:id?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("{{api_address}}/products/:id?access_token={{access_token}}")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Parâmetros enviados

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do produto

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso

{
    "Product": {
        "ean": "",
        "modified": "2019-01-21 09:22:21",
        "is_kit": "0",
        "slug": "produto-teste",
        "ncm": "90221991",
        "activation_date": "0000-00-00",
        "deactivation_date": "2018-07-10",
        "id": "8",
        "name": "Produto Teste",
        "title": "Titulo blablabla",
        "description": "",
        "description_small": "Descrição blablabla",
        "price": "30.00",
        "cost_price": "25.00",
        "dollar_cost_price": "0.00",
        "promotional_price": "10.00",
        "start_promotion": "2019-01-20",
        "end_promotion": "2019-02-01",
        "brand": "Dragon Shield",
        "brand_id": "4",
        "model": "MTESTEM",
        "weight": "2",
        "length": "1",
        "width": "10",
        "height": "15",
        "stock": "682",
        "category_id": "14",
        "category_name": "Playmat",
        "available": "1",
        "availability": "Disponível em 3 dia útil",
        "reference": "M01",
        "hot": "1",
        "release": "1",
        "additional_button": "0",
        "has_variation": "1",
        "has_acceptance_terms": "0",
        "has_buy_together": "1",
        "additional_message": "Informação Adicional 3",
        "warranty": "",
        "rating": "0",
        "count_rating": "0",
        "quantity_sold": "2",
        "ProductImage": [
            {
                "http": "http://images3.tcdn.com.br/img/img_prod/123/1_1_123.jpg",
                "https": "https://images.tcdn.com.br/img/img_prod/123/1_1_123.jpg",
                "thumbs": {
                    "30": {
                        "http": "http://images.tcdn.com.br/img/img_prod/123/30_1_1_123.jpg",
                        "https": "https://images2.tcdn.com.br/img/img_prod/123/30_1_1_123.jpg"
                    },
                    "90": {
                        "http": "http://images1.tcdn.com.br/img/img_prod/123/90_1_1_123.jpg",
                        "https": "https://images1.tcdn.com.br/img/img_prod/123/90_1_1_123.jpg"
                    },
                    "180": {
                        "http": "http://images3.tcdn.com.br/img/img_prod/123/180_1_1_123.jpg",
                        "https": "https://images4.tcdn.com.br/img/img_prod/123/180_1_1_123.jpg"
                    }
                }
            },
            {
                "http": "http://images1.tcdn.com.br/img/img_prod/123/1_2_123.jpg",
                "https": "https://images2.tcdn.com.br/img/img_prod/123/1_2_123.jpg",
                "thumbs": {
                    "30": {
                        "http": "http://images4.tcdn.com.br/img/img_prod/123/30_1_2_123.jpg",
                        "https": "https://images4.tcdn.com.br/img/img_prod/123/30_1_2_123.jpg"
                    },
                    "90": {
                        "http": "http://images4.tcdn.com.br/img/img_prod/123/90_1_2_123.jpg",
                        "https": "https://images1.tcdn.com.br/img/img_prod/123/90_1_2_123.jpg"
                    },
                    "180": {
                        "http": "http://images4.tcdn.com.br/img/img_prod/123/180_1_2_123.jpg",
                        "https": "https://images.tcdn.com.br/img/img_prod/123/180_1_2_123.jpg"
                    }
                }
            }
        ],
        "image": "1",
        "url": {
            "http": "http://{dominio_da_loja}/categoria/produto-de-teste",
            "https": "https://{dominio_da_loja}/categoria/produto-de-teste"
        },
        "created": "0000-00-00 00:00:00",
        "Properties": {
            "Teste Caracteristica": [
                "PP"
            ]
        },
        "payment_option": "R$ 9,70 à vista com desconto Boleto - Yapay",
        "payment_option_details": [
            {
                "display_name": "Boleto - Yapay",
                "type": "bank_billet",
                "plots": "1",
                "value": "9.70",
                "tax": "0.00"
            }
        ],
        "related_categories": [
            "2"
        ],
        "release_date": "",
        "shortcut": "produto-teste",
        "virtual_product": "",
        "minimum_stock": "0",
        "minimum_stock_alert": "0",
        "promotion_id": "4",
        "included_items": "Informação Adicional 2",
        "related_products": [
            "6",
            "8",
            "27",
            "29"
        ],
        "free_shipping": "1",
        "current_price": "10.00",
        "ipi": "0.110000",
        "acceptance_term_option": "2",
        "acceptance_term": "",
        "warranty_days": "0",
        "availability_days": "0",
        "cubic_weight": "32",
        "video": "",
        "metatag": [
            {
                "type": "description",
                "content": "Informação Adicional Teste"
            },
            {
                "type": "description",
                "content": ""
            },
            {
                "type": "keywords",
                "content": ""
            }
        ],
        "payment_option_html": " ",
        "percentage_discount": "-66.666667",
        "upon_request": "0",
        "available_for_purchase": "1",
        "all_categories": [
            "2",
            "8",
            "14"
        ],
        "Variant": [
            {
                "id": "204"
            }
        ],
        "AdditionalInfos": [
            {
                "id": "2",
                "info_id": "1",
                "type": "select",
                "display_as": "galery",
                "name": "Puxadores",
                "display_value": "1",
                "required": "1",
                "add_total": "1",
                "options": [
                    {
                        "id": "6",
                        "name": "ima",
                        "image": {
                            "http": "http://images.tcdn.com.br/img/img_prod/406562/imagem_6_2819240856c4c18e82e87.jpg",
                            "https": "https://images.tcdn.com.br/img/img_prod/406562/imagem_6_2819240856c4c18e82e87.jpg"
                        },
                        "value": "0.12"
                    }
                ],
                "active": "1",
                "deadline": "0"
            },
            {
                "id": "14",
                "info_id": "2",
                "type": "text",
                "name": "Data do Curso",
                "display_value": "1",
                "required": "1",
                "add_total": "0",
                "max_length": "0",
                "value": "0.00",
                "active": "1",
                "deadline": "0"
            }
        ]
    }
}
Campo Tipo Descrição
Product Object Dados do produto
id Number Código do produto
ean String Código EAN do produto
modifield Date Data de modificação do produto
slug String Final da url do produto
ncm String Código NCM do produto
name String Nome do produto
title String Titulo do produto
description String Descrição do produto
description_small String Descrição resumida do produto
price Decimal Preço do produto
cost_price Decimal Preço de custo do produto
promotional_price Decimal Preço promocional do produto
start_promotion Date Data de início da promoção do produto
end_promotion Date Data de termino da promoção do produto
brand String Marca do produto
model String Modelo do produto
weight Number Peso do produto
length Number Comprimento do produto
width Number Largura do produto
height Number Altura do produto
cubic_weight Number Peso cúbico do produto
stock Number Estoque do produto
category_id Number Código da categoria principal do produto
available Number Produto disponível (Veja Tabela A)
availability String Disponibilidade do produto
reference String Referência do produto
hot Number Produto em destaque (Veja Tabela E)
release Number Produto lançamento (Veja Tabela D)
additional_button Number Botão adicional do produto
has_variation Number Produto com variação (Veja Tabela F)
has_acceptance_terms Number Produto com termo de aceitação (Veja Tabela G)
has_buy_together Number Produto com compre junto (Veja Tabela H)
additional_message String Mensagem adicional do produto
warranty String Garantia do produto
rating Number Classificação do produto
count_rating Number Valor da classificação do produto
quantity_sold Number Quantidade vendida do produto
ProductImage Object Imagens do produto
http String URL da imagem do produto
https String URL segura da imagem do produto
thumbs Object Miniaturas da imagem do produto
30 Object Miniaturas da imagem do produto (30px)
http String URL da miniaturas da imagem do produto (30px)
https String URL segura da miniaturas da imagem do produto (30px)
90 Object Miniaturas da imagem do produto (90px)
http String URL da miniaturas da imagem do produto (90px)
https String URL segura da miniaturas da imagem do produto (90px)
180 Object Miniaturas da imagem do produto (180px)
http String URL da miniaturas da imagem do produto (180px)
https String URL segura da miniaturas da imagem do produto (180px)
image Number Produto com imagem
url Object URLs do produto
http String URL do produto
https String URL segura do produto
created Date Data de criação do produto
Properties Object Propriedades do produto
type String Tipo da propriedade do produto (cor, tamanho, ...)
payment_option String Detalhes/Opções de pagamento do produto
related_categories Number Categorias adicionais do produto
release_date Date Data de lançamento do produto
shortcut String Atalho do produto
virtual_product Number Produto virtual (Veja Tabela I)
minimum_stock Number Estoque mínimo do produto
minimum_stock_alert Number Aviso de estoque mínimo do produto
promotion_id Number Código da promoção do produto
included_items String Itens inclusos do produto
related_products Number Produtos relacionados
free_shipping Number Produto com frete grátis (Veja Tabela C)
current_price Decimal Preço do produto
ipi Decimal IPI do produto
acceptance_term_option Number Opção do termo de aceitação do produto
acceptance_term Number Termo de aceitação do produto
warranty_days Number Dias de garantia do produto
availability_days Number Dias de disponibilidade do produto
metatag Object Metatag
type Object Tipo da metatag só recebe keywords
content Object Valor da metatag
Variant Object Variação do produto
id Number Código da variação do produto
is_kit Number O produto possui kit
activation_date Date Data de ativação do produto
deactivation_date Date Data de desativação do produto
dollar_cost_price Number Preço de custo do produto em dollar
brand_id Number Código da marca do produto
category_name String Nome da categoria do produto
payment_options_details String Detalhes das opções de pagamento do produto
cubic_weight Number Peso cúbico do produto
video String Vídeo do produto
percentage_discount Number Desconto percentual do produto
upon_request Number Produto sob consulta
available_for_purchase String Produto disponível para compra
all_categories String Todas as categorias do produto
additionalInfos String Informações adicionais do produto

Tabelas Auxiliares de Produtos

Tabela A - Disponibilidade do produto (campo available)

Valor Descrição
0 Produto indisponível
1 Produto disponível

Tabela B - Produto promocional (campo promotion)

Valor Descrição
0 Produto não promocional
1 Produto promocional

Tabela C - Produto com frete grátis (campo free_shipping)

Valor Descrição
0 Produto sem frete grátis
1 Produto com frete grátis

Tabela D - Lançamento de produto (campo release)

Valor Descrição
0 Produto já lançado
1 Produto em lançamento

Tabela E - Produto em destaque (campo hot)

Valor Descrição
0 Produto normal
1 Produto em destaque

Tabela F - Produto com variação (campo has_variation)

Valor Descrição
0 Produto sem variação
1 Produto com variação

Tabela G - Produto em destaque (campo has_acceptance_terms)

Valor Descrição
0 Produto sem termo de aceite
1 Produto com termo de aceite

Tabela H - Produto em destaque (campo has_buy_together)

Valor Descrição
0 Produto sem compre junto
1 Produto com compre junto

Tabela I - Produto em destaque (campo virtual_product)

Valor Descrição
0 Produto normal
1 Produto virtual

Cadastrar Produto#post

Requisição para inclusão de um produto. Deverá enviar o JSON com os dados do produto para a criação.

Método POST

https://{api_address}/products

Código de Exemplo:



curl --location -g --request POST '{{api_address}}/products?access_token={{access_token}}' \
--data-raw '{
    "Product":  {
        "ean":"9999",
        "name":"Produto Teste API",
        "ncm":"99999999",
        "description":"Descrição do Produto de Teste da API",
        "description_small":"Produto de Teste da API",
        "price":0.01,
        "cost_price":0.01,
        "promotional_price":0.01,
        "start_promotion":"2019-03-01",
        "end_promotion":"2019-09-01",
        "ipi_value": 12,
        "brand":"marca",
        "model":"Modelo",
        "weight":1000,
        "length":10,
        "width":10,
        "height":10,
        "stock":100,
        "category_id":"2",
        "available":1,
        "availability":"Disponível em 3 dias",
        "availability_days":3,
        "reference":"111",
        "related_categories":[],
        "release_date":"",
        "picture_source_1":"http://bancodeimagens/imagem1.jpg",
        "picture_source_2":"http://bancodeimagens/imagem2.jpg",
        "picture_source_3":"http://bancodeimagens/imagem3.jpg",
        "picture_source_4":"http://bancodeimagens/imagem4.jpg",
        "picture_source_5":"http://bancodeimagens/imagem5.jpg",
        "picture_source_6":"http://bancodeimagens/imagem6.jpg",
        "metatag":[{"type":"keywords",
        "content":"Key1, Key2, Key3",
        "local":1}],
        "virtual_product":"0"
    }
}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('{{api_address}}/products?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setBody('{\n    "Product":    {\n        "ean":"9999",\n        "name":"Produto Teste API",\n        "ncm":"99999999",\n        "description":"Descrição do Produto de Teste da API",\n        "description_small":"Produto de Teste da API",\n        "price":0.01,\n      "cost_price":0.01,\n        "promotional_price":0.01,\n        "start_promotion":"2019-03-01",\n        "end_promotion":"2019-09-01",\n     "ipi_value": 12,\n        "brand":"marca",\n        "model":"Modelo",\n        "weight":1000,\n        "length":10,\n        "width":10,\n        "height":10,\n        "stock":100,\n        "category_id":"2",\n        "available":1,\n        "availability":"Disponível em 3 dias",\n        "availability_days":3,\n        "reference":"111",\n        "related_categories":[],\n        "release_date":"",\n        "picture_source_1":"http://bancodeimagens/imagem1.jpg",\n        "picture_source_2":"http://bancodeimagens/imagem2.jpg",\n        "picture_source_3":"http://bancodeimagens/imagem3.jpg",\n        "picture_source_4":"http://bancodeimagens/imagem4.jpg",\n        "picture_source_5":"http://bancodeimagens/imagem5.jpg",\n        "picture_source_6":"http://bancodeimagens/imagem6.jpg",\n        "metatag":[{"type":"keywords",\n        "content":"Key1, Key2, Key3",\n        "local":1}],\n        "virtual_product":"0"\n    }\n}');
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}


var client = new RestClient("{{api_address}}/products?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddParameter("text/plain", "{\n    \"Product\":\t{\n        \"ean\":\"9999\",\n        \"name\":\"Produto Teste API\",\n        \"ncm\":\"99999999\",\n        \"description\":\"Descrição do Produto de Teste da API\",\n        \"description_small\":\"Produto de Teste da API\",\n        \"price\":0.01,\n    \t\"cost_price\":0.01,\n        \"promotional_price\":0.01,\n        \"start_promotion\":\"2019-03-01\",\n        \"end_promotion\":\"2019-09-01\",\n    \t\"ipi_value\": 12,\n        \"brand\":\"marca\",\n        \"model\":\"Modelo\",\n        \"weight\":1000,\n        \"length\":10,\n        \"width\":10,\n        \"height\":10,\n        \"stock\":100,\n        \"category_id\":\"2\",\n        \"available\":1,\n        \"availability\":\"Disponível em 3 dias\",\n        \"availability_days\":3,\n        \"reference\":\"111\",\n        \"related_categories\":[],\n        \"release_date\":\"\",\n        \"picture_source_1\":\"http://bancodeimagens/imagem1.jpg\",\n        \"picture_source_2\":\"http://bancodeimagens/imagem2.jpg\",\n        \"picture_source_3\":\"http://bancodeimagens/imagem3.jpg\",\n        \"picture_source_4\":\"http://bancodeimagens/imagem4.jpg\",\n        \"picture_source_5\":\"http://bancodeimagens/imagem5.jpg\",\n        \"picture_source_6\":\"http://bancodeimagens/imagem6.jpg\",\n        \"metatag\":[{\"type\":\"keywords\",\n        \"content\":\"Key1, Key2, Key3\",\n        \"local\":1}],\n        \"virtual_product\":\"0\"\n    }\n}",  ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "{\n    \"Product\":\t{\n        \"ean\":\"9999\",\n        \"name\":\"Produto Teste API\",\n        \"ncm\":\"99999999\",\n        \"description\":\"Descrição do Produto de Teste da API\",\n        \"description_small\":\"Produto de Teste da API\",\n        \"price\":0.01,\n    \t\"cost_price\":0.01,\n        \"promotional_price\":0.01,\n        \"start_promotion\":\"2019-03-01\",\n        \"end_promotion\":\"2019-09-01\",\n    \t\"ipi_value\": 12,\n        \"brand\":\"marca\",\n        \"model\":\"Modelo\",\n        \"weight\":1000,\n        \"length\":10,\n        \"width\":10,\n        \"height\":10,\n        \"stock\":100,\n        \"category_id\":\"2\",\n        \"available\":1,\n        \"availability\":\"Disponível em 3 dias\",\n        \"availability_days\":3,\n        \"reference\":\"111\",\n        \"related_categories\":[],\n        \"release_date\":\"\",\n        \"picture_source_1\":\"http://bancodeimagens/imagem1.jpg\",\n        \"picture_source_2\":\"http://bancodeimagens/imagem2.jpg\",\n        \"picture_source_3\":\"http://bancodeimagens/imagem3.jpg\",\n        \"picture_source_4\":\"http://bancodeimagens/imagem4.jpg\",\n        \"picture_source_5\":\"http://bancodeimagens/imagem5.jpg\",\n        \"picture_source_6\":\"http://bancodeimagens/imagem6.jpg\",\n        \"metatag\":[{\"type\":\"keywords\",\n        \"content\":\"Key1, Key2, Key3\",\n        \"local\":1}],\n        \"virtual_product\":\"0\"\n    }\n}");
Request request = new Request.Builder()
  .url("{{api_address}}/products?access_token={{access_token}}")
  .method("POST", body)
  .build();
Response response = client.newCall(request).execute();

Parâmetros enviados

Campo Tipo Descrição
access_token String Chave de acesso
Product JSON Dados do produto
ean String (120) Código EAN do produto
name String (200) Nome do produto
ncm String (8) Código NCM do produto
description String (4800) Descrição do produto
description_small String (500) Descrição resumida do produto
price Decimal (9) Preço do produto
cost_price Decimal (9) Preço de custo do produto
promotional_price Decimal (9) Preço promocional do produto
start_promotion Date Data de início da promoção do produto (Formato: aaaa-mm-dd)
end_promotion Date Data de termino da promoção do produto (Formato: aaaa-mm-dd)
ipi_value Decimal IPI do produto
brand String (120) Marca do produto
model String (150) Modelo do produto
weight Number (9) Peso do produto
length Number (9) Comprimento do produto
width Number (9) Largura do produto
height Number (9) Altura do produto
stock Number (9) Estoque do produto
category_id Number Código da categoria principal do produto
available Number Produto disponível (Veja Tabela A)
availability String Disponibilidade do produto
availability_days Number Dias de disponibilidade do produto
reference String (120) Referência do produto
related_categories Number Categorias adicionais do produto (separados por vírgula)
release_date Date Data de lançamento do produto (Formato: aaaa-mm-dd)
picture_source_1 String "Imagem principal do produto (Informar a URL para cadastro) *vide especificações de como fazer o envio da imagem no rodapé"
picture_source_2 String "Imagem do produto - imagem 2 (Informar a URL para cadastro) *vide especificações de como fazer o envio da imagem no rodapé"
picture_source_3 String "Imagem do produto - imagem 3 (Informar a URL para cadastro) *vide especificações de como fazer o envio da imagem no rodapé"
picture_source_4 String "Imagem do produto - imagem 4 (Informar a URL para cadastro) *vide especificações de como fazer o envio da imagem no rodapé"
picture_source_5 String "Imagem do produto - imagem 5 (Informar a URL para cadastro) *vide especificações de como fazer o envio da imagem no rodapé"
picture_source_6 String "Imagem do produto - imagem 6 (Informar a URL para cadastro) *vide especificações de como fazer o envio da imagem no rodapé"
metatag Object Metatags
type String Tipo da metatag (Informar o valor keywords)
content String Dados da metatag
local Number Local da metatag (Informar p valor 1)
virtual_product String Se for um produto virtual, significa que ele não possui o envio físico. Produto virtual (Veja Tabela I)

Retorno em caso de sucesso (status code 200 ou 201)

Retorno com Sucesso:

{
  "message":"Created",
  "id":"123",
  "code":201
}
Campo Tipo Descrição
message String Mensagem de retorno
:id Number Código do produto
code Number Código do retorno(201)
Campo Descrição
"price" Enviar este campo com valor zerado, ativará o campo "upon_request"

Tabelas Auxiliares de Produtos

Tabela A - Disponibilidade do produto (campo available)

Valor Descrição
0 Produto indisponível
1 Produto disponível

Tabela B - Produto em destaque (campo virtual_product)

Valor Descrição
0 Produto normal
1 Produto virtual

Atualizar Dados do Produto#put

Requisição para alterar os dados de um produto. Deverá enviar o JSON com os dados do produto para a alteração.

Método PUT

https://{api_address}/products/:id

Parâmetros enviados

{
    "Product": {
        "ean": "9999",
        "name": "Produto Teste API",
        "ncm": "99999999",
        "description": "Descrição do Produto de Teste da API",
        "description_small": "Produto de Teste da API",
        "price": 0.01,
        "cost_price": 0.01,
        "promotional_price": 0.01,
        "start_promotion": "2019-03-01",
        "end_promotion": "2019-09-01",
        "brand": "marca",
        "model": "Modelo",
        "weight": 1000,
        "length": 10,
        "width": 10,
        "availability": "",
        "height": 10,
        "stock": 100,
        "category_id": "2",
        "available": 1,
        "warranty":"",
        "reference": "111",
        "picture_source_1": "http://bancodeimagens/imagem1.jpg",
        "picture_source_2": "http://bancodeimagens/imagem2.jpg",
        "picture_source_3": "http://bancodeimagens/imagem3.jpg",
        "picture_source_4": "http://bancodeimagens/imagem4.jpg",
        "picture_source_5": "http://bancodeimagens/imagem5.jpg",
        "picture_source_6": "http://bancodeimagens/imagem6.jpg",
        "metatag": [
            {
                "type": "keywords",
                "content": "Key1, Key2, Key3",
                "local": 1
            }
        ],
        "related_categories": [],
        "release_date": ""
    }
}
Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do produto
Product JSON Dados do produto
ean String Código EAN do produto
name String Nome do produto
ncm String Código NCM do produto
description String Descrição do produto
description_small String Descrição resumida do produto
price Decimal Preço do produto
cost_price Decimal Preço de custo do produto
promotional_price Decimal Preço promocional do produto
start_promotion Date Data de início da promoção do produto (Formato: aaaa-mm-dd)
end_promotion Date Data de termino da promoção do produto (Formato: aaaa-mm-dd)
brand String Marca do produto
model String Modelo do produto
weight Number Peso do produto
length Number Comprimento do produto
width Number Largura do produto
height Number Altura do produto
stock Number Estoque do produto
category_id Number Código da categoria principal do produto
availability Number prazo de disponibilidade do produto
available Number Produto disponível (Veja Tabela A)
warranty String Tempo de garantia do produto
reference String Referência do produto
picture_source_1 String "Imagem principal do produto (Informar a URL para cadastro) *vide especificações de como fazer o envio da imagem no rodapé."
picture_source_2 String "Imagem do produto - imagem 2 (Informar a URL para cadastro) *vide especificações de como fazer o envio da imagem no rodapé"
picture_source_3 String "Imagem do produto - imagem 3 (Informar a URL para cadastro) *vide especificações de como fazer o envio da imagem no rodapé"
picture_source_4 String "Imagem do produto - imagem 4 (Informar a URL para cadastro) *vide especificações de como fazer o envio da imagem no rodapé"
picture_source_5 String "Imagem do produto - imagem 5 (Informar a URL para cadastro) *vide especificações de como fazer o envio da imagem no rodapé"
picture_source_6 String "Imagem do produto - imagem 6 (Informar a URL para cadastro) *vide especificações de como fazer o envio da imagem no rodapé."
metatag Object Metatags
type String Tipo da metatag (Informar o valor keywords)
content String Dados da metatag
local Number Local da metatag (Informar p valor 1)
related_categories Number Categorias adicionais do produto (separados por vírgula)
release_date Date Data de lançamento do produto (Formato: aaaa-mm-dd)

Retorno em caso de sucesso (status code 200 ou 201)

Retorno com Sucesso:

{
  "message":"Saved",
  "id":"123",
  "code":200
}
Campo Tipo Descrição
message String Mensagem de retorno
:id Number Código do produto
code Number Código do retorno(200)

Tabelas Auxiliares de Produtos

Tabela A - Disponibilidade do produto (campo available)

Valor Descrição
0 Produto indisponível
1 Produto disponível

Exclusão de Produtos#delete

Requisição para excluir um Produto ou um Kit

Código de Exemplo:



curl --location -g --request DELETE 'https://{api_address}/products/:id/?access_token={token}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/products/:id/?access_token={token}');
$request->setMethod(HTTP_Request2::METHOD_DELETE);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}


var client = new RestClient("https://{api_address}/products/:id/?access_token={token}");
client.Timeout = -1;
var request = new RestRequest(Method.DELETE);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
  .url("https://{api_address}/products/:id/?access_token={token}")
  .method("DELETE", body)
  .build();
Response response = client.newCall(request).execute();

Método DELETE

https://{api_address}/products/:id/?access_token={token}

Parâmetros enviados

Campo Tipo Descrição
access_token String Chave de acesso
id Number Código do produto

Retorno em caso de sucesso (status code 200 ou 201)

Retorno com Sucesso:

{
  "message":"Deleted",
  "id":"123",
  "code":200
}
Campo Tipo Descrição
message String Mensagem de retorno
:id Number Código do produto
code Number Código do retorno(200)

Exclusão de Kit#delete

Método DELETE

https://{api_address}/products/product_parent_id/?access_token={token}

Parâmetros enviados

Campo Tipo Descrição
access_token String Chave de acesso

Retorno em caso de sucesso (status code 200 ou 201)

Retorno com Sucesso:

{
  "message":"Deleted",
  "id":"123",
  "code":200
}
Campo Tipo Descrição
message String Mensagem de retorno
:id Number Código do produto is_kit=1
code Number Código do retorno(200)

Especificações para o envio das imagens na API

Via API é possível enviar somente até 6 imagens, utilizando os campos citados acima do picture_source. Hoje, nossa plataforma recebe a url da imagem enviada na requisição, efetua o download e processa para a nossa cdn.

Dessa forma, para que a nossa plataforma possa realizar o processamento da imagem no envio via API, é necessário se atentar a especificações abaixo:

Gestão no envio das imagens Precisamos que seja realizado do lado ERP, uma gestão no envio dessas imagens, contemplando no fluxo da rotina do ERP, as seguintes situações:

Cadastro de um novo produto:

Atualização de imagem:

Não realizar o envio de imagens repetidas com a mesma url.

E não realizar o envio de imagens repetidas só alterando o nome da url.

PONTO DE ATENÇÃO

Para excluir uma imagem, hoje não disponibilizamos um endpoint específico para fazer uso do protocolo Delet, dessa forma, para excluir uma imagem via API, você deverá enviar um PUT, passando o campo vazio com espaço "", segue exemplo abaixo:

"picture_source_1": " ",
"picture_source_2": " ",
"picture_source_3": " ",
"picture_source_4": " ",
"picture_source_5": " ",
"picture_source_6": " "

Exemplo 1:

{
    "Product": {
        "picture_source_2": "http://imagem/imagem2.jpg"
    }
}

Caso o produto possua 6 imagens cadastradas e você deseje alterar apenas uma imagem, você deverá passar o campo somente daquela imagem. Conforme exemplo 1 ao lado:

Exemplo 2:

{
    "Product": {
        "picture_source_1": " ",
        "picture_source_2": "http://imagem/imagem2.jpg",
        "picture_source_3": " ",
        "picture_source_4": " ",
        "picture_source_5": " ",
        "picture_source_6": " "
    }
}

Pois caso passe dessa forma, exemplo 2 ao lado, as demais imagens serão deletadas e mesmo passando a imagem na posição dois, ela será considerado como posição 1, devido as outras terem sido excluídas.

Caso as imagens não tenham sido refletidas e no log do produto não conste nenhum reject, informando que houve falha, recomendamos que realize novamente o envio das imagens, através do PUT.

APIs de Produtos Vendidos

Listagem de Produtos Vendidos#get

Requisição para consultar os dados dos produtos vendidos.

Método GET

https://{api_address}/products_solds/:id

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/products_solds/'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/products_solds/');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/products_solds/");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/products_solds/")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Parâmetros enviados

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do produto vendido

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso

{
    "paging": {
        "total": 1,
        "page": 1,
        "offset": 0,
        "limit": 30,
        "maxLimit": 50
    },
    "sort": [
        {
            "id": "asc"
        }
    ],
    "availableFilters": [
        "id",
        "product_id"
    ],
    "appliedFilters": [],
    "ProductsSolds": [
        {
            "ProductsSold": {
                "id": "123",
                "product_id": "456",
                "order_id": "789",
                "name": "Produto de Teste",
                "price": "51.80",
                "original_price": "50.00",
                "quantity": "1",
                "model": "Modelo de Teste",
                "reference": "REF0001",
                "variant_id": "0",
                "additional_information": ""
            }
        }
    ]
}
Campo Tipo Descrição
paging Object Dados de paginação
total Number Total de registros
page Number Páginas corrente
offset Number Registro inicial da página
limit Number Limite de registros
maxLimit Number Máximo de registros
sort Object Ordenação
availableFilters String Filtros disponíveis
appliedFilters String Filtros utilizados
ProductsSolds Object Lista de produtos vendidos
ProductsSold Object Dados do produto vendido
id Number Código do produto vendido
product_id Number Código do produto
order_id Number Código do pedido
name String Nome do produto
price Decimal Valor de venda
original_price Decimal Valor original
quantity Number Quantidade vendida
model String Modelo
reference String Código de referência
variant_id Number Código da variação
additional_information String Informações adicionais

APIs de Pedidos

Listagem de Pedidos#get

Requisição para consultar os dados das categorias de forma estruturada.

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/orders'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/orders');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/orders");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/orders")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/orders

Parâmetros enviados

Campo Tipo Descrição
access_token String Chave de acesso
id Number Código do pedido
status String Status do pedido
partner_id String Código do parceiro
limit Number Limite de registros
page Number Página corrente
sort String Ordenação ex.: [campo]_[asc/desc]
modified Date Filtro de data de modificação, ex.: [start], [end] Formato: aaaa-mm-dd

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
  {
    "paging": {
        "total": 7,
        "page": 1,
        "offset": 0,
        "limit": 30,
        "maxLimit": 50
    },
    "sort": [
        {
          "id": "asc"
        }
    ],
    "availableFilters": [
        "id",
        "status",
        "partner_id",
        "session_id",
        "sending_code",
        "customer_id",
        "shipment",
        "point_sale",
        "payment_form",
        "access_code",
        "external_code",
        "has_payment",
        "has_invoice",
        "has_shipment",
        "with_statuses",
        "printed",
        "payment_method_id",
        "store_note",
        "discount_coupon",
        "modified",
        "date",
        "shipment_date",
        "payment_date"
    ],
    "appliedFilters": [],
    "Orders": [
      {
        "Order": {
            "status": "A ENVIAR",
            "id": "5",
            "date": "2020-12-07",
            "customer_id": "5",
            "partial_total": "35999.00",
            "taxes": "0.00",
            "discount": "0.00",
            "point_sale": "LOJA VIRTUAL",
            "shipment": "Correios Expresso",
            "shipment_value": "28.35",
            "shipment_date": "",
            "store_note": "07/12/2020 11:55:22 Pedido em 1 vez de R$ 27,027.60 através do Boleto - Yapay - Boleto",
            "discount_coupon": "natal25/8999.75",
            "payment_method_rate": "0.00",
            "value_1": "0.00",
            "payment_form": "Boleto - Yapay",
            "sending_code": "",
            "session_id": "rdlq7ogripa61r33p75bei8cj2",
            "total": "27027.60",
            "payment_date": "0000-00-00",
            "access_code": "DB91EEA5D671CA2",
            "progressive_discount": "0.00",
            "shipping_progressive_discount": "0.00",
            "shipment_integrator": "Frete Fácil",
            "modified": "2020-12-21 11:21:52",
            "printed": "",
            "interest": "0.00",
            "id_quotation": "3220",
            "estimated_delivery_date": "2020-12-22",
            "external_code": "",
            "has_payment": "0",
            "has_shipment": "0",
            "has_invoice": "1",
            "total_comission_user": "0.00",
            "total_comission": "0.00",
            "coupon": {
                "code": "natal25",
                "discount": "8999.75"
            },
            "is_traceable": "",
            "OrderStatus": {
                "id": "1",
                "default": "1",
                "type": "open",
                "show_backoffice": "1",
                "allow_edit_order": "0",
                "description": "",
                "status": "A ENVIAR",
                "show_status_central": "",
                "background": "#CAFAD1"
            },
            "PickupLocation": [],
            "ProductsSold": [
                {
                    "id": "5"
                }
            ],
            "Payment": [],
            "OrderInvoice": [
                {
                    "id": "7",
                    "link": ""
                }
            ],
            "MlOrder": [],
            "OrderTransactions": [],
            "MarketplaceOrder": [],
            "Extensions": []
        }
    }
}
Campo Tipo Descrição
paging Object Dados de paginação
total Number Total de registros
page Number Página corrente
offset Number Registro inicial da página
limit Number Limite de registros
maxLimit Number Máximo de registros
sort Object Ordenação
availableFilters String Filtros disponíveis
appliedFilters String Filtros utilizados
Orders Object Lista de produtos
Order Object Dados do pedido
id Number Código do pedido
status String Status do pedido
date Date Data do pedido
customer_id Number Código do cliente
partial_total Decimal Valor parcial do pedido
taxes Decimal Valor de acréscimo / taxa
discount Decimal Valor de desconto
shipment_value Decimal Valor de frete
shipment_date Date Data de envio do pedido
discount_coupon Decimal Código do cupom de desconto
payment_method_rate Decimal Taxa do meio de pagamento
value_1 Decimal Valor
payment_form String Forma de pagamento do pedido
sending_code String Código de Envio
session_id Number Código da sessão
total Number Valor total do pedido
payment_date Date Data de Pagamento
access_code String Código de acesso
shipment_integrator String Integrador de Envio
modified Date Data de Modificação
printed String "se o retorno for 1 - o pedido já foi impresso se o retorno for vazio """" - o pedido ainda não foi impresso"
interest Decimal Valor do Juros do Pedido
id_quotation Number Código externo de cotação de frete (Gateway de Frete)
estimated_delivery_date Number Tempo estimado de entrega
total_comission_user Decimal Comissão por usuario
total_comission Decimal Total de comissão
is_traceable Number É rastreavel
OrderStatus Object Detalhes de status do pedido
ProductsSold Object Lista de produtos do pedido
id Number Código dos produtos do pedido
Payment Object Informações de pagamento do pedido
id Number Código de pagamento do pedido
OrderInvoice Object Informações da nota fiscal do pedido
id Number Código da nota fiscal do pedido

Dados do Pedido#get

Requisição para consultar os dados das categorias de forma estruturada.

Método GET

https://{api_address}/orders/:id

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do pedido

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
  "Order": {
      "status": "FINALIZADO",
      "id": "15",
      "date": "2021-02-10",
      "hour": "11:28:21",
      "customer_id": "1",
      "partial_total": "59900.00",
      "taxes": "0.00",
      "discount": "0.00",
      "point_sale": "LOJA VIRTUAL",
      "shipment": "Correios Expresso",
      "shipment_value": "38.91",
      "shipment_date": "",
      "delivered": "",
      "shipping_cancelled": "",
      "store_note": "10/02/2021 11:28:28 Pedido em 1 vez de R$ 62,935.86 através do Boleto - Yapay - Boleto Link da transação: https://intermediador.yapay.com.br/orders/billet/17471d7cd90f7d3ee4643e1da0f15",
      "customer_note": "",
      "partner_id": "0",
      "discount_coupon": "",
      "payment_method_rate": "2996.95",
      "installment": "1",
      "value_1": "0.00",
      "sending_code": "",
      "sending_date": "0000-00-00",
      "billing_address": "0",
      "delivery_time": "3",
      "payment_method_id": "80",
      "payment_method": "Boleto - Yapay",
      "session_id": "k8ku3icuvb5uge2qj7u8gbtli6",
      "total": "62935.86",
      "payment_date": "2021-02-10",
      "access_code": "38D071AEFEF4960",
      "shipment_integrator": "Frete Fácil",
      "modified": "2021-05-06 10:38:45",
      "printed": "",
      "interest": "0.00",
      "id_quotation": "3220",
      "estimated_delivery_date": "2021-02-15",
      "is_traceable": "",
      "external_code": "",
      "tracking_url": "",
      "has_payment": "0",
      "has_shipment": "0",
      "has_invoice": "0",
      "total_comission_user": "0.00",
      "total_comission": "0.00",
      "OrderStatus": {
          "id": "69",
          "default": "1",
          "type": "closed",
          "show_backoffice": "1",
          "allow_edit_order": "0",
          "description": "",
          "status": "FINALIZADO",
          "show_status_central": "",
          "background": "#85CC8D"
      },
      "PickupLocation": [],
      "ProductsSold": [
          {
              "id": "17"
          }
      ],
      "Payment": [],
      "OrderInvoice": [],
      "MlOrder": [],
      "OrderTransactions": [
          {
              "url_payment": "https://intermediador.yapay.com.br/orders/billet/17471d7cd3ee4643e1da0f15"
          }
      ],
      "MarketplaceOrder": [],
      "Extensions": [],
      "CustomerAddress": {
          "id": "7"
      },
      "payments_notification": {
          "notification": "https://trayparceiros.commercesuite.com.br/loja/retorno_pagamento.php?loja=391250&gateway=5&codigoAcesso=38D071AEFEF4960¬ification=true"
      },
      "partner_name": ""
  }
}
Campo Tipo Descrição
Order Object Dados do pedido
id Number Código do pedido
status String Status do pedido
date Date Data do pedido
hour Hour Horário do pedido
customer_id Number Código do cliente
partial_total Decimal Valor parcial do pedido
taxes Decimal Valor de acréscimo / taxa
discount Decimal Valor de desconto
point_sale String Local de venda
shipment String Tipo de frete
shipment_value Decimal Valor de frete
shipment_date Date Data de envio do pedido
delivered Number Pedido enviado (Veja Tabela A)
store_note String Informações adicionais da loja
customer_note String Informações adicionais do cliente
partner_id Number Código do parceiro
discount_coupon Decimal Código do cupom de desconto
payment_method_rate Decimal Taxa do meio de pagamento
installment Number Quantidade de parcelas
value_1 Decimal Valor
sending_code String Código de envio
sending_date Date Data de envio
billing_address Number Código do endereço de cobrança
delivery_time String Tempo de entrega
payment_method_id Number Código do meio de pagamento
payment_method Number Meio de pagamento
session_id Number Código da sessão
total Number Valor total do pedido
access_code String Código de acesso
shipment_integrator String Integrador de envio
modified Date Data de Moticação
id_quotation Number Código externo de cotação de frete (Gateway de Frete)
estimated_delivery_date Number Tempo estimado de entrega
is_traceable Number É rastreavel
external_code String codigo externo
has_payment String "se o retorno for 1 - existe pagamento efetuado se o retorno for 0 - não há pagamento confirmado"
has_shipment String "se o retorno for 1 - existe forma de envio se o retorno for 0 - não há forma de envio"
has_invoice String "se o retorno for 1 - existe dados fiscais se o retorno for 0 - ainda não há dados fiscais"
printed String "se o retorno for 1 - o pedido já foi impresso se o retorno for vazio """" - o pedido ainda não foi impresso"
interest Decimal Valor do Juros do Pedido
total_comission_user String Total de commisão por Usuario
total_comission String Total de commisão
OrderStatus Object Detalhes do status do pedido
ProductsSold Object Lista de produtos do pedido
id Number Código dos produtos do pedido
Payment Object Informações de pagamento do pedido
id Number Código de pagamento do pedido
OrderInvoice Object Informações da nota fiscal do pedido
id Number Código da nota fiscal do pedido
CustomerAddress Object Informações de endereço do cliente
id Number Código de endereço do cliente
payments_notification Object Informações de notificação do pedido
notification String URL de notificação do pedido

Dados Completo do Pedido#get

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/orders/:id/complete'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/orders/:id/complete');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/orders/:id/complete");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/orders/:id/complete")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Requisição para consultar os dados das categorias de forma estruturada.

Método GET

https://{api_address}/orders/:id/complete

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do pedido

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
  "Order": {
      "status": "FINALIZADO",
      "id": "15",
      "date": "2021-02-10",
      "hour": "11:28:21",
      "customer_id": "1",
      "partial_total": "59900.00",
      "taxes": "0.00",
      "discount": "0.00",
      "point_sale": "LOJA VIRTUAL",
      "shipment": "Correios Expresso",
      "shipment_value": "38.91",
      "shipment_date": "",
      "delivered": "",
      "shipping_cancelled": "",
      "store_note": "10/02/2021 11:28:28 Pedido em 1 vez de R$ 62,935.86 através do Boleto - Yapay - Boleto Link da transação: https://intermediador.yapay.com.br/orders/billet/17471d7cd90fd3ee4643e1da0f15",
      "customer_note": "",
      "partner_id": "0",
      "discount_coupon": "",
      "payment_method_rate": "2996.95",
      "installment": "1",
      "value_1": "0.00",
      "sending_code": "",
      "sending_date": "0000-00-00",
      "billing_address": "0",
      "delivery_time": "3",
      "payment_method_id": "80",
      "payment_method": "Boleto - Yapay",
      "session_id": "k8ku3icuvb5uge2qj7u8gbtli6",
      "total": "62935.86",
      "payment_date": "2021-02-10",
      "access_code": "38D071AEFEF4960",
      "shipment_integrator": "Frete Fácil",
      "modified": "2021-05-06 10:38:45",
      "printed": "",
      "interest": "0.00",
      "id_quotation": "3220",
      "estimated_delivery_date": "2021-02-15",
      "is_traceable": "",
      "external_code": "",
      "tracking_url": "",
      "has_payment": "0",
      "has_shipment": "0",
      "has_invoice": "0",
      "total_comission_user": "0.00",
      "total_comission": "0.00",
      "OrderStatus": {
          "id": "69",
          "default": "1",
          "type": "closed",
          "show_backoffice": "1",
          "allow_edit_order": "0",
          "description": "",
          "status": "FINALIZADO",
          "show_status_central": "",
          "background": "#85CC8D"
      },
      "PickupLocation": [],
      "cost": "0",
      "urls": {
          "payment": "https://trayparceiros.commercesuite.com.br/loja/pagamento.php?loja=391250&pedido=38D071AEFEF4960"
      },
      "payment_method_type": "bank_billet",
      "Customer": {
          "cnpj": "",
          "newsletter": "0",
          "created": "0000-00-00 00:00:00",
          "terms": "0000-00-00 00:00:00",
          "id": "1",
          "name": "Nome Cliente",
          "registration_date": "2008-10-14",
          "rg": "",
          "cpf": "12442673177",
          "phone": "1434546185",
          "cellphone": "",
          "birth_date": "0000-00-00",
          "gender": "0",
          "email": "email@tray.com.br",
          "nickname": "",
          "token": "0BBB15A404B6BA1",
          "total_orders": "0",
          "observation": "Teste 2",
          "type": "0",
          "company_name": "",
          "state_inscription": "",
          "reseller": "0",
          "discount": "0.000",
          "blocked": "",
          "credit_limit": "0.00",
          "indicator_id": "0",
          "profile_customer_id": "1",
          "last_sending_newsletter": "0000-00-00",
          "last_purchase": "2021-02-23",
          "last_visit": "2021-02-25",
          "last_modification": "0000-00-00 00:00:00",
          "address": "Rua Teste",
          "zip_code": "17500-000",
          "number": "55",
          "complement": "Casa 26",
          "neighborhood": "Centro",
          "city": "Marília",
          "state": "SP",
          "country": "Brasil",
          "modified": "2021-04-05 09:33:59",
          "Extensions": {
              "Profile": {
                  "id": "1",
                  "name": "Padrao"
              },
              "Profiles": [
                  {
                      "id": "1",
                      "price_list_id": "0",
                      "name": "Padrao",
                      "approves_registration": "0",
                      "show_price": "",
                      "theme_id": "0",
                      "selected": "1"
                  }
              ]
          },
          "CustomerAddresses": [
              {
                  "CustomerAddress": {
                      "id": "7",
                      "customer_id": "1",
                      "address": "Rua Teste",
                      "number": "55",
                      "complement": "Casa 26",
                      "neighborhood": "Centro",
                      "city": "Marília",
                      "state": "SP",
                      "zip_code": "17500-000",
                      "country": "Brasil",
                      "type": "1",
                      "active": "1",
                      "description": "Residencial",
                      "recipient": "",
                      "type_delivery": "1",
                      "not_list": "0"
                  }
              }
          ]
      },
      "ProductsSold": [
          {
              "ProductsSold": {
                  "product_kit_id": "0",
                  "product_kit_id_kit": "0",
                  "id_campaign": "0",
                  "product_id": "13",
                  "quantity": "1",
                  "id": "17",
                  "order_id": "15",
                  "name": "Notebook Alienware Gamer,
                  "original_name": "Notebook Alienware Gamer",
                  "virtual_product": "0",
                  "ean": "",
                  "Sku": [
                      {
                        "type": "Voltagem",
                        "value": "110v"
                      }
                  ],
                  "price": "59900.00",
                  "cost_price": "0.00",
                  "original_price": "59900.00",
                  "weight": "3000",
                  "weight_cubic": "15000",
                  "brand": "Dell Alienware",
                  "model": "area51m",
                  "reference": "",
                  "length": "40",
                  "width": "45",
                  "height": "40",
                  "variant_id": "25",
                  "additional_information": "",
                  "text_variant": "",
                  "warranty": "",
                  "bought_together_id": "0",
                  "ncm": "",
                  "included_items": "",
                  "release_date": "",
                  "commissioner_value": "0.00",
                  "comissao": "0.00",
                  "ProductSoldImage": [
                      {
                        "http": "http://images.tcdn.com.br/img/img_prod/391250/notebook_alienware_gamer_13_1_8396502fb367dd214dd15f06782390c3.png",
                        "https": "https://images.tcdn.com.br/img/img_prod/391250/notebook_alienware_gamer_13_1_8396502fb367dd214dd15f06782390c3.png",
                        "thumbs": {
                            "30": {
                                "http": "http://images.tcdn.com.br/img/img_prod/391250/30_notebook_alienware_gamer_13_1_8396502fb367dd214dd15f06782390c3.png",
                                "https": "https://images.tcdn.com.br/img/img_prod/391250/30_notebook_alienware_gamer_13_1_8396502fb367dd214dd15f06782390c3.png"
                            },
                            "90": {
                                "http": "http://images.tcdn.com.br/img/img_prod/391250/90_notebook_alienware_gamer_13_1_8396502fb367dd214dd15f06782390c3.png",
                                "https": "https://images.tcdn.com.br/img/img_prod/391250/90_notebook_alienware_gamer_13_1_8396502fb367dd214dd15f06782390c3.png"
                            },
                            "180": {
                                "http": "http://images.tcdn.com.br/img/img_prod/391250/180_notebook_alienware_gamer_13_1_8396502fb367dd214dd15f06782390c3.png",
                                "https": "https://images.tcdn.com.br/img/img_prod/391250/180_notebook_alienware_gamer_13_1_8396502fb367dd214dd15f06782390c3.png"
                            }
                          }
                      }
                  ],
                  "Category": [
                      {
                        "id": "5",
                        "name": "Notebooks",
                        "main_category": "0"
                      },
                      {
                        "id": "15",
                        "name": "Gamer",
                        "main_category": "1"
                      }
                  ],
                  "is_giveaway": "",
                  "BoughtTogether": [],
                  "url": {
                    "http": "http://trayparceiros.commercesuite.com.br/notebooks/gamer/notebook-alienware-gamer",
                    "https": "https://trayparceiros.commercesuite.com.br/notebooks/gamer/notebook-alienware-gamer"
                  },
                  "Discount": [],
                  "Stock": {
                    "id": "1",
                    "name": "Loja"
                  }
              }
          }
      ],
      "OrderInvoice": [],
      "Payment": [],
      "MlOrder": [],
      "MarketplaceOrder": [
            {
                "MarketplaceOrder": {
                    "order_id": "123456",
                    "marketplace_name": "Dafiti",
                    "marketplace_seller_name": "Loja",
                    "marketplace_seller_id": "",
                    "marketplace_document": "1154987592",
                    "payment_responsible_document": "11200456549",
                    "marketplace_order_id": "987654",
                    "marketplace_shipping_id": "",
                    "marketplace_shipping_type": "",
                    "marketplace_internal_status": "",
                    "created": "2021-06-11 10:00:51",
                    "updated": "2021-06-11 10:00:51"
                }
            }
        ],
      "OrderTransactions": [
          {
            "url_payment": "https://intermediador.yapay.com.br/orders/billet/17471d7cd90f3ee4643e1da0f15"
          }
      ],
      "OrderInvoiceAmount": [],
      "PaymentMethodMessage": {
        "text": "",
        "text_pag": "",
        "text_confirm": "",
        "confirmation": "0"
      },
      "payments_notification": {
        "notification": "https://trayparceiros.commercesuite.com.br/loja/retorno_pagamento.php?loja=391250&gateway=5&codigoAcesso=38D071AEFEF4960¬ification=true"
      },
      "partner_name": ""
  },
  "Extensions": [],
  "User": [],
  "Confirmation": []
}
Campo Tipo Descrição
Order Object Dados do pedido
id Number Código do pedido
status String Status do pedido
date Date Data do pedido
hour Hour Horário do pedido
customer_id Number Id do usuario
partial_total Decimal Valor parcial do pedido
taxes Decimal Valor de acréscimo / taxa
discount Decimal Valor de desconto
point_sale String Local de venda
shipment String Tipo de frete
shipment_value Decimal Valor de frete
shipment_date Date Data de envio do pedido
delivered Number Pedido enviado (Veja Tabela A)
store_note String Informações adicionais da loja
customer_note String Informações adicionais do cliente
partner_id Number Código do parceiro
discount_coupon Decimal Código do cupom de desconto
PickupLocation String Dados referente ao ponto de coleta dos Correios
shipping_id Number Id da modalidade de frete selecionada
code Number Código da agência no sistema dos Correios em que o produto será retirado
name String Nome da agência dos Correios em que o produto será retirado
address String Dados do endereço da agência dos Correios onde o produto será retirado
value Number Valor do frete
information String Dados gerais sobre a retirada do produto
cellphone Number Telefone para contato da agência
payment_method_rate Decimal Taxa do meio de pagamento
installment Number Quantidade de parcelas
sending_code String Código de envio
sending_date Date Data de envio
billing_address Number Código do endereço de cobrança
delivery_time String Tempo de entrega
payment_method_id Number Código do meio de pagamento
payment_method Number Meio de pagamento
session_id Number Código da sessão
total Number Valor total do pedido
modified Number Data de modificação do pedido
id_quotation Number Código externo de cotação de frete (Gateway de Frete)
estimated_delivery_date Number Tempo estimado de entrega
has_payment String "se o retorno for 1 - existe pagamento efetuado se o retorno for 0 - não há pagamento confirmado"
has_shipment String "se o retorno for 1 - existe forma de envio se o retorno for 0 - não há forma de envio"
has_invoice String "se o retorno for 1 - existe dados fiscais se o retorno for 0 - ainda não há dados fiscais"
printed String "se o retorno for 1 - o pedido já foi impresso se o retorno for vazio """" - o pedido ainda não foi impresso"
interest Decimal Valor do Juros do Pedido
cupom Object Dados do cupom de desconto
code Object Código do cupom de desconto
discount Object Valor de desconto
Customer Object Dados do cliente
id Number Código do cliente
name String Nome
rg String RG
cpf String CPF
phone String Telefone fixo
cellphone String Telefone celular
birth_date Date Data de aniversário
gender Number Sexo (Veja Tabela C)
email String E-mail
nickname String Apelido
token String Chave única do cliente
total_orders Number Total de pedidos
observation String Informações sobre o cliente
type Number Tipo de cliente (Veja Tabela B)
cnpj String CNPJ
company_name String Razão social
state_inscription String Inscrição estatual
reseller Number Cliente revendedor
discount Decimal Valor de desconto
blocked Number Cliente bloqueado (Veja Tabela F)
credit_limit Decimal Valor de crédito
indicator_id Number Código de indicação
profile_customer_id Number Código do perfil do cliente
last_sending_newsletter Date Data do último envio de newsletter
last_purchase Date Data da última compra
last_visit Date Data da última visita
last_modification Date Data de modificação
address String Logradouro
zip_code String CEP
Number Number Número do endereço
complement String Complemento
neighborhood String Bairro
city String Cidade
state String Sigla do estado
newsletter Number Newsletter ativa
registration_date Date Data de registro
modified Date Data de modificação
CustomerAddresses Object Lista de endereços do cliente
CustomerAddress Object Endereços do cliente
id String Código do endereço do cliente
customer_id String Código do cliente
recipient String Nome do cliente
address String Logradouro
Number Number Número do endereço
complement String Complemento
neighborhood String Bairro
city String Cidade
state String Sigla do estado
zip_code String CEP
country String País
type Number Tipo de endereço (Veja Tabela D)
active Number Endereço ativo (Veja Tabela E)
description String Descrição do Endereço
ProductsSolds Object Lista de produtos vendidos
ProductsSold Object Dados do produto vendido
id Number Código do produto vendido
product_id Number Código do produto
order_id Number Código do pedido
name String Nome do produto
original_price Decimal Valor original
weight Number Peso
weight_cubic Number Peso cúbico
quantity Number Quantidade vendida
model String Modelo
reference String Código de referência
length String Comprimento do produto
width String Largura do produto
height String Altura do produto
variant_id Number Código da variação
additional_information String Informações adicionais
OrderInvoices Object Listagem das notas fiscais
OrderInvoice Object Dados da nota fiscal
id Number Código da nota fiscal
order_id String Código do pedido
issue_date Date Data de emissão
Number String Número da nota fiscal
serie String Série da nota fiscal
value Decimal Valor total da nota fiscal
key String Chave da nota fiscal
link String URL de acesso da nota fiscal
xml_danfe String XML Danfe
ProductCfop Object Dados dos produtos CFOP
product_id Number Código do produto
cfop Number Código CFOP
order_invoice_id Number Código da nota fiscal
Payment Object Informações de pagamento do pedido
Payment Object Informações de pagamento do pedido
id Number Código do pagamento do pedido
order_id Number Código do pedido
payment_method_id Number Código da forma de pagamento
method String Nome da forma de pagamento
payment_place String Local do pagamento
value Decimal Valor do pagamento
date Date Data do pagamento
note String Observação do pagamento
created Date Data de criação do pagamento
modified Date Data de modificação do pagamento
MlOrder Object "Lista de Dados do Mercado Livre *verificar retorno dos campos do ML no rodapé"
MlOrder Object "Dados do Mercado Livre *verificar retorno dos campos do ML no rodapé"
marketplace_name String Nome do Marketplace
marketplace_seller_name String Nome do Seller junto ao marketplace
marketplace_seller_id String Id do vendedor junto ao marketplace
marketplace_document String CNPJ do marketplace
payment_responsible_document String CNPJ do intermediador de pagamento que processou o pagamento
marketplace_order_id String Id do pedido junto ao marketplace
marketplace_shipping_id String Id do envio junto ao marketplace (OBS. Não é o código de rastreio)
marketplace_shipping_type String Tipo de envio do marketplace
marketplace_internal_status String Status do pedido dentro do marketplace
id Number Codigo interno
created Date Data de criação
updated Date Data de atualização
cliente_id Number Código interno do cliente
codigo Number Código do Mercado Livre
item_id String Código do item
user_id Number Código do usuário no Mercado Livre
nickname String Apelido do usuário
mercado_envio String Código do mercado envio
shipment_id Number Código do envio
status_frete_ml String Status de frete do Mercado Livre
substatus_frete_ml String Substatus de frete do Mercado Livre
ml_coleta Number Coleta do Mercado Livre
romaneio_id Number Código do romaneio
invoice_data_id Number Código da data da fatura
service_id Number Código do serviço
order_id Number Código interno do pedido
ml_collect Number Coletado pelo Mercado Livre
shipping_mode String Modo de envio
payments_notification Object Informações de notificação do pedido
notification String URL de notificação do pedido

Cadastrar Pedido#post

Requisição para consultar os dados das categorias de forma estruturada.

Código de Exemplo:

curl --location -g --request POST 'https://{api_address}/orders?access_token={{access_token}}' \
--data-urlencode '["Order"]["point_sale"]=PARTICULAR' \
--data-urlencode '["Order"]["session_id"]=0BBB15A404B6BA1' \
--data-urlencode '["Order"]["shipment"] =Sedex' \
--data-urlencode '["Order"]["shipment_value"]=10.44' \
--data-urlencode '["Order"]["payment_form"]=Boleto - TrayCheckout' \
--data-urlencode '["Order"]["Customer"]["type"]=0' \
--data-urlencode '["Order"]["Customer"]["name"]=Nome do Cliente' \
--data-urlencode '["Order"]["Customer"]["cpf"]=00000000000' \
--data-urlencode '["Order"]["Customer"]["email"]=email@docliente.com' \
--data-urlencode '["Order"]["Customer"]["rg"]=00.000.000-X' \
--data-urlencode '["Order"]["Customer"]["gender"]=M' \
--data-urlencode '["Order"]["Customer"]["phone"]=1133330001' \
--data-urlencode '["Order"]["Customer"]["CustomerAddress"][0]["address"]=Endereço do Cliente' \
--data-urlencode '["Order"]["Customer"]["CustomerAddress"][0]["zip_code"]=04001001' \
--data-urlencode '["Order"]["Customer"]["CustomerAddress"][0]["number"]=123' \
--data-urlencode '["Order"]["Customer"]["CustomerAddress"][0]["complement"]=Sala 123' \
--data-urlencode '["Order"]["Customer"]["CustomerAddress"][0]["neighborhood"] =Bairro do Cliente' \
--data-urlencode '["Order"]["Customer"]["CustomerAddress"][0]["city"]=Cidade do Cliente' \
--data-urlencode '["Order"]["Customer"]["CustomerAddress"][0]["state"]=SP' \
--data-urlencode '["Order"]["Customer"]["CustomerAddress"][0]["country"]=BRASIL' \
--data-urlencode '["Order"]["Customer"]["CustomerAddress"][0]["type"]=1' \
--data-urlencode '["Order"]["Customer"]["ProductsSold"][0]["product_id"]=1' \
--data-urlencode '["Order"]["Customer"]["ProductsSold"][0]["variant_id"]=12' \
--data-urlencode '["Order"]["Customer"]["ProductsSold"][0]["price"]=42.90' \
--data-urlencode '["Order"]["Customer"]["ProductsSold"][0]["original_price"]=42.90' \
--data-urlencode '["Order"]["Customer"]["ProductsSold"][0]["quantity"]=1' \
--data-urlencode '["Order"]["MarketplaceOrder""]["marketplace_name"]=Mercado Livre' \
--data-urlencode '["Order"]["MarketplaceOrder""]["marketplace_seller_name"]=1234567890' \
--data-urlencode '["Order"]["MarketplaceOrder""]["marketplace_seller_id"]=273480425' \
--data-urlencode '["Order"]["MarketplaceOrder""]["marketplace_document"]=0000000000000' \
--data-urlencode '["Order"]["MarketplaceOrder""]["payment_responsible_document"]=0000000000000' \
--data-urlencode '["Order"]["MarketplaceOrder""]["marketplace_order_id"]=4429804558' \
--data-urlencode '["Order"]["MarketplaceOrder""]["marketplace_shipping_id"]=40457395268' \
--data-urlencode '["Order"]["MarketplaceOrder""]["marketplace_shipping_type"]=me2' \
--data-urlencode '["Order"]["MarketplaceOrder""]["marketplace_internal_status"]=shipping'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/orders?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->addPostParameter(array(
  '["Order"]["point_sale"]' => 'PARTICULAR',
  '["Order"]["session_id"] ' => '0BBB15A404B6BA1',
  '["Order"]["shipment"] ' => 'Sedex',
  '["Order"]["shipment_value"]' => '10.44',
  '["Order"]["payment_form"]' => 'Boleto - TrayCheckout',
  '["Order"]["Customer"]["type"]' => '0',
  '["Order"]["Customer"]["name"]' => 'Nome do Cliente',
  '["Order"]["Customer"]["cpf"]' => '00000000000',
  '["Order"]["Customer"]["email"]' => 'email@docliente.com',
  '["Order"]["Customer"]["rg"]' => '00.000.000-X',
  '["Order"]["Customer"]["gender"]' => 'M',
  '["Order"]["Customer"]["phone"]' => '1133330001',
  '["Order"]["Customer"]["CustomerAddress"][0]["address"]' => 'Endereço do Cliente',
  '["Order"]["Customer"]["CustomerAddress"][0]["zip_code"]' => '04001001',
  '["Order"]["Customer"]["CustomerAddress"][0]["number"]' => '123',
  '["Order"]["Customer"]["CustomerAddress"][0]["complement"]' => 'Sala 123',
  '["Order"]["Customer"]["CustomerAddress"][0]["neighborhood"] ' => 'Bairro do Cliente',
  '["Order"]["Customer"]["CustomerAddress"][0]["city"]' => 'Cidade do Cliente',
  '["Order"]["Customer"]["CustomerAddress"][0]["state"]' => 'SP',
  '["Order"]["Customer"]["CustomerAddress"][0]["country"]' => 'BRASIL',
  '["Order"]["Customer"]["CustomerAddress"][0]["type"]' => '1',
  '["Order"]["Customer"]["ProductsSold"][0]["product_id"]' => '1',
  '["Order"]["Customer"]["ProductsSold"][0]["variant_id"]' => '12',
  '["Order"]["Customer"]["ProductsSold"][0]["price"]' => '42.90',
  '["Order"]["Customer"]["ProductsSold"][0]["original_price"]' => '42.90',
  '["Order"]["Customer"]["ProductsSold"][0]["quantity"]' => '1',
  '["Order"]["MarketplaceOrder""]["marketplace_name"]' => 'Mercado Livre',
  '["Order"]["MarketplaceOrder""]["marketplace_seller_name"]' => '1234567890',
  '["Order"]["MarketplaceOrder""]["marketplace_seller_id"]' => '273480425',
  '["Order"]["MarketplaceOrder""]["marketplace_document"]' => '0000000000000',
  '["Order"]["MarketplaceOrder""]["payment_responsible_document"]' => '0000000000000',
  '["Order"]["MarketplaceOrder""]["marketplace_order_id"]' => '4429804558',
  '["Order"]["MarketplaceOrder""]["marketplace_shipping_id"]' => '40457395268',
  '["Order"]["MarketplaceOrder""]["marketplace_shipping_type"]' => 'me2',
  '["Order"]["MarketplaceOrder""]["marketplace_internal_status"]' => 'shipping'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/orders?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddParameter("[\"Order\"][\"point_sale\"]", "PARTICULAR");
request.AddParameter("[\"Order\"][\"session_id\"]", "0BBB15A404B6BA1");
request.AddParameter("[\"Order\"][\"shipment\"] ", "Sedex");
request.AddParameter("[\"Order\"][\"shipment_value\"]", "10.44");
request.AddParameter("[\"Order\"][\"payment_form\"]", "Boleto - TrayCheckout");
request.AddParameter("[\"Order\"][\"Customer\"][\"type\"]", "0");
request.AddParameter("[\"Order\"][\"Customer\"][\"name\"]", "Nome do Cliente");
request.AddParameter("[\"Order\"][\"Customer\"][\"cpf\"]", "00000000000");
request.AddParameter("[\"Order\"][\"Customer\"][\"email\"]", "email@docliente.com");
request.AddParameter("[\"Order\"][\"Customer\"][\"rg\"]", "00.000.000-X");
request.AddParameter("[\"Order\"][\"Customer\"][\"gender\"]", "M");
request.AddParameter("[\"Order\"][\"Customer\"][\"phone\"]", "1133330001");
request.AddParameter("[\"Order\"][\"Customer\"][\"CustomerAddress\"][0][\"address\"]", "Endereço do Cliente");
request.AddParameter("[\"Order\"][\"Customer\"][\"CustomerAddress\"][0][\"zip_code\"]", "04001001");
request.AddParameter("[\"Order\"][\"Customer\"][\"CustomerAddress\"][0][\"number\"]", "123");
request.AddParameter("[\"Order\"][\"Customer\"][\"CustomerAddress\"][0][\"complement\"]", "Sala 123");
request.AddParameter("[\"Order\"][\"Customer\"][\"CustomerAddress\"][0][\"neighborhood\"] ", "Bairro do Cliente");
request.AddParameter("[\"Order\"][\"Customer\"][\"CustomerAddress\"][0][\"city\"]", "Cidade do Cliente");
request.AddParameter("[\"Order\"][\"Customer\"][\"CustomerAddress\"][0][\"state\"]", "SP");
request.AddParameter("[\"Order\"][\"Customer\"][\"CustomerAddress\"][0][\"country\"]", "BRASIL");
request.AddParameter("[\"Order\"][\"Customer\"][\"CustomerAddress\"][0][\"type\"]", "1");
request.AddParameter("[\"Order\"][\"Customer\"][\"ProductsSold\"][0][\"product_id\"]", "1");
request.AddParameter("[\"Order\"][\"Customer\"][\"ProductsSold\"][0][\"variant_id\"]", "12");
request.AddParameter("[\"Order\"][\"Customer\"][\"ProductsSold\"][0][\"price\"]", "42.90");
request.AddParameter("[\"Order\"][\"Customer\"][\"ProductsSold\"][0][\"original_price\"]", "42.90");
request.AddParameter("[\"Order\"][\"Customer\"][\"ProductsSold\"][0][\"quantity\"]", "1");
request.AddParameter("[\"Order\"][\"MarketplaceOrder\"\"][\"marketplace_name\"]", "Mercado Livre");
request.AddParameter("[\"Order\"][\"MarketplaceOrder\"\"][\"marketplace_seller_name\"]", "1234567890");
request.AddParameter("[\"Order\"][\"MarketplaceOrder\"\"][\"marketplace_seller_id\"]", "273480425");
request.AddParameter("[\"Order\"][\"MarketplaceOrder\"\"][\"marketplace_document\"]", "0000000000000");
request.AddParameter("[\"Order\"][\"MarketplaceOrder\"\"][\"payment_responsible_document\"]", "0000000000000");
request.AddParameter("[\"Order\"][\"MarketplaceOrder\"\"][\"marketplace_order_id\"]", "4429804558");
request.AddParameter("[\"Order\"][\"MarketplaceOrder\"\"][\"marketplace_shipping_id\"]", "40457395268");
request.AddParameter("[\"Order\"][\"MarketplaceOrder\"\"][\"marketplace_shipping_type\"]", "me2");
request.AddParameter("[\"Order\"][\"MarketplaceOrder\"\"][\"marketplace_internal_status\"]", "shipping");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "[\"Order\"][\"point_sale\"]=PARTICULAR&[\"Order\"][\"session_id\"]=0BBB15A404B6BA1&[\"Order\"][\"shipment\"] =Sedex&[\"Order\"][\"shipment_value\"]=10.44&[\"Order\"][\"payment_form\"]=Boleto - TrayCheckout&[\"Order\"][\"Customer\"][\"type\"]=0&[\"Order\"][\"Customer\"][\"name\"]=Nome do Cliente&[\"Order\"][\"Customer\"][\"cpf\"]=00000000000&[\"Order\"][\"Customer\"][\"email\"]=email@docliente.com&[\"Order\"][\"Customer\"][\"rg\"]=00.000.000-X&[\"Order\"][\"Customer\"][\"gender\"]=M&[\"Order\"][\"Customer\"][\"phone\"]=1133330001&[\"Order\"][\"Customer\"][\"CustomerAddress\"][0][\"address\"]=Endereço do Cliente&[\"Order\"][\"Customer\"][\"CustomerAddress\"][0][\"zip_code\"]=04001001&[\"Order\"][\"Customer\"][\"CustomerAddress\"][0][\"number\"]=123&[\"Order\"][\"Customer\"][\"CustomerAddress\"][0][\"complement\"]=Sala 123&[\"Order\"][\"Customer\"][\"CustomerAddress\"][0][\"neighborhood\"] =Bairro do Cliente&[\"Order\"][\"Customer\"][\"CustomerAddress\"][0][\"city\"]=Cidade do Cliente&[\"Order\"][\"Customer\"][\"CustomerAddress\"][0][\"state\"]=SP&[\"Order\"][\"Customer\"][\"CustomerAddress\"][0][\"country\"]=BRASIL&[\"Order\"][\"Customer\"][\"CustomerAddress\"][0][\"type\"]=1&[\"Order\"][\"Customer\"][\"ProductsSold\"][0][\"product_id\"]=1&[\"Order\"][\"Customer\"][\"ProductsSold\"][0][\"variant_id\"]=12&[\"Order\"][\"Customer\"][\"ProductsSold\"][0][\"price\"]=42.90&[\"Order\"][\"Customer\"][\"ProductsSold\"][0][\"original_price\"]=42.90&[\"Order\"][\"Customer\"][\"ProductsSold\"][0][\"quantity\"]=1&[\"Order\"][\"MarketplaceOrder\"\"][\"marketplace_name\"]=Mercado Livre&[\"Order\"][\"MarketplaceOrder\"\"][\"marketplace_seller_name\"]=1234567890&[\"Order\"][\"MarketplaceOrder\"\"][\"marketplace_seller_id\"]=273480425&[\"Order\"][\"MarketplaceOrder\"\"][\"marketplace_document\"]=0000000000000&[\"Order\"][\"MarketplaceOrder\"\"][\"payment_responsible_document\"]=0000000000000&[\"Order\"][\"MarketplaceOrder\"\"][\"marketplace_order_id\"]=4429804558&[\"Order\"][\"MarketplaceOrder\"\"][\"marketplace_shipping_id\"]=40457395268&[\"Order\"][\"MarketplaceOrder\"\"][\"marketplace_shipping_type\"]=me2&[\"Order\"][\"MarketplaceOrder\"\"][\"marketplace_internal_status\"]=shipping");
Request request = new Request.Builder()
  .url("https://{api_address}/orders?access_token={{access_token}}")
  .method("POST", body)
  .build();
Response response = client.newCall(request).execute();

Método POST

https://{api_address}/orders?access_token={{access_token}}

Parâmetros enviados:

Estrutura do Json:

{
    "Order":{
      "point_sale":"PARTICULAR",
      "session_id": "0BBB15A404B6BA1",
      "shipment":"Sedex",
      "shipment_value":"10.44",
      "payment_form":"Boleto - TrayCheckout",
      "Customer":{"type":"0",
      "name":"Nome do Cliente",
      "cpf":"00000000000",
      "email":"email@docliente.com",
      "rg":"00.000.000-X",
      "gender":"M",
      "phone":"1133330001",
      "CustomerAddress":[{
          "address":"Endereço do Cliente",
          "zip_code":"04001001",
          "number":"123",
          "complement":"Sala 123",
          "neighborhood":"Bairro do Cliente",
          "city":"Cidade do Cliente",
          "state":"SP",
          "country":"BRA",
          "type":"1"
          }
      ]},
      "ProductsSold":[{
          "product_id":1,
          "variant_id":12,
          "price":"42.90",
          "original_price":"42.90",
          "quantity":1  
        }
      ],
      "MarketplaceOrder": [{
          "marketplace_name": "Mercado Livre",
          "marketplace_seller_name": "1234567890",
          "marketplace_seller_id": "273480425",
          "marketplace_document": "0000000000000",
          "payment_responsible_document": "0000000000000",
          "marketplace_order_id": "4429804558",
          "marketplace_shipping_id": "40457395268",
          "marketplace_shipping_type": "me2",
          "marketplace_internal_status": "shipping"
        }
      ]
    }    
}
Campo Tipo Descrição
access_token String Chave de acesso
Order JSON Dados do pedido
point_sale String (45) Local de venda
session_id String Sessão do Pedido
shipment String (100) Tipo de frete
shipment_value Decimal (9) Valor de frete
payment_form String (50) Forma de pagamento
Customer Object Informações do cliente
type Object Tipo do cliente (Veja Tabela B)
name Object (300) Nome completo do cliente
cpf Object CPF do cliente
email Object (100) E-mail do cliente
rg Object RG do cliente
gender Object (1) Sexo do cliente (Veja Tabela C)
phone Object Telefone do cliente
CustomerAddress Object (200) Informações de endereços do cliente
address Number (9) Logradouro
zip_code Number (8) CEP
number Number (9) Número
complement Number (60) Complemento
neighborhood Number (100) Bairro
city Number (200) Cidade
state Number (2) Sigla do estado
country Number (3) Sigla do país
type Number Tipo de endereço (Veja Tabela D)
ProductsSold Object Lista de produtos do pedido
product_id Number Código do produto
variant_id Number Código da variação do produto
price Number Preço do produto
original_price Number Valor original do produto
quantity Number Quantidade vendida do produto
marketplace_name String Nome do Marketplace
marketplace_seller_name String Nome do Seller junto ao marketplace
marketplace_seller_id String Id do vendedor junto ao marketplace
marketplace_document String CNPJ do marketplace
payment_responsible_document String CNPJ do intermediador de pagamento que processou o pagamento
marketplace_order_id String Id do pedido junto ao marketplace
marketplace_shipping_id String Id do envio junto ao marketplace (OBS. Não é o código de rastreio)
marketplace_shipping_type String Tipo de envio do marketplace
marketplace_internal_status String Status do pedido dentro do marketplace

Retorno em caso de sucesso (status code 200 ou 201):

Retorno de Sucesso:

{       
    "message":"Created",    
    "id":"123",    
    "code":201
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código do pedido
code Number Código do retorno (201)

Atualizar Dados do Pedido#put

Requisição para alterar os dados de um pedido. Deverá enviar o JSON com os dados do pedido para a alteração.

Código de Exemplo:

curl --location -g --request PUT 'https://{api_address}/orders/:id?access_token={{access_token}}' \
--data-urlencode '["Order"]["status_id"]=16' \
--data-urlencode '["Order"]["taxes"]=0.01' \
--data-urlencode '["Order"]["shipment"]=Sedex' \
--data-urlencode '["Order"]["shipment_value"]=5.58' \
--data-urlencode '["Order"]["discount"]=0.01' \
--data-urlencode '["Order"]["sending_code"]=123456' \
--data-urlencode '["Order"]["sending_date"]=2015-04-20' \
--data-urlencode '["Order"]["store_note"]=Pedido em 1 vez de R$ 51,85 através do Boleto.' \
--data-urlencode '["Order"]["customer_note"]=' \
--data-urlencode '["Order"]["partner_id"]=2'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/orders/:id?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_PUT);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->addPostParameter(array(
  '["Order"]["status_id"]' => '16',
  '["Order"]["taxes"]' => '0.01',
  '["Order"]["shipment"]' => 'Sedex',
  '["Order"]["shipment_value"]' => '5.58',
  '["Order"]["discount"]' => '0.01',
  '["Order"]["sending_code"]' => '123456',
  '["Order"]["sending_date"]' => '2015-04-20',
  '["Order"]["store_note"]' => 'Pedido em 1 vez de R$ 51,85 através do Boleto.',
  '["Order"]["customer_note"]' => '',
  '["Order"]["partner_id"]' => '2'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/orders/:id?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.PUT);
request.AddParameter("[\"Order\"][\"status_id\"]", "16");
request.AddParameter("[\"Order\"][\"taxes\"]", "0.01");
request.AddParameter("[\"Order\"][\"shipment\"]", "Sedex");
request.AddParameter("[\"Order\"][\"shipment_value\"]", "5.58");
request.AddParameter("[\"Order\"][\"discount\"]", "0.01");
request.AddParameter("[\"Order\"][\"sending_code\"]", "123456");
request.AddParameter("[\"Order\"][\"sending_date\"]", "2015-04-20");
request.AddParameter("[\"Order\"][\"store_note\"]", "Pedido em 1 vez de R$ 51,85 através do Boleto.");
request.AddParameter("[\"Order\"][\"customer_note\"]", "");
request.AddParameter("[\"Order\"][\"partner_id\"]", "2");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "[\"Order\"][\"status_id\"]=16&[\"Order\"][\"taxes\"]=0.01&[\"Order\"][\"shipment\"]=Sedex&[\"Order\"][\"shipment_value\"]=5.58&[\"Order\"][\"discount\"]=0.01&[\"Order\"][\"sending_code\"]=123456&[\"Order\"][\"sending_date\"]=2015-04-20&[\"Order\"][\"store_note\"]=Pedido em 1 vez de R$ 51,85 através do Boleto.&[\"Order\"][\"customer_note\"]=&[\"Order\"][\"partner_id\"]=2");
Request request = new Request.Builder()
  .url("https://{api_address}/orders/:id?access_token={{access_token}}")
  .method("PUT", body)
  .build();
Response response = client.newCall(request).execute();

Método PUT

https://{api_address}/orders/:id

Parâmetros enviados:

Estrutura do Json:

{
    "Order": {
        "status_id": "16",
        "taxes": "0.01",
        "shipment": "Sedex",
        "shipment_value": "0.01",
        "discount": "0.01",
        "sending_code": "123456",
        "sending_date": "2015-04-20",
        "store_note": "Pedido em 1 vez de R$ 51,85 através do Boleto.",
        "customer_note": "",
        "partner_id": "2"
    }
}
Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do pedido
Order JSON Dados do pedido
status_id Number Código de status do pedido
taxes Decimal Valor de acréscimo / taxa
shipment Decimal Tipo de frete
shipment_value Decimal Valor de frete
discount Decimal Valor de desconto
sending_code String Código de envio
sending_date Date Data de envio
store_note String Informações adicionais da loja
customer_note String Informações adicionais do cliente
partner_id Number Código do parceiro

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{       
    "message":"Saved",    
    "id":"123",    
    "code":200
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código do pedido
code Number Código do retorno (201)

Cancelar Pedido#put

Requisição para cancelar um pedido.

Método PUT

https://{api_address}/orders/cancel/:id

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do pedido

Retorno em caso de sucesso(status code 200 ou 201):

Retorno de Sucesso:

{       
    "message":"Saved",    
    "id":"123",    
    "code":200
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código do pedido
code Number Código do retorno (201)

Incluir Produtos no Pedido#post

Requisição para inclusão de um produto no pedido. Deverá enviar o JSON com os dados do produto para inclusão do mesmo no pedido.

Código de Exemplo:

curl --location -g --request POST 'https://{api_address}/orders/includeProduct/:order_id?access_token={{access_token}}' \
--data-urlencode '["ProductsSold"]["product_id"]=9999' \
--data-urlencode '["ProductsSold"]["variant_id"]=123' \
--data-urlencode '["ProductsSold"]["price"]=55.80' \
--data-urlencode '["ProductsSold"]["original_price"]=55.80' \
--data-urlencode '["ProductsSold"]["quantity"]=1'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/orders/includeProduct/:order_id?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->addPostParameter(array(
  '["ProductsSold"]["product_id"]' => '9999',
  '["ProductsSold"]["variant_id"]' => '123',
  '["ProductsSold"]["price"]' => '55.80',
  '["ProductsSold"]["original_price"]' => '55.80',
  '["ProductsSold"]["quantity"]' => '1'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/orders/includeProduct/:order_id?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddParameter("[\"ProductsSold\"][\"product_id\"]", "9999");
request.AddParameter("[\"ProductsSold\"][\"variant_id\"]", "123");
request.AddParameter("[\"ProductsSold\"][\"price\"]", "55.80");
request.AddParameter("[\"ProductsSold\"][\"original_price\"]", "55.80");
request.AddParameter("[\"ProductsSold\"][\"quantity\"]", "1");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "[\"ProductsSold\"][\"product_id\"]=9999&[\"ProductsSold\"][\"variant_id\"]=123&[\"ProductsSold\"][\"price\"]=55.80&[\"ProductsSold\"][\"original_price\"]=55.80&[\"ProductsSold\"][\"quantity\"]=1");
Request request = new Request.Builder()
  .url("https://{api_address}/orders/includeProduct/:order_id?access_token={{access_token}}")
  .method("POST", body)
  .build();
Response response = client.newCall(request).execute();

Método POST

https://{api_address}/orders/includeProduct/{order_id}

Parâmetros enviados:

Estrutura do Json:

{
    "ProductsSold": {
        "product_id": "9999",
        "variant_id": "123",
        "price": "55.80",
        "original_price": "55.80",
        "quantity": "1"
    }
}
Campo Tipo Descrição
access_token String Token de acesso
:order_id String Código do pedido
ProductsSold JSON Dados do Produto
product_id Number Código produto
variant_id Number Código da variação
price Decimal Valor de venda do produto / variação
original_price Decimal Valor original do produto / variação
quantity Number Quantidade do roduto / variação

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{       
    "message":"Success",    
    "id":"123",    
    "code":201
}
Campo Tipo Descrição
message String Mensagem de retorno
order_id Number Código do pedido
code Number Código do retorno (201)

Excluir Produto do Pedido#put

Requisição para excluir um produto do pedido.

Código de Exemplo:

curl --location -g --request PUT 'https://{api_address}/orders/excludeProduct/:order_id/:product_id?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/orders/excludeProduct/:order_id/:product_id?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_PUT);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/orders/excludeProduct/:order_id/:product_id?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.PUT);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
  .url("https://{api_address}/orders/excludeProduct/:order_id/:product_id?access_token={{access_token}}")
  .method("PUT", body)
  .build();
Response response = client.newCall(request).execute();

Método PUT

https://{api_address}/orders/excludeProduct/:order_id/:product_id

Parâmetros enviados:

Campo Tipo Descrição
access_token String Token de acesso
:order_id String Código do pedido
:product_id String Código do produto

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{       
    "message":"Success",    
    "id":"123",    
    "code":200
}
Campo Tipo Descrição
message String Mensagem de retorno
order_id Number Código do pedido
code Number Código do retorno (201)

Tabelas Auxiliares de Pedidos

Tabela A - Confirmação de pedido enviado (campo delivered)

Campo Tipo
0 Pedido não enviado
1 Pedido enviado

Tabela B - Tipo do cliente (campo Customer.type)

Campo Tipo
0 Pessoa física
1 Pessoa jurídica

Tabela C - Sexo do cliente (campo Customer.gender)

Campo Tipo
0 Masculino
1 Feminino

Tabela D - Tipo de endereço do cliente (campo Customer.CustomerAddress.type)

Campo Tipo
0 Endereço de cobrança
1 Endereço de entrega

Tabela E - Tipo de status do pedido (campo OrderStatus.default)

Campo Tipo
0 Status padrão
1 Status adicional

Tabela F - Bloqueio do cliente (campo blocked)

Campo Tipo
0 Cliente desbloqueada
1 Cliente bloqueada

Tabela G - Tipo de arquivo da etiqueta (campo type)

Campo Tipo
0 Arquivo ZPL2
1 Arquivo PDF

Retorno da API dentro de Pedidos Completo, quando á venda ocorrer no Mercado Livre

Retorno dos campos:

Exemplo de retorno do MLorder:

{

    "MlOrder": [
        {
        "MlOrder": {
            "id": "1919191111",
            "created": "2020-08-03 17:05:11",
            "updated": "2020-08-03 17:05:11",
            "pedido_id": "9874566666",
            "cliente_id": "664654",
            "codigo": "9415263",
            "item_id": "MLB1111111111",
            "item_quantity": "1",
            "item_title": "Nome do produto",
            "user_id": "2222222",
            "nickname": "APELIDO",
            "mercado_envio": "me2",
            "shipment_id": "44444444444",
            "pack_id": "",
            "status_frete_ml": "shipped",
            "substatus_frete_ml": "out_for_delivery",
            "ml_coleta": "1",
            "romaneio_id": "0",
            "invoice_data_id": "161616166",
            "service_id": "151515",
            "logistic_type": "fulfillment",
            "messages_locked_by": "",
            "date_delivered": "0000-00-00",
            "estimated_delivery_time": "2020-08-04",
            "estimated_handling_limit": "2020-08-03",
            "shipping_option_id": "3133133133",
            "pickup_id": "",
            "order_id": "88888",
            "ml_collect": "1",
            "shipping_mode": "me2",
            "shipping_status": "shipped",
            "shipping_substatus": "out_for_delivery"
        }
    }
    ]
}
Campo Tipo Descrição
MlOrder String Retorno dos dados do Mercado Livre
id String Id do pedido no MLorders - Controle Tray
created String Data da criação do pedido na Tray
updated String Data da ultima atualização do pedido
pedido_id String ID do pedido na Tray
cliente_id String ID do cliente na Tray
codigo String Código da venda no Mercado Livre
item_id String Anúncio do Mercado Livre comprado
item_quantity String Quantidade do anúncio que foi comprado
item_title String Nome do produto comprado
user_id String ID do apelido que teve venda
nickname String Nome do apelido que teve venda
mercado_envio String Tipo de envio da venda.
shipment_id String Código que identifica o envio no ML
pack_id String ID do carrinho, quando ocorre venda de mais de 1 produto.
status_frete_ml String Status do shipments no ML
substatus_frete_ml String Substatus do shipments no ML
ml_coleta String Se é um serviço de coleta do ML (0 ou 1)
romaneio_id String Não é mais utilizado, não precisa ser mais considerado no fluxo da aplicação
invoice_data_id String ID da nota fiscal no ML.
service_id String Identificação do ID de serviço no ML.
logistic_type String Tipo de logistica do envio. Dado com base na API do ML
messages_locked_by String Campo interno Tray. É utilizado pra controlar qual usuario ta enviando mensagens nesse pedido no momento, para que outro usuario não tente mandar ao mesmo tempo
date_delivered String Data quando foi entregue o pedido.
estimated_delivery_time String Estimativa de entrega
estimated_handling_limit String Data-limite para o vendedor encaminhar
shipping_option_id String Id do shipments option da API do ML
pickup_id String ID do pickup quando existente
order_id String ID do pedido na Tray
ml_collect String Se é um serviço de coleta do ML (0 ou 1)
shipping_mode String Tipo de entrega no ML
shipping_status String Status do shipments no ML
shipping_substatus String Substatus do shipments no ML

API de Integração de Frete

Integração de Frete

Atualmente disponibilizamos duas formas para integração de frete.

Integração Gateway de Frete Descrição
Objetivo Disponibilizar cotações de frete ao lojista, conforme disponibilidade de envio do integrador
Funcionalidade "A integração via Gateway de Frete, não é necessário um aplicativo para disponibilizar as cotações. Conforme a documentação, você precisará apenas disponibilizar uma url para integrar com a loja do cliente. A informação da url e o token, são disponibilizado no painel administrativo da loja, dessa forma, para efetuar o cadastro da url do Gateway de Frete, o integrador deverá informar o lojista para que o mesmo efetue a configuração da url e o token dentro da loja para integração do Gateway de Frete, lembrando que o token deverá ser fornecido por loja que integrar e o mesmo deverá ser fixo. Esse token do Gateway de Frete, ele não pode ser atualizado, ele deverá ser fixo por loja."

imagem

Integração API de Frete Descrição
Usabilidade Geralmente utilizada pelos MARKETPLACES e serviços externos, para realizar uma cotação fora da loja
Objetivo Realizar cotações e listar formas de envio mediante configurações na loja, atualizando os pedidos da loja, conforme necessidade
Funcionalidade "Conforme a documentação informada acima, para acessar alguma informação do cliente e realizar cotação de frete ou inserir rastreio, será necessário realizar ter acesso a API de Frete e API do Pedido. No entanto, para consumir qualquer tipo de API, atualmente é obrigatório possuir o aplicativo credenciado junto a plataforma, pois através desse aplicativo, será possível gerar uma chave chamada access_token, onde poderá realizar a integração com a Tray e realizar o consumo das APIs. Para isso, será necessário primeiramente entrar em contato diretamente com a nossa equipe de parcerias"

No caso de algumas Transportadoras, elas possuem dois tipos de integração:

1- Integração via Gateway de Frete (utilizada para cotação de frete);

2- Integração via Aplicativo - API Rest (utilizada para manutenção de pedidos)

Onde no Gateway elas disponibilizam a url e o token diretamente ao lojista e na integração via aplicativo, utilizando a API de Pedidos ela envia os dados para o pedido do cliente. Lembrando que para integrar o aplicativo, é necessário contatar nossa equipe de parcerias.

imagem

Gateway de Frete

Integração com o Gateway de Frete

Por padrão, para realizar a integração de frete dentro da Tray, a Transportadora/Integradora, deverá integrar por meio de um Gateway de Frete, ou seja, deverá ser disponibilizado para os nosso lojistas uma url e um token, para que os mesmo configurem diretamente no painel administrativo deles. Atualmente, esse processo é um processo simples e prático para que os nossos lojistas possam ter diversas opções de fretes, na hora do consumidor final realizar a cotação.

Como funciona o processo de Integração de Gateway de Frete:

Para disponibilizar a cotação no front da loja, a Tray irá realizar o envio de uma requisição para a url de gateway do integrador, com esses parâmetros (cep | cep_destino | num_ped (número do pedido) | prods (dados do produto)) e a url do integrador deverá retornar com o valor da cotação no front da loja.

Como o lojista irá habilitar o Gateway de Frete no painel administrativo dele:

https://atendimento.tray.com.br/hc/pt-br/articles/360020060232-Como-Habilitar-o-Gateway-de-Frete-Para-integra%C3%A7%C3%A3o-com-Transportadoras-

Lembrando que, a integração por parte da Tray, ocorre de forma passiva, devendo o desenvolvimento da url de Gateway de frete ocorrer do lado da Transportadora/Integradora, a Tray apenas irá realizar o envio dos parâmetros informados acima, desde que a url do Gateway esteja certa e disponível e receber o retorno da cotação, desde que o desenvolvimento desse processo esteja ok, qualquer divergência no retorno da cotação, o integrador deverá validar sua aplicação.

Existe alguma alternativa de integração de frete, fora o Gateway de Frete? Sim.

Segue abaixo:

O lojista terá a opção de integrar o frete de uma Transportadora, por meio de uma planilha em Excel, a qual a Transportadora deverá encaminhar para ele e o mesmo poderá subir diretamente em seu painel administrativo. Essa planilha deverá conter dados de frete por faixa de cep.

Segue documentação para Importar o frete por faixa de ceps: https://atendimento.tray.com.br/hc/pt-br/articles/115010345068-Importa%C3%A7%C3%A3o-de-tabela-de-faixa-de-cep

OBSERVAÇÃO: Em caso de dúvidas sobre esse processo de integração, deverá ser aberto um chamado diretamente para equipe de atendimento, para que os mesmos possam lhe auxiliar, pois neste canal, trataremos apenas de integração via Gateway de Frete ou API. Para abrir um chamado ao atendimento, favor acessar o link: https://atendimento.tray.com.br/hc/pt-br/requests/new e em "Precisa de ajuda com sua loja virtual?" escolher o escopo: "CONFIGURAÇÕES DE FRETE".

Sobre importação de tabelas de frete:

Há também, outros tipos de importações de frete, por meio de tabelas personalizadas.

Segue a documentação da importação dessas tabelas personalizadas: https://atendimento.tray.com.br/hc/pt-br/sections/360002254752-Tabelas-Personalizadas

OBSERVAÇÃO: Em caso de dúvidas sobre esse processo de integração, deverá ser aberto um chamado diretamente para equipe de atendimento, para que os mesmos possam lhe auxiliar, pois neste canal, trataremos apenas de integração via Gateway de Frete ou API. Para abrir um chamado ao atendimento, favor acessar o link: https://atendimento.tray.com.br/hc/pt-br/requests/new e em "Precisa de ajuda com sua loja virtual?" escolher o escopo: "CONFIGURAÇÕES DE FRETE".

Documentações Gerais:

https://atendimento.tray.com.br/hc/pt-br/categories/360000452772-Frete-e-Envio

FRETE X API

Atualmente, a API que disponibilizamos para cotação de frete, não é para retornar a cotação no front da loja e sim para realizar apenas uma cotação pontual, fora da loja.

Caso a Transportadora/Integradora necessite automatizar alguma parte de seu processo ou necessite realizar consultas e/ou alterações no pedido do cliente, ela precisará consumir nossas APIs, para isso, a mesma deverá se credenciar como Parceira da Tray, contatando nosso time de Relacionamento de Parcerias, através deste link: https://www.tray.com.br/parceiros/quero-ser-parceiro/

Para a integração com o Gateway de Frete, deverá ser construído pelo parceiro um modelo de integração que receba e retorne os dados de cotação de frete seguindo o modelo predefinido pela Tray. A url que integrador disponibilizará para realizar as cotações, deverá ser uma url preparada tanto para enviar o retorno das cotações, quanto para receber as informações da Tray através de parâmetros na url. No caso esses parâmetros necessário para cotação, como os ceps e dados do produto, a Tray irá enviar para a url configurada no Gateway de Frete. Essa será as informações que serão enviadas de forma automática para sua url, (toda vez que houver uma cotação na loja), desde que a mesma esteja preparada para receber. A preparação dessa url deverá ser desenvolvida diretamente no lado da aplicação de vocês, da forma que desejarem.

Consultar Informações de Frete

Para a consulta, deverá ser disponibilizada uma URL para envio (via GET) dos dados da consulta de frete.

Abaixo segue os dados enviados para a URL:

Exemplo da URL enviada para consultar os dados de frete:

http://www.cotacaomodelo.com.br/cotacao?token=123ABC456DEF&cep=04001001 
&cep_destino=04001001&envio=1&num_ped=1&session_id=bengn5mowbdrqkm0rlnilpdtg8& 
prods=0.2;0.2;0.2;0.008;1;0.1;6;43.99/0.3;0.22;0.5;0.033;2;0.235;8;151.33
Parâmetros Enviados Descrição
token Chave para identificação da loja no gateway
cep CEP de origem (Vendedor)
cep_destino CEP de destino (Comprador)
envio Sempre é enviado o valor 1
num_ped Número do pedido. Sempre enviado 1 na cotação devido não existir o pedido.
prods Produto(s) para calculo do frete.
session_id Código da sessão do usuário

No campo prods são enviados todos os dados dos produtos, onde cada produto é separado por uma barra (/). Já os valores dos produtos são separados por ponto e virgulá (;), onde os valores são respectivamente o comprimento(em metros), largura(em metros), altura(em metros), cubagem(em metros cúbicos), quantidade(unitário), peso(em kg, por unidade), código produto(na plataforma), valor(unitário).

Retorno da Consultar de Frete

Após a consulta, é necessário o retorno de um XML, em um padrão predefinido, para possibilitar a exibição dessas informações no momento da consulta de frete na loja.

O retorna da url deverá ser no formato exclusivamente em XML, de acordo com o exemplo disponibilizado abaixo:

<?xml version="1.0" encoding="windows­1252"?>
    <cotacao>     
        <resultado>         
            <codigo>123</codigo>         
            <transportadora>CORREIOS</transportadora>         
            <servico>ENTREGA RAPIDA</servico>         
            <transporte>TERRESTRE</transporte>         
            <valor>23,51</valor>         
            <peso>0,10</peso>         
            <prazo_min>2</prazo_min>         
            <prazo_max>4</prazo_max>     
        </resultado>     
        <resultado>         
            <codigo>456</codigo>         
            <transportadora>TRANSPORTADORA A</transportadora>         
            <servico>ENTREGA EXPRESSA</servico>         
            <transporte>TERRESTRE</transporte>         
            <valor>15,41</valor>         
            <peso>0,10</peso>         
            <prazo_min>5</prazo_min>         
            <prazo_max>7</prazo_max>     
        </resultado> 
    </cotacao>
XML de Retorno Descrição
cotacao Dados da sotação
resultado Resultado(s) da consulta
codigo Código do cotação
transportadora Nome da Transportadora
servico Nome do serviço
transporte Tipo de transporte
peso Peso completo da encomenda
valor Valor da cotação
prazo_min Prazo mínimo de entrega
prazo_max Prazo máximo de entrega
imagem_frete URL da imagem do tipo de frete

Obs: o tamanho da imagem no campo imagem_frete, deverá possuir a seguinte configuração: Formato: PNG; Tamanho: 120x120px

Configuração do Gateway na Loja

Para configurar o Gateway de Frete na loja, basta acessar o menu Configurações > Frete e envio na área administrativa da loja.

Após acessar, clique no botão Integrações externas:

imagem

Mantenha habilitada e digite um nome para identificar a integração. Depois clique em continuar:

imagem

Preencha a URL do WebService e o token de identificação do cliente (este é o token que será enviado via GET na consulta do frete). Depois clique em Salvar.

imagem

OBS: No momento que salvar estas configurações, a URL do WebService deve retornar um XML válido, senão as configurações são desconsideradas.

Após salvar, o gateway já estará disponível na consulta da loja.

As APIs de Frete disponibiliza o consultar as informações de frete, por aplicações externas, conforme cadastrados dentro da plataforma Tray

Cálculo de Frete#get

Requisição para consultar os dados de diversas formas de envio.

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/shippings/cotation/?access_token={{access_token}}&zipcode=04001001&products[0][product_id]=123&products[0][price]=58.90&products[0][quantity]=2&products[1][product_id]=456&products[1][price]=98.89&products[1][quantity]=1'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/shippings/cotation/?access_token={{access_token}}&zipcode=04001001&products[0][product_id]=123&products[0][price]=58.90&products[0][quantity]=2&products[1][product_id]=456&products[1][price]=98.89&products[1][quantity]=1');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/shippings/cotation/?access_token={{access_token}}&zipcode=04001001&products[0][product_id]=123&products[0][price]=58.90&products[0][quantity]=2&products[1][product_id]=456&products[1][price]=98.89&products[1][quantity]=1");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/shippings/cotation/?access_token={{access_token}}&zipcode=04001001&products[0][product_id]=123&products[0][price]=58.90&products[0][quantity]=2&products[1][product_id]=456&products[1][price]=98.89&products[1][quantity]=1")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/shippings/cotation/?access_token={{access_token}}&zipcode=04001001&products[0][product_id]=123&products[0][price]=58.90&products[0][quantity]=2&products[1][product_id]=456&products[1][price]=98.89&products[1][quantity]=1

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
zipcode Number CEP do comprador
products Array[ ] Código do produto
product_id Number Código do produto
price Decimal Preço do produto
quantity Number Quantidade do produto

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "Shipping": {
        "origin": {
            "zipcode": "04001001",
            "address": "Endereço de Origem, 123",
            "neighborhood": "Bairro de Origem",
            "city": "São Paulo",
            "state": "SP"
        },
        "destination": {
            "zipcode": "04001001",
            "address": "Endereço de Destino, 123",
            "neighborhood": "Bairro de Destino",
            "city": "São Paulo",
            "state": "SP"
        },
        "cotation": [
            {
                "id": "1",
                "id_quotation": "1",
                "name": "Nome da Forma de Envio 1",
                "identifier": "forma_envio_1",
                "value": "35.10",
                "min_period": "2",
                "max_period": "8",
                "estimated_delivery_date": "2016-08-15",
                "information": "Prazo de entrega: de 02 a 08 dias úteis.",
                "taxe": {
                    "name": "Emissão de Nota Fiscal",
                    "value": "0"
                }
           },
           {
                "id": "2",
                "id_quotation": "2",
                "name": "Nome da Forma de Envio 2",
                "identifier": "forma_envio_2",
                "value": "16.20",
                "min_period": "3",
                "max_period": "10",
                "estimated_delivery_date": "2016-08-30",
                "information": "Prazo de entrega: 03 a 10 dias úteis.",
                "taxe": {
                    "name": "Emissão de Nota Fiscal",
                    "value": "0"
                }
            }
        ]
    }
}
Campo Tipo Descrição
Shipping Object Dados da forma de envio
origin Object Dados de origem
zipcode String CEP de origem
address String Endereço de origem
neighborhood String Bairro de origem
city String Cidade de origem
state String Estado de origem
destination Object Endereço do destinatário
zipcode String CEP do destinatário
address String Endereço do destinatário
neighborhood String Bairro do destinatário
city String Cidade do destinatário
state String Estado do destinatário
cotation Object[ ] Dados do cálculo de frete
id Number Código da forma de envio
id_quotation Number Código externo de cotação de frete (Gateway de Frete)
name String Nome da forma de envio
value Decimal Valor de frete
min_period Number Período mínimo
max_period Number Período máximo
estimated_delivery_date Number Tempo estimado de entrega
information String Informações sobre a cotação
taxe Object Dados do acréscimo / taxa
name String Nome do acréscimo / taxa
value Decimal Valor de acréscimo / taxa

Listagem de Formas de Envio#get

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/shippings/?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/shippings/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/shippings/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/shippings/?access_token={{access_token}}")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/shippings/?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do cliente
status Number Status da forma de envio (Veja Tabela A)

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "paging": {
        "total": 6,
        "page": 1,
        "offset": 0,
        "limit": 30,
        "maxLimit": 50
    },
    "sort": [
        {
            "id": "asc"
        }
    ],
    "availableFilters": [
        "status",
        "gateway"
    ],
    "appliedFilters": [],
    "Shippings": [
        {
            "Shipping": {
                "id": "1",
                "cod": "1",
                "name": "Sedex",
                "identifier": "sedex_1",
                "display_name": "Sedex",
                "status": "1",
                "gateway": "0"
            }
        }
    ]
}
Campo Tipo Descrição
paging Object Dados de paginação
total Number Total de registros
page Number Páginas corrente
offset Number Registro inicial da página
limit Number Limite de registros
maxLimit Number Máximo de registros
sort Object[ ] Ordenação
availableFilters String[ ] Filtros disponíveis
appliedFilters String[ ] Filtros utilizados
Shippings Object[ ] Lista das forma de envio
Shipping Object Dados da forma de envio
id Number Código da forma de envio
cod String Código secundário da forma de envio
name String Nome da forma de envio
display_name String Nome de exibição
status String Status da forma de envio (Veja Tabela A)
gateway Number

Tabela Auxiliar de Forma de Envio

Tabela A - Disponibilidade do produto (campo available)

Valor Descrição
0 Forma de envio inativa
1 Forma de envio ativa

API de Configuração de Forma de Frete

Criação de forma de envio com integração externa#post

Ao clicar no pedido para gerar a etiqueta, iremos abrir um IFRAME do aplicativo, onde deverá conter neste iframe a opção de imprimir a etiqueta.

Dessa forma o aplicativo deverá cadastrar na loja a URL que deverá ser chamada para abrir o iframe.

Estrutura do Json:

{
    "Shipping": {
        "active": "1",
        "name": "Gateway Teste",
        "product_rate": "4",
        "additional_order": "7",
        "shipping_rate": "9",
        "type": "6",
        "customer_message": "Oi",
        "settings": {
            "url": "www.gatewayteste.com.br",
            "token": "abc123def4567"
        }
    }
}

Método POST

https://{api_address}/shippings/method/gateway?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Created",
    "id": "2659",
    "code": 201
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código da tabela
code Number Código do retorno (201)

Alteração da forma de envio com integração externa pelo ID#put

Estrutura do Json:

{
    "Shipping": {
        "name": "Tabela de CEP Teste",
        "active": 1,
        "product_rate": "10",
        "additional_order": "12",
        "delivery_days": {
            "min": "7",
            "max": "12"
        },
        "customer_message": "Teste",
        "store_display": 1,
        "cart_display": 0,
        "payment_display": 1
    }
}

Método PUT

https://{api_address}/shippings/method/gateway/:id?access_token?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código da tabela

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Saved",
    "id": "123",
    "code": 200
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código da etiqueta
code Number Código do retorno (200)

Exclusão da forma de envio com integração externa pelo ID#delete

Método DELETE

https://{api_address}/shippings/method/gateway/:id?access_token?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código da tabela

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Deleted",
    "id": "123",
    "code": 201
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código da etiqueta
code Number Código do retorno (201)

Criação de tabela de CEP#post

Estrutura do Json:

{
    "Shipping": {
        "name": "Tabela de CEP Teste",
        "active": 1,
        "product_rate": "10",
        "additional_order": "12",
        "delivery_days": {
            "min": "7",
            "max": "12"
        },
        "customer_message": "Teste",
        "store_display": 1,
        "cart_display": 0,
        "payment_display": 1
    }
}

Método POST

https://{api_address}/shippings/method/zipcode_table?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do pedido

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Created",
    "id": "123",
    "code": 201
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código da tabela
code Number Código do retorno (201)

Alteração de tabela de CEP pelo ID#put

Estrutura do Json:

{
    "Shipping": {
        "name": "Tabela de CEP Teste",
        "active": 1,
        "product_rate": "10",
        "additional_order": "12",
        "delivery_days": {
            "min": "7",
            "max": "12"
        },
        "customer_message": "Teste",
        "store_display": 1,
        "cart_display": 0,
        "payment_display": 1
    }
}

Método PUT

https://{api_address}/shippings/method/zipcode_table/:id?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código da tabela

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Saved",
    "id": "123",
    "code": 200
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código da etiqueta
code Number Código do retorno (200)

Exclusão de tabela de CEP pelo ID#delete

Método DELETE

https://{api_address}/shippings/method/zipcode_table/:id?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código da tabela

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Deleted",
    "id": "123",
    "code": 200
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código da etiqueta
code Number Código do retorno (200)

API de Emissores de Etiqueta

Criando a Etiqueta#post

Requisição para criar a etiqueta

Nos pedidos que o aplicativo deseja realizar a impressão da etiqueta, deverá ser "marcado" o pedido.

Estrutura do Json:

{
    "ShippingLabel": {
        "configuration_url" : "www.urldoadeemissaodeetiquetadoaplicativo.com"
    }
}

Método POST

https://{api_address}/shipping_labels?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Created",
    "id": "2659",
    "code": 201
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código da tabela
code Number Código do retorno (201)

Criando a URL da Etiqueta#post

Requisição para criar a url da etiqueta

Estrutura do Json:

{
    "ShippingLabel": {
        "name": "Nome",
        "configuration_url" : "www.urldoadeemissaodeetiquetadoaplicativo.com"
    }
}

Método POST

https://{api_address}/orders/{:id}/shipping_label?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do pedido

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Created",
    "id": "123",
    "code": 201
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código da tabela
code Number Código do retorno (201)

Excluindo a URL da Etiqueta#delete

Requisição para excluir a url da etiqueta

Método DELETE

https://{api_address}/orders/{:id}/shipping_label?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do pedido

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Deleted",
    "id": "123",
    "code": 200
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código da tabela
code Number Código do retorno (200)

API de Etiqueta do Mercado Livre

Consultar Etiquetas do Mercado Livre#get

Requisição para a obter o arquivo das etiquetas do Mercado Livre.

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/meli/tracking_labels?access_token={{access_token}}&orders=1,2'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/meli/tracking_labels?access_token={{access_token}}&orders=1,2');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/meli/tracking_labels?access_token={{access_token}}&orders=1,2");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/meli/tracking_labels?access_token={{access_token}}&orders=1,2")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/meli/tracking_labels

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
orders String Código dos pedidos (separados por virgula)
type String Tipo de impressão (Veja Tabela A)

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    code:200,
    print_url:"https://php53.docker:9000/mvc/loja/mercado_livre/etiquetas/imprimir/0/zpl2/loja:414159?oids=76b026bc2e333b1561248bfefe7642e3"
}
Campo Tipo Descrição
code Number Código do retorno (200)
message String Mensagem de retorno
id Number Código do cliente

Tabelas Auxiliares

Tabela A - Tipo de arquivo da etiqueta (campo type)

Valor Descrição
zpl2 Arquivo ZPL2
pdf Arquivo PDF

APIs de Scripts Externos

Listagem de Scripts Externos#get

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/external_scripts?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/external_scripts?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/external_scripts?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/external_scripts?access_token={{access_token}}")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/external_scripts

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
source String URL do script externo
created String Data de criação
modified Number Data de modificação

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "paging": {
        "total": 2,
        "page": 1,
        "offset": 0,
        "limit": 2,
        "maxLimit": 50
    },
    "sort": [],
    "availableFilters": [
        "id",
    ],
    "appliedFilters": [
        "application_id": 1
    ],
    "ExternalScripts": [
        {
            "ExternalScript": {
                "id": "1",
                "source": "http://localhost/assets/store/js/dist/script.js?12345678941c144778663a20caa7dfc4"
            }
        },
        {
            "ExternalScript": {
                "id": "2",
                "source": "http://localhost/assets/store/css/script.css?12345678941c144778663a20caa7dfc4"
            }
        }
    ]
}
Campo Tipo Descrição
paging Object Dados de paginação
total Number Total de registros
page Number Página corrente
offset Number Registro inicial da página
limit Number Limite de registros
maxLimit Number Máximo de registros
sort Object Ordenação
availableFilters String Filtros disponíveis
appliedFilters String Filtros utilizados
ExternalScripts Object Lista de scripts externos
ExternalScript Object Dados do script externo
id Number Código do script externo
source String URL do scripts externo

Cadastrar Script Externo#post

Código de Exemplo:

curl --location -g --request POST 'https://{api_address}/external_scripts/?access_token={{access_token}}' \
--data-urlencode '["ExternalScript"]["source"]=http://localhost/assets/store/css/script.css'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/external_scripts/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->addPostParameter(array(
  '["ExternalScript"]["source"]' => 'http://localhost/assets/store/css/script.css'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/external_scripts/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddParameter("[\"ExternalScript\"][\"source\"]", "http://localhost/assets/store/css/script.css");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "[\"ExternalScript\"][\"source\"]=http://localhost/assets/store/css/script.css");
Request request = new Request.Builder()
  .url("https://{api_address}/external_scripts/?access_token={{access_token}}")
  .method("POST", body)
  .build();
Response response = client.newCall(request).execute();

Método POST

https://{api_address}/external_scripts/

Parâmetros enviados:

Json:

{
    "ExternalScript":{
        "source":"http://localhost/assets/store/css/script.css"
    }
}
Campo Tipo Descrição
access_token String Chave de acesso
ExternalScript JSON Dados do script externo
source String URL do script externo

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Created",
    "id": "123",
    "code": 201
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código do script externo
code Number Código do retorno (201)

Atualizar Dados Script Externo#put

Código de Exemplo:

curl --location -g --request PUT 'https://{api_address}/external_scripts/:id?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/external_scripts/:id?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_PUT);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/external_scripts/:id?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.PUT);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
  .url("https://{api_address}/external_scripts/:id?access_token={{access_token}}")
  .method("PUT", body)
  .build();
Response response = client.newCall(request).execute();

Método PUT

https://{api_address}/external_scripts/:id?access_token={{access_token}}

Parâmetros enviados:

Json:

{
    "ExternalScript":{
        "source":"http://localhost/assets/store/css/script.css"
    }
}
Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do script externo
ExternalScript JSON Dados do script externo
source String URL do script externo

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Saved",
    "code": 200,
    "id": "123"
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código do script externo
code Number Código do retorno (201)

Excluir Script Externo#delete

Código de Exemplo:

curl --location -g --request DELETE 'https://{api_address}/external_scripts/:id?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/external_scripts/:id?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_DELETE);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/external_scripts/:id?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.DELETE);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
  .url("https://{api_address}/external_scripts/:id?access_token={{access_token}}")
  .method("DELETE", body)
  .build();
Response response = client.newCall(request).execute();

Método DELETE

https://{api_address}/external_scripts/:id

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do script externo

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Deleted",
    "id": "123",
    "code": 200
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código do script externo
code Number Código do retorno (201)

API de Clientes

Listagem de Clientes#get

Requisição para a consulta de clientes.

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/customers?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/customers?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/customers?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/customers?access_token={{access_token}}")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/customers

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
email String Email do cliente
attrs String Atributos do cliente
limit Number Limite de registros
page Number Página corrente
sort String Ordenação ex.: [campo]_[asc/desc]

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
   "paging":{
      "total":6,
      "page":1,
      "offset":0,
      "limit":1,
      "maxLimit":50
   },
   "sort":[
      {
         "id":"desc"
      }
   ],
   "availableFilters":[
      "id",
      "name",
      "email",
      "cpf",
      "cnpj",
      "created",
      "modified"
   ],
   "appliedFilters":[
      
   ],
   "Customers":[
      {
         "Customer":{
            "id":"123",
            "name":"Nome do Cliente",
            "cpf":"00000000000",
            "birth_date":"0000-00-00",
            "gender":"0",
            "email":"emaildo@cliente.com.br",
            "cnpj":"00.000.000/0000-00",
            "last_visit":"2016-08-15",
            "city":"Cidade do Cliente",
            "state":"SP",
            "newsletter":"1",
            "created":"2008-10-14 18:17:23",
            "registration_date":"2008-10-14",
            "modified":"2016-08-15 18:17:23",
            "CustomerAddress":[
               {
                  "id":"1"
               },
               {
                  "id":"2"
               }
            ]
         }
      }
   ]
}

Campo Tipo Descrição
paging Object Dados de paginação
total Number Total de registros
page Number Página corrente
offset Number Registro inicial da página
limit Number Limite de registros
maxLimit Number Máximo de registros
sort Object Ordenação
availableFilters String Filtros disponíveis
appliedFilters String Filtros utilizados
Customers Object Lista de clientes
Customer Object Dados do cliente
id Number Código do cliente
name String Nome
cpf String CPF
birth_date Date Data de aniversário
gender Number Sexo (Veja Tabela A)
email String E-mail
cnpj String CNPJ
last_visit Date Data da última visita
city String Cidade
state String Sigla do estado
newsletter Number Newsletter ativa
created Date Data de criação
registration_date Date Data de registro
modified Date Data de modificação
CustomerAddress Object Endereços do cliente
id Number Código do endereço do cliente

Consultar Dados do Cliente#get

Requisição para a consulta de dados de um cliente.

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/customers/:id?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/customers/:id?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/customers/:id?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/customers/:id?access_token={{access_token}}")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/customers/:id

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do cliente

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "Customer": {
        "id": "123",
        "name": "Nome do Cliente",
        "rg": "00.000.000-0",
        "cpf": "00000000000",
        "phone": "1133330000",
        "cellphone": "11999990000",
        "birth_date": "0000-00-00",
        "gender": "0",
        "email": "emaildo@cliente.com.br",
        "nickname": "",
        "token": "123QWE123QWE123ASD",
        "total_orders": "8",
        "observation": "",
        "type": "1",
        "cnpj": "00.000.000/0000-00",
        "company_name": "Razão Social do Cliente",
        "state_inscription": "Isento",
        "reseller": "0",
        "discount": "0.00",
        "blocked": "0",
        "credit_limit": "10.00",
        "indicator_id": "0",
        "profile_customer_id": "1",
        "last_sending_newsletter": "2016-08-02",
        "last_purchase": "2016-08-02",
        "last_visit": "2016-08-15",
        "last_modification": "0000-00-00 00:00:00",
        "address": "Endereço do Cliente",
        "zip_code": "04001-001",
        "number": "123",
        "complement": "Sala 123",
        "neighborhood": "Bairro do Cliente",
        "city": "Cidade do Cliente",
        "state": "SP",
        "newsletter": "1",
        "created": "2008-10-14 18:17:23",
        "registration_date": "2008-10-14",
        "modified": "2016-08-15 18:17:23",
        "CustomerAddress": [
            {
                "id": "1"
            },
            {
                "id": "2"
            }
        ]
    }
}
Campo Tipo Descrição
Customer Object Dados do cliente
id Number Código do cliente
name String Nome
rg String RG
cpf String CPF
phone String Telefone fixo
cellphone String Telefone celular
birth_date Date Data de aniversário
gender Number Sexo (Veja Tabela A)
email String E-mail
nickname String Apelido
token String Chave única do cliente
total_orders Number Total de pedidos
observation String Informações sobre o cliente
type Number Tipo de cliente (Veja Tabela B)
cnpj String CNPJ
company_name String Razão social
state_inscription String Inscrição estatual
reseller Number Cliente revendedor
discount Decimal Valor de desconto
blocked Number Cliente bloqueado (Veja Tabela C)
credit_limit Decimal Valor de crédito
indicator_id Number Código de indicação
profile_customer_id Number Código do perfil do cliente
last_sending_newsletter Date Data do último envio de newsletter
last_purchase Date Data da última compra
last_visit Date Data da última visita
last_modification Date Data de modificação
address String Logradouro
zip_code String CEP
Number Number Número do endereço
complement String Complemento
neighborhood String Bairro
city String Cidade
state String Sigla do estado
newsletter Number Newsletter ativa
created Date Data de criação
registration_date Date Data de registro
modified Date Data de modificação
CustomerAddress Object Endereços do cliente
id Number Código do endereço do cliente

Cadastrar Cliente#post

Requisição para inclusão de um cliente. Deverá enviar o JSON com os dados do cliente para a criação.

Código de Exemplo:

curl --location -g --request POST 'https://{api_address}/customers?access_token={{access_token}}' \
--data-urlencode '["Customer"]["name"]=Nome do Cliente' \
--data-urlencode '["Customer"]["rg"]=00.000.000-0' \
--data-urlencode '["Customer"]["cpf"]=00000000000' \
--data-urlencode '["Customer"]["phone"]=1133330000' \
--data-urlencode '["Customer"]["cellphone"] =11998877665' \
--data-urlencode '["Customer"]["birth_date"]=0000-00-00' \
--data-urlencode '["Customer"]["gender"] =0' \
--data-urlencode '["Customer"]["email"] =emaildo@cliente.com.br' \
--data-urlencode '["Customer"]["nickname"]=""' \
--data-urlencode '["Customer"]["observation"]=""' \
--data-urlencode '["Customer"]["type"]=1' \
--data-urlencode '["Customer"]["company_name"]=Razão Social do Cliente' \
--data-urlencode '["Customer"]["cnpj"]=00.000.000/0000-00' \
--data-urlencode '["Customer"]["state_inscription"]=Isento' \
--data-urlencode '["Customer"]["reseller"]=0' \
--data-urlencode '["Customer"]["discount"]=0' \
--data-urlencode '["Customer"]["blocked"]=0' \
--data-urlencode '["Customer"]["credit_limit"]=0' \
--data-urlencode '["Customer"]["indicator_id"]=0' \
--data-urlencode '["Customer"]["profile_customer_id"]=1' \
--data-urlencode '["Customer"]["address"]=Endereço do Cliente' \
--data-urlencode '["Customer"]["zip_code"]=04001-001' \
--data-urlencode '["Customer"]["number"]=123' \
--data-urlencode '["Customer"]["complement"]=Sala 123' \
--data-urlencode '["Customer"]["neighborhood"]=Bairro do Cliente' \
--data-urlencode '["Customer"]["city"]=Cidade do Cliente' \
--data-urlencode '["Customer"]["state"]=SP' \
--data-urlencode '["Customer"]["newsletter"]=1' \
--data-urlencode '["Customer"]["CustomerAddress"][0]["recipient"]=Nome do Cliente' \
--data-urlencode '["Customer"]["CustomerAddress"][0]["address"]=Outro Endereço do Cliente' \
--data-urlencode '["Customer"]["CustomerAddress"][0]["number"]=456' \
--data-urlencode '["Customer"]["CustomerAddress"][0]["complement"]=Sala 456' \
--data-urlencode '["Customer"]["CustomerAddress"][0]["neighborhood"]=Bairro do Cliente' \
--data-urlencode '["Customer"]["CustomerAddress"][0]["city"]=Cidade do Cliente' \
--data-urlencode '["Customer"]["CustomerAddress"][0]["state"]=SP' \
--data-urlencode '["Customer"]["CustomerAddress"][0]["zip_code"]=04001-001' \
--data-urlencode '["Customer"]["CustomerAddress"][0]["country"]=BRA' \
--data-urlencode '["Customer"]["CustomerAddress"][0]["type"]=1' \
--data-urlencode '["Customer"]["CustomerAddress"][0]["active"]=1' \
--data-urlencode '["Customer"]["CustomerAddress"][0]["description"]=""'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/customers?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->addPostParameter(array(
  '["Customer"]["name"]' => 'Nome do Cliente',
  '["Customer"]["rg"]' => '00.000.000-0',
  '["Customer"]["cpf"]' => '00000000000',
  '["Customer"]["phone"]' => '1133330000',
  '["Customer"]["cellphone"] ' => '11998877665',
  '["Customer"]["birth_date"]' => '0000-00-00',
  '["Customer"]["gender"] ' => '0',
  '["Customer"]["email"] ' => 'emaildo@cliente.com.br',
  '["Customer"]["nickname"]' => '""',
  '["Customer"]["observation"]' => '""',
  '["Customer"]["type"]' => '1',
  '["Customer"]["company_name"]' => 'Razão Social do Cliente',
  '["Customer"]["cnpj"]' => '00.000.000/0000-00',
  '["Customer"]["state_inscription"]' => 'Isento',
  '["Customer"]["reseller"]' => '0',
  '["Customer"]["discount"]' => '0',
  '["Customer"]["blocked"]' => '0',
  '["Customer"]["credit_limit"]' => '0',
  '["Customer"]["indicator_id"]' => '0',
  '["Customer"]["profile_customer_id"]' => '1',
  '["Customer"]["address"]' => 'Endereço do Cliente',
  '["Customer"]["zip_code"]' => '04001-001',
  '["Customer"]["number"]' => '123',
  '["Customer"]["complement"]' => 'Sala 123',
  '["Customer"]["neighborhood"]' => 'Bairro do Cliente',
  '["Customer"]["city"]' => 'Cidade do Cliente',
  '["Customer"]["state"]' => 'SP',
  '["Customer"]["newsletter"]' => '1',
  '["Customer"]["CustomerAddress"][0]["recipient"]' => 'Nome do Cliente',
  '["Customer"]["CustomerAddress"][0]["address"]' => 'Outro Endereço do Cliente',
  '["Customer"]["CustomerAddress"][0]["number"]' => '456',
  '["Customer"]["CustomerAddress"][0]["complement"]' => 'Sala 456',
  '["Customer"]["CustomerAddress"][0]["neighborhood"]' => 'Bairro do Cliente',
  '["Customer"]["CustomerAddress"][0]["city"]' => 'Cidade do Cliente',
  '["Customer"]["CustomerAddress"][0]["state"]' => 'SP',
  '["Customer"]["CustomerAddress"][0]["zip_code"]' => '04001-001',
  '["Customer"]["CustomerAddress"][0]["country"]' => 'BRA',
  '["Customer"]["CustomerAddress"][0]["type"]' => '1',
  '["Customer"]["CustomerAddress"][0]["active"]' => '1',
  '["Customer"]["CustomerAddress"][0]["description"]' => '""'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/customers?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddParameter("[\"Customer\"][\"name\"]", "Nome do Cliente");
request.AddParameter("[\"Customer\"][\"rg\"]", "00.000.000-0");
request.AddParameter("[\"Customer\"][\"cpf\"]", "00000000000");
request.AddParameter("[\"Customer\"][\"phone\"]", "1133330000");
request.AddParameter("[\"Customer\"][\"cellphone\"] ", "11998877665");
request.AddParameter("[\"Customer\"][\"birth_date\"]", "0000-00-00");
request.AddParameter("[\"Customer\"][\"gender\"] ", "0");
request.AddParameter("[\"Customer\"][\"email\"] ", "emaildo@cliente.com.br");
request.AddParameter("[\"Customer\"][\"nickname\"]", "\"\"");
request.AddParameter("[\"Customer\"][\"observation\"]", "\"\"");
request.AddParameter("[\"Customer\"][\"type\"]", "1");
request.AddParameter("[\"Customer\"][\"company_name\"]", "Razão Social do Cliente");
request.AddParameter("[\"Customer\"][\"cnpj\"]", "00.000.000/0000-00");
request.AddParameter("[\"Customer\"][\"state_inscription\"]", "Isento");
request.AddParameter("[\"Customer\"][\"reseller\"]", "0");
request.AddParameter("[\"Customer\"][\"discount\"]", "0");
request.AddParameter("[\"Customer\"][\"blocked\"]", "0");
request.AddParameter("[\"Customer\"][\"credit_limit\"]", "0");
request.AddParameter("[\"Customer\"][\"indicator_id\"]", "0");
request.AddParameter("[\"Customer\"][\"profile_customer_id\"]", "1");
request.AddParameter("[\"Customer\"][\"address\"]", "Endereço do Cliente");
request.AddParameter("[\"Customer\"][\"zip_code\"]", "04001-001");
request.AddParameter("[\"Customer\"][\"number\"]", "123");
request.AddParameter("[\"Customer\"][\"complement\"]", "Sala 123");
request.AddParameter("[\"Customer\"][\"neighborhood\"]", "Bairro do Cliente");
request.AddParameter("[\"Customer\"][\"city\"]", "Cidade do Cliente");
request.AddParameter("[\"Customer\"][\"state\"]", "SP");
request.AddParameter("[\"Customer\"][\"newsletter\"]", "1");
request.AddParameter("[\"Customer\"][\"CustomerAddress\"][0][\"recipient\"]", "Nome do Cliente");
request.AddParameter("[\"Customer\"][\"CustomerAddress\"][0][\"address\"]", "Outro Endereço do Cliente");
request.AddParameter("[\"Customer\"][\"CustomerAddress\"][0][\"number\"]", "456");
request.AddParameter("[\"Customer\"][\"CustomerAddress\"][0][\"complement\"]", "Sala 456");
request.AddParameter("[\"Customer\"][\"CustomerAddress\"][0][\"neighborhood\"]", "Bairro do Cliente");
request.AddParameter("[\"Customer\"][\"CustomerAddress\"][0][\"city\"]", "Cidade do Cliente");
request.AddParameter("[\"Customer\"][\"CustomerAddress\"][0][\"state\"]", "SP");
request.AddParameter("[\"Customer\"][\"CustomerAddress\"][0][\"zip_code\"]", "04001-001");
request.AddParameter("[\"Customer\"][\"CustomerAddress\"][0][\"country\"]", "BRA");
request.AddParameter("[\"Customer\"][\"CustomerAddress\"][0][\"type\"]", "1");
request.AddParameter("[\"Customer\"][\"CustomerAddress\"][0][\"active\"]", "1");
request.AddParameter("[\"Customer\"][\"CustomerAddress\"][0][\"description\"]", "\"\"");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "[\"Customer\"][\"name\"]=Nome do Cliente&[\"Customer\"][\"rg\"]=00.000.000-0&[\"Customer\"][\"cpf\"]=00000000000&[\"Customer\"][\"phone\"]=1133330000&[\"Customer\"][\"cellphone\"] =11998877665&[\"Customer\"][\"birth_date\"]=0000-00-00&[\"Customer\"][\"gender\"] =0&[\"Customer\"][\"email\"] =emaildo@cliente.com.br&[\"Customer\"][\"nickname\"]=\"\"&[\"Customer\"][\"observation\"]=\"\"&[\"Customer\"][\"type\"]=1&[\"Customer\"][\"company_name\"]=Razão Social do Cliente&[\"Customer\"][\"cnpj\"]=00.000.000/0000-00&[\"Customer\"][\"state_inscription\"]=Isento&[\"Customer\"][\"reseller\"]=0&[\"Customer\"][\"discount\"]=0&[\"Customer\"][\"blocked\"]=0&[\"Customer\"][\"credit_limit\"]=0&[\"Customer\"][\"indicator_id\"]=0&[\"Customer\"][\"profile_customer_id\"]=1&[\"Customer\"][\"address\"]=Endereço do Cliente&[\"Customer\"][\"zip_code\"]=04001-001&[\"Customer\"][\"number\"]=123&[\"Customer\"][\"complement\"]=Sala 123&[\"Customer\"][\"neighborhood\"]=Bairro do Cliente&[\"Customer\"][\"city\"]=Cidade do Cliente&[\"Customer\"][\"state\"]=SP&[\"Customer\"][\"newsletter\"]=1&[\"Customer\"][\"CustomerAddress\"][0][\"recipient\"]=Nome do Cliente&[\"Customer\"][\"CustomerAddress\"][0][\"address\"]=Outro Endereço do Cliente&[\"Customer\"][\"CustomerAddress\"][0][\"number\"]=456&[\"Customer\"][\"CustomerAddress\"][0][\"complement\"]=Sala 456&[\"Customer\"][\"CustomerAddress\"][0][\"neighborhood\"]=Bairro do Cliente&[\"Customer\"][\"CustomerAddress\"][0][\"city\"]=Cidade do Cliente&[\"Customer\"][\"CustomerAddress\"][0][\"state\"]=SP&[\"Customer\"][\"CustomerAddress\"][0][\"zip_code\"]=04001-001&[\"Customer\"][\"CustomerAddress\"][0][\"country\"]=BRA&[\"Customer\"][\"CustomerAddress\"][0][\"type\"]=1&[\"Customer\"][\"CustomerAddress\"][0][\"active\"]=1&[\"Customer\"][\"CustomerAddress\"][0][\"description\"]=\"\"");
Request request = new Request.Builder()
  .url("https://{api_address}/customers?access_token={{access_token}}")
  .method("POST", body)
  .build();
Response response = client.newCall(request).execute();

Método POST

https://{api_address}/customers

Parâmetros enviados:

Estrutura do Json:

{
    "Customer": {
        "name": "Nome do Cliente",
        "rg": "00.000.000-0",
        "cpf": "00000000000",
        "phone": "1133330000",
        "cellphone": "11999990000",
        "birth_date": "0000-00-00",
        "gender": "0",
        "email": "emaildo@cliente.com.br",
        "nickname": "",
        "observation": "",
        "type": "1",
        "company_name": "Razão Social do Cliente",
        "cnpj": "00.000.000/0000-00",
        "state_inscription": "Isento",
        "reseller": "0",
        "discount": "0",
        "blocked": "0",
        "credit_limit": "0",
        "indicator_id": "0",
        "profile_customer_id": "1",
        "address": "Endereço do Cliente",
        "zip_code": "04001-001",
        "number": "123",
        "complement": "Sala 123",
        "neighborhood": "Bairro do Cliente",
        "city": "Cidade do Cliente",
        "state": "SP",
        "newsletter": "1",
        "CustomerAddress": [
            {
                "recipient": "Nome do Cliente",
                "address": "Outro Endereço do Cliente",
                "number": "456",
                "complement": "Sala 456",
                "neighborhood": "Bairro do Cliente",
                "city": "Cidade do Cliente",
                "state": "SP",
                "zip_code": "04001-001",
                "country": "BRA",
                "type": "1",
                "active": "1",
                "description": ""
            }
        ]
    }
}
Campo Tipo Descrição
access_token String Chave de acesso
Customer JSON Dados do cliente
name String Nome
rg String RG
cpf String CPF
phone String Telefone fixo
cellphone String Telefone celular
birth_date Date Data de aniversário
gender Number Sexo (Veja Tabela A)
email String E-mail
nickname String Apelido
observation String Informações sobre o cliente
type Number Tipo de cliente (Veja Tabela B)
company_name String Razão social
cnpj String CNPJ
state_inscription String Inscrição estatual
reseller Number Cliente revendedor
discount Decimal Valor de desconto
blocked Number Cliente bloqueado (Veja Tabela C)
credit_limit Decimal Valor de crédito
indicator_id Number Código de indicação
profile_customer_id Number Código do perfil do cliente
address String Logradouro
zip_code String CEP
Number Number Número do endereço
complement String Complemento
neighborhood String Bairro
city String Cidade
state String Sigla do estado
newsletter Number Newsletter ativa
CustomerAddress Object Endereços do cliente
recipient String Nome do cliente
address String Logradouro
Number Number Número do endereço
complement String Complemento
neighborhood String Bairro
city String Cidade
state String Sigla do estado
zip_code String CEP
country String País
type Number Tipo de endereço (Veja Tabela D)
active Number Endereço ativo (Veja Tabela E)
description String Descrição do Endereço

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Created",
    "id": "123",
    "code": 201
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código do cliente
code Number Código do retorno (201)

Atualizar Dados do Cliente#put

Requisição para alterar os dados de um cliente. Deverá enviar o JSON com os dados do cliente para a alteração.

Código de Exemplo:

curl --location -g --request PUT 'https://{api_address}/customers/:id?access_token={{access_token}}' \
--data-urlencode '["Customer"]["name"]=Nome do Cliente' \
--data-urlencode '["Customer"]["rg"]=00.000.000-0' \
--data-urlencode '["Customer"]["cpf"]=00000000000' \
--data-urlencode '["Customer"]["phone"]=1133330000' \
--data-urlencode '["Customer"]["cellphone"] =11998877665' \
--data-urlencode '["Customer"]["birth_date"]=0000-00-00' \
--data-urlencode '["Customer"]["gender"] =0' \
--data-urlencode '["Customer"]["email"] =emaildo@cliente.com.br' \
--data-urlencode '["Customer"]["nickname"]=""' \
--data-urlencode '["Customer"]["observation"]=""' \
--data-urlencode '["Customer"]["type"]=1' \
--data-urlencode '["Customer"]["company_name"]=Razão Social do Cliente' \
--data-urlencode '["Customer"]["cnpj"]=00.000.000/0000-00' \
--data-urlencode '["Customer"]["state_inscription"]=Isento' \
--data-urlencode '["Customer"]["reseller"]=0' \
--data-urlencode '["Customer"]["discount"]=0' \
--data-urlencode '["Customer"]["blocked"]=0' \
--data-urlencode '["Customer"]["credit_limit"]=0' \
--data-urlencode '["Customer"]["indicator_id"]=0' \
--data-urlencode '["Customer"]["profile_customer_id"]=1' \
--data-urlencode '["Customer"]["newsletter"]=1'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/customers/:id?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_PUT);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->addPostParameter(array(
  '["Customer"]["name"]' => 'Nome do Cliente',
  '["Customer"]["rg"]' => '00.000.000-0',
  '["Customer"]["cpf"]' => '00000000000',
  '["Customer"]["phone"]' => '1133330000',
  '["Customer"]["cellphone"] ' => '11998877665',
  '["Customer"]["birth_date"]' => '0000-00-00',
  '["Customer"]["gender"] ' => '0',
  '["Customer"]["email"] ' => 'emaildo@cliente.com.br',
  '["Customer"]["nickname"]' => '""',
  '["Customer"]["observation"]' => '""',
  '["Customer"]["type"]' => '1',
  '["Customer"]["company_name"]' => 'Razão Social do Cliente',
  '["Customer"]["cnpj"]' => '00.000.000/0000-00',
  '["Customer"]["state_inscription"]' => 'Isento',
  '["Customer"]["reseller"]' => '0',
  '["Customer"]["discount"]' => '0',
  '["Customer"]["blocked"]' => '0',
  '["Customer"]["credit_limit"]' => '0',
  '["Customer"]["indicator_id"]' => '0',
  '["Customer"]["profile_customer_id"]' => '1',
  '["Customer"]["newsletter"]' => '1'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/customers/:id?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.PUT);
request.AddParameter("[\"Customer\"][\"name\"]", "Nome do Cliente");
request.AddParameter("[\"Customer\"][\"rg\"]", "00.000.000-0");
request.AddParameter("[\"Customer\"][\"cpf\"]", "00000000000");
request.AddParameter("[\"Customer\"][\"phone\"]", "1133330000");
request.AddParameter("[\"Customer\"][\"cellphone\"] ", "11998877665");
request.AddParameter("[\"Customer\"][\"birth_date\"]", "0000-00-00");
request.AddParameter("[\"Customer\"][\"gender\"] ", "0");
request.AddParameter("[\"Customer\"][\"email\"] ", "emaildo@cliente.com.br");
request.AddParameter("[\"Customer\"][\"nickname\"]", "\"\"");
request.AddParameter("[\"Customer\"][\"observation\"]", "\"\"");
request.AddParameter("[\"Customer\"][\"type\"]", "1");
request.AddParameter("[\"Customer\"][\"company_name\"]", "Razão Social do Cliente");
request.AddParameter("[\"Customer\"][\"cnpj\"]", "00.000.000/0000-00");
request.AddParameter("[\"Customer\"][\"state_inscription\"]", "Isento");
request.AddParameter("[\"Customer\"][\"reseller\"]", "0");
request.AddParameter("[\"Customer\"][\"discount\"]", "0");
request.AddParameter("[\"Customer\"][\"blocked\"]", "0");
request.AddParameter("[\"Customer\"][\"credit_limit\"]", "0");
request.AddParameter("[\"Customer\"][\"indicator_id\"]", "0");
request.AddParameter("[\"Customer\"][\"profile_customer_id\"]", "1");
request.AddParameter("[\"Customer\"][\"newsletter\"]", "1");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "[\"Customer\"][\"name\"]=Nome do Cliente&[\"Customer\"][\"rg\"]=00.000.000-0&[\"Customer\"][\"cpf\"]=00000000000&[\"Customer\"][\"phone\"]=1133330000&[\"Customer\"][\"cellphone\"] =11998877665&[\"Customer\"][\"birth_date\"]=0000-00-00&[\"Customer\"][\"gender\"] =0&[\"Customer\"][\"email\"] =emaildo@cliente.com.br&[\"Customer\"][\"nickname\"]=\"\"&[\"Customer\"][\"observation\"]=\"\"&[\"Customer\"][\"type\"]=1&[\"Customer\"][\"company_name\"]=Razão Social do Cliente&[\"Customer\"][\"cnpj\"]=00.000.000/0000-00&[\"Customer\"][\"state_inscription\"]=Isento&[\"Customer\"][\"reseller\"]=0&[\"Customer\"][\"discount\"]=0&[\"Customer\"][\"blocked\"]=0&[\"Customer\"][\"credit_limit\"]=0&[\"Customer\"][\"indicator_id\"]=0&[\"Customer\"][\"profile_customer_id\"]=1&[\"Customer\"][\"newsletter\"]=1");
Request request = new Request.Builder()
  .url("https://{api_address}/customers/:id?access_token={{access_token}}")
  .method("PUT", body)
  .build();
Response response = client.newCall(request).execute();

Método PUT

https://{api_address}/customers/:id

Parâmetros enviados:

Estrutura do Json:

{
   "Customer":{
      "name":"Nome do Cliente",
      "rg":"00.000.000-0",
      "cpf":"00000000000",
      "phone":"1133330000",
      "cellphone":"11999990000",
      "birth_date":"0000-00-00",
      "gender":"0",
      "email":"emaildo@cliente.com.br",
      "nickname":"",
      "observation":"",
      "type":"1",
      "company_name":"Razão Social do Cliente",
      "cnpj":"00.000.000/0000-00",
      "state_inscription":"Isento",
      "reseller":"0",
      "discount":"0",
      "blocked":"0",
      "credit_limit":"0",
      "indicator_id":"0",
      "profile_customer_id":"1",
      "newsletter":"1"
   }
}
Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do cliente
Customer JSON Dados do cliente
name String Nome
rg String RG
cpf String CPF
phone String Telefone fixo
cellphone String Telefone celular
birth_date Date Data de aniversário
gender Number Sexo (Veja Tabela A)
email String E-mail
nickname String Apelido
observation String Informações sobre o cliente
type Number Tipo de cliente (Veja Tabela B)
company_name String Razão social
cnpj String CNPJ
state_inscription String Inscrição estatual
reseller Number Cliente revendedor
discount Decimal Valor de desconto
blocked Number Cliente bloqueado (Veja Tabela C)
credit_limit Decimal Valor de crédito
indicator_id Number Código de indicação
profile_customer_id Number Código do perfil do cliente
newsletter Number Newsletter ativa

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Saved",
    "id": "123",
    "code": 200
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código do cliente
code Number Código do retorno (200)

Excluir Cliente#delete

Requisição para excluir um cliente.

Código de Exemplo:

curl --location -g --request DELETE 'https://{api_address}/customers/:id?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/customers/:id?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_DELETE);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/customers/:id?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.DELETE);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
  .url("https://{api_address}/customers/:id?access_token={{access_token}}")
  .method("DELETE", body)
  .build();
Response response = client.newCall(request).execute();

Método DELETE

https://{api_address}/customers/:id

Parâmetros enviados

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do cliente

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Deleted",
    "id": "123",
    "code": 200
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código do cliente
code Number Código do retorno (200)

Listagem de Endereços de Cliente#get

Requisição para a consulta de diversos endereços do cliente.

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/customers/addresses?access_token={{access_token}}&sort=id_desc'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/customers/addresses?access_token={{access_token}}&sort=id_desc');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/customers/addresses?access_token={{access_token}}&sort=id_desc");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/customers/addresses?access_token={{access_token}}&sort=id_desc")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/customers/addresses

Parâmetros enviados

Campo Tipo Descrição
access_token String Chave de acesso
attrs String Atributos do endereço do cliente
limit Number Limite de registros
page Number Página corrente
sort String Ordenação ex.: [campo]_[asc/desc]

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "paging": {
        "total": 3,
        "page": 1,
        "offset": 0,
        "limit": 30,
        "maxLimit": 50
    },
    "sort": [
        {
            "id": "asc"
        }
    ],
    "availableFilters": [
        "customer_id",
        "type",
        "not_list"
    ],
    "appliedFilters": {
        "CustomerAddress.customer_id !=": "0"
    },
    "CustomerAddresses": [
        {
            "CustomerAddress": {
                "id": "1",
                "customer_id": "1",
                "address": "Nome da Rua do Cliente",
                "number": "130",
                "complement": "",
                "neighborhood": "Bairro do Cliente",
                "city": "Cidade do Cliente",
                "state": "SP",
                "zip_code": "04001-001",
                "country": "Brasil",
                "type": "1",
                "active": "0",
                "description": "",
                "recipient": "",
                "type_delivery": "1",
                "not_list": "0"
            }
        }
    ]
}
Campo Tipo Descrição
paging Object Dados de paginação
total Number Total de registros
page Number Página corrente
offset Number Registro inicial da página
limit Number Limite de registros
maxLimit Number Máximo de registros
sort Object Ordenação
availableFilters String Filtros disponíveis
appliedFilters String Filtros utilizados
CustomerAddresses Object Lista de endereços do cliente
CustomerAddress Object Dados do endereço do cliente
id String Código do endereço
customer_id String Código do cliente
address String Endereço do Cliente
Number String
complement String Complemento do endereço do Cliente
neighborhood String Bairro do Cliente
city String Cidade
state String Sigla do estado
zip_code String CEP
country String País
type Number Tipo do Endereço. Tabela B
active Number Endereço ativo (Veja Tabela E)
description String Descrição do Endereço
recipient String Nome do Cliente
type_delivery Number
no_list Number

Consultar Dados do Endereço de um Cliente#get

Requisição para a consulta de dados de um endereço do cliente.

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/customers/addresses/:id?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/customers/addresses/:id?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/customers/addresses/:id?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/customers/addresses/:id?access_token={{access_token}}")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/customers/addresses/:id

Parâmetros enviados

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do endereço do cliente

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "CustomerAddress": {
        "id": "123",
        "customer_id": "123",
        "address": "Endereço do Cliente",
        "number": "123",
        "complement": "",
        "neighborhood": "Bairro do Cliente",
        "city": "Cidade do Cliente",
        "state": "SP",
        "zip_code": "04001-001",
        "country": "BRA",
        "type": "1",
        "active": "0",
        "description": "",
        "recipient": "",
        "type_delivery": "1",
        "not_list": "0"
    }
}
Campo Tipo Descrição
CustomerAddress Object Endereços do cliente
id String Código do endereço do cliente
customer_id String Código do cliente
recipient String Nome do cliente
address String Logradouro
number Number Número do endereço
complement String Complemento
neighborhood String Bairro
city String Cidade
state String Sigla do estado
zip_code String CEP
country String País
type Number Tipo de endereço (Veja Tabela D)
active Number Endereço ativo (Veja Tabela E)
description String Descrição do Endereço
type_delivery Number
not_list Number

Cadastrar Endereço#post

Requisição para inclusão de um endereço do cliente. Deverá enviar o JSON com os dados do endereço para a criação.

Código de Exemplo:

curl --location -g --request POST 'https://{api_address}/customers?access_token={{access_token}}' \
--data-urlencode '["CustomerAddress"]["customer_id"]=1' \
--data-urlencode '["CustomerAddress"][0]["recipient"]=Nome do Cliente' \
--data-urlencode '["CustomerAddress"][0]["address"]=Endereço do Cliente' \
--data-urlencode '["CustomerAddress"][0]["number"]=123' \
--data-urlencode '["CustomerAddress"][0]["complement"]=Sala 123' \
--data-urlencode '["CustomerAddress"][0]["neighborhood"]=Bairro do Cliente' \
--data-urlencode '["CustomerAddress"][0]["city"]=Cidade do Cliente' \
--data-urlencode '["CustomerAddress"][0]["state"]=SP' \
--data-urlencode '["CustomerAddress"][0]["zip_code"]=04001-001' \
--data-urlencode '["CustomerAddress"][0]["country"]=BRA' \
--data-urlencode '["CustomerAddress"][0]["type"]=1' \
--data-urlencode '["CustomerAddress"][0]["active"]=1' \
--data-urlencode '["CustomerAddress"][0]["description"]=1'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/customers?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->addPostParameter(array(
  '["CustomerAddress"]["customer_id"]' => '1',
  '["CustomerAddress"][0]["recipient"]' => 'Nome do Cliente',
  '["CustomerAddress"][0]["address"]' => 'Endereço do Cliente',
  '["CustomerAddress"][0]["number"]' => '123',
  '["CustomerAddress"][0]["complement"]' => 'Sala 123',
  '["CustomerAddress"][0]["neighborhood"]' => 'Bairro do Cliente',
  '["CustomerAddress"][0]["city"]' => 'Cidade do Cliente',
  '["CustomerAddress"][0]["state"]' => 'SP',
  '["CustomerAddress"][0]["zip_code"]' => '04001-001',
  '["CustomerAddress"][0]["country"]' => 'BRA',
  '["CustomerAddress"][0]["type"]' => '1',
  '["CustomerAddress"][0]["active"]' => '1',
  '["CustomerAddress"][0]["description"]' => '1'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/customers?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddParameter("[\"CustomerAddress\"][\"customer_id\"]", "1");
request.AddParameter("[\"CustomerAddress\"][0][\"recipient\"]", "Nome do Cliente");
request.AddParameter("[\"CustomerAddress\"][0][\"address\"]", "Endereço do Cliente");
request.AddParameter("[\"CustomerAddress\"][0][\"number\"]", "123");
request.AddParameter("[\"CustomerAddress\"][0][\"complement\"]", "Sala 123");
request.AddParameter("[\"CustomerAddress\"][0][\"neighborhood\"]", "Bairro do Cliente");
request.AddParameter("[\"CustomerAddress\"][0][\"city\"]", "Cidade do Cliente");
request.AddParameter("[\"CustomerAddress\"][0][\"state\"]", "SP");
request.AddParameter("[\"CustomerAddress\"][0][\"zip_code\"]", "04001-001");
request.AddParameter("[\"CustomerAddress\"][0][\"country\"]", "BRA");
request.AddParameter("[\"CustomerAddress\"][0][\"type\"]", "1");
request.AddParameter("[\"CustomerAddress\"][0][\"active\"]", "1");
request.AddParameter("[\"CustomerAddress\"][0][\"description\"]", "1");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "[\"CustomerAddress\"][\"customer_id\"]=1&[\"CustomerAddress\"][0][\"recipient\"]=Nome do Cliente&[\"CustomerAddress\"][0][\"address\"]=Endereço do Cliente&[\"CustomerAddress\"][0][\"number\"]=123&[\"CustomerAddress\"][0][\"complement\"]=Sala 123&[\"CustomerAddress\"][0][\"neighborhood\"]=Bairro do Cliente&[\"CustomerAddress\"][0][\"city\"]=Cidade do Cliente&[\"CustomerAddress\"][0][\"state\"]=SP&[\"CustomerAddress\"][0][\"zip_code\"]=04001-001&[\"CustomerAddress\"][0][\"country\"]=BRA&[\"CustomerAddress\"][0][\"type\"]=1&[\"CustomerAddress\"][0][\"active\"]=1&[\"CustomerAddress\"][0][\"description\"]=1");
Request request = new Request.Builder()
  .url("https://{api_address}/customers?access_token={{access_token}}")
  .method("POST", body)
  .build();
Response response = client.newCall(request).execute();

Método POST

https://{api_address}/customers/addresses

Parâmetros enviados

Estrutura do Json:

{   
    "CustomerAddress":{
        "customer_id":"123",
        "recipient":"",
        "address":"Endereço do Cliente",
        "number":"123",
        "complement":"Sala 123",
        "neighborhood":"Bairro do Cliente",
        "city":"Cidade do Cliente",
        "state":"SP",
        "zip_code":"04001-001",
        "country":"BRA",
        "type":"1",
        "active":"0",
        "description":""
    }
}
Campo Tipo Descrição
access_token String Chave de acesso
CustomerAddress JSON Endereços do cliente
customer_id Number Código do cliente
recipient String Nome do cliente
address String Logradouro
Number Number Número do endereço
complement String Complemento
neighborhood String Bairro
city String Cidade
state String Sigla do estado
zip_code String CEP
country String País
type Number Tipo de endereço (Veja Tabela D)
active Number Endereço ativo (Veja Tabela E)
description String Descrição do Endereço

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Created",
    "id": "123",
    "code": 201
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código do endereço do cliente
code Number Código do retorno (201)

Excluir Endereço#delete

Requisição para excluir um endereço do cliente.

Código de Exemplo:

curl --location -g --request DELETE 'https://{api_address}/customers/addresses/:id?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/customers/addresses/:id?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_DELETE);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/customers/addresses/:id?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.DELETE);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
  .url("https://{api_address}/customers/addresses/:id?access_token={{access_token}}")
  .method("DELETE", body)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/customers/addresses/:id

Parâmetros enviados

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do endereço do cliente

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Deleted",
    "id": "123",
    "code": 200
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código do endereço do cliente
code Number Código do retorno (200)

Tabelas Auxiliares de Clientes

Tabela A - Sexo do cliente (campo gender)

Campo Tipo
0 Masculino
1 Feminino

Tabela B - Tipo do cliente (campo type)

Campo Tipo
0 Pessoa física
1 Pessoa jurídica

Tabela C - Bloqueio do cliente (campo blocked)

Campo Tipo
0 Cliente desbloqueado
1 Cliente bloqueado

Tabela D - Tipo de endereço do cliente (campo CustomerAddress.type)

Campo Tipo
0 Endereço de cobrança
1 Endereço de entrega

Tabela E - Disponibilidade do endereço do cliente (campo CustomerAddress.active)

Campo Tipo
0 Endereço indisponível
1 Endereço disponível

API de Cupom

Alteração dos Cupons#put

Requisição para alterar dados do cupom.

Método PUT

Adicionar produtos, categorias, marcas, clientes ou frete

Assim como demonstrado no tópico de criação do cupom, basta enviar o PUT do cupom com os dados que deseja adicionar.

Modificações no cupom que são conflitantes

O cupom da Tray não é possível utilizar ao mesmo tempo “produtos específicos” + “marcas especificas” + “categorias especificas”, dessa forma caso seu cupom esteja configurado como “categoria especifica” e seja enviado “produtos específicos”, o cupom será alterado para “produtos específicos” e as categorias que estavam antes selecionadas será excluída do cupom.

Consultar Cupom#get

Requisição para a consulta de dados do cupom.

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/discount_coupons/?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/discount_coupons/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/discount_coupons/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/discount_coupons/?access_token={{access_token}}")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/discount_coupons/?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
  "paging": {
    "total": 32,
    "page": 1,
    "offset": 0,
    "limit": 30,
    "maxLimit": 50
  },
  "sort": [
    {
      "id": "asc"
    }
  ],
  "availableFilters": [
    "id",
    "code",
    "type",
    "description",
    "status",
    "used",
    "accumulated_discount_start",
    "accumulated_discount_end"
  ],
  "appliedFilters": [],
  "DiscountCoupons": [
    {
      "DiscountCoupon": {
        "id": "7",
        "created": "2019-08-22 15:55:42",
        "updated": "2019-08-22 15:55:42",
        "code": "CUPOM",
        "description": "Cupom criado pela API",
        "starts_at": "2019-08-01",
        "ends_at": "2019-08-30",
        "value": "10.00",
        "usage_counter": "0",
        "usage_sum": "0.00",
        "type": "$",
        "value_start": "10.00",
        "value_end": "100.00",
        "usage_sum_limit": "10.00",
        "usage_counter_limit": "0",
        "coupon_type": "loja",
        "local_application": "loja",
        "freight_application": "nao_aplicavel",
        "usage_counter_limit_customer": "10",
        "cumulative_discount": "1"
      }
    }
  ]
}
Campo Tipo Descrição
DiscountCoupon JSON Dados do cupom
id String id do cupom
created Date Data de criação do cupom
updated Date Data da última atualização do cupom
code String Nome do cupom. Obs: Neste campo não é aceito espaço e acentuação nas palavras
description String Descrição do cupom
starts_at Date Data de início da validade do cupom 0000-00-00
ends_at Date Data final da validade do cupom 0000-00-00
value Decimal Valor de desconto do cupom
usage_counter String
usage_sum Number
value_start Decimal Valor mínimo do produto para ser aplicado o desconto
value_end Decimal Valor máximo do produto para ser aplicado o desconto
usage_sum_limit Decimal Limita o valor do cupom
usage_counter_limit String Limita a quantidade de vezes que o cupom poderá ser usado no geral
usage_counter_limit String Limita a quantidade de vezes que o cupom poderá ser utilizado por cliente
coupon_type String
local_application String
freight_application String
usage_counter_limit_customer String
cumulative_discount Number Permitir que o cupom acumule o desconto com o desconto progressivo. Tabela B

Consultar Dados do Cupom#get

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/discount_coupons/:id/?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/discount_coupons/:id/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/discount_coupons/:id/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/discount_coupons/:id/?access_token={{access_token}}")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/discount_coupons/:id/?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do cupom

Retorno de Sucesso:

{
    "DiscountCoupon": {
        "id": "7",
        "created": "2019-08-22 15:55:42",
        "updated": "2019-08-22 15:55:42",
        "code": "CUPOM",
        "description": "Cupom criado pela API",
        "starts_at": "2019-08-01",
        "ends_at": "2019-08-30",
        "value": "10.00",
        "usage_counter": "0",
        "usage_sum": "0.00",
        "type": "$",
        "value_start": "10.00",
        "value_end": "100.00",
        "usage_sum_limit": "10.00",
        "usage_counter_limit": "0",
        "coupon_type": "loja",
        "local_application": "loja",
        "freight_application": "nao_aplicavel",
        "usage_counter_limit_customer": "10",
        "cumulative_discount": "1"
    }
}

CONSULTA DO CUPOM BÁSICO + LIMITAÇÕES (2/3/4/5/6)

Clientes Relacionados ao Cupom#get

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/discount_coupons/customer_relationship/:id/?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/discount_coupons/customer_relationship/:id/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/discount_coupons/customer_relationship/:id/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/discount_coupons/customer_relationship/:id/?access_token={{access_token}}")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/discount_coupons/customer_relationship/:id/?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do cupom

Retorno de Sucesso:

{
    "paging": {
        "total": 2,
        "page": 1,
        "offset": 0,
        "limit": 30,
        "maxLimit": 50
    },
    "DiscountCouponCustomers": [
        {
            "DiscountCouponCustomer": {
                "customer_id": "1"
            }
        },
        {
            "DiscountCouponCustomer": {
                "customer_id": "20"
            }
        }
    ]
}

Produtos Relacionados ao Cupom#get

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/discount_coupons/product_relationship/:id/?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/discount_coupons/product_relationship/:id/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/discount_coupons/product_relationship/:id/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/discount_coupons/product_relationship/:id/?access_token={{access_token}}")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/discount_coupons/product_relationship/:id/?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do cupom

Retorno de Sucesso:

{
    "paging": {
        "total": 3,
        "page": 1,
        "offset": 0,
        "limit": 30,
        "maxLimit": 50
    },
    "DiscountCouponProducts": [
        {
            "DiscountCouponProduct": {
                "product_id": "10"
            }
        },
        {
            "DiscountCouponProduct": {
                "product_id": "20"
            }
        },
        {
            "DiscountCouponProduct": {
                "product_id": "30"
            }
        }
    ]
}

Categorias Relacionadas ao Cupom#get

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/discount_coupons/category_relationship/:id/?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/discount_coupons/category_relationship/:id/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/discount_coupons/category_relationship/:id/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/discount_coupons/category_relationship/:id/?access_token={{access_token}}")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/discount_coupons/category_relationship/:id/?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do cupom

Retorno de Sucesso:

{
    "paging": {
        "total": 2,
        "page": 1,
        "offset": 0,
        "limit": 30,
        "maxLimit": 50
    },
    "DiscountCouponCategories": [
        {
            "DiscountCouponCategory": {
                "category_id": "3"
            }
        },
        {
            "DiscountCouponCategory": {
                "category_id": "11"
            }
        }
    ]
}

Marcas Relacionadas ao Cupom#get

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/discount_coupons/brand_relationship/:id/?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/discount_coupons/brand_relationship/:id/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/discount_coupons/brand_relationship/:id/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/discount_coupons/brand_relationship/:id/?access_token={{access_token}}")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/discount_coupons/brand_relationship/:id/?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do cupom

Retorno de Sucesso:

{
    "paging": {
        "total": 2,
        "page": 1,
        "offset": 0,
        "limit": 30,
        "maxLimit": 50
    },
    "DiscountCouponBrands": [
        {
            "DiscountCouponBrand": {
                "brand_id": "6"
            }
        },
        {
            "DiscountCouponBrand": {
                "brand_id": "24"
            }
        }
    ]
}

Fretes Relacionados ao Cupom#get

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/discount_coupons/shipping_relationship/:id/?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/discount_coupons/shipping_relationship/:id/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/discount_coupons/shipping_relationship/:id/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/discount_coupons/shipping_relationship/:id/?access_token={{access_token}}")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/discount_coupons/shipping_relationship/:id/?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do cupom

Retorno em caso de sucesso (status code 200 ou 201)

Retornos de Sucessos:

Exemplo do Frete Grátis:

{
    "DiscountCouponShippings": [
        {
            "DiscountCouponShipping": {
                "shipping_id": "1"
            }
        },
        {
            "DiscountCouponShipping": {
                "shipping_id": "2"
            }
        },
        {
            "DiscountCouponShipping": {
                "shipping_id": "52"
            }
        },
        {
            "DiscountCouponShipping": {
                "shipping_id": "20"
            }
        }
    ]
}

Exemplo do Desconto no Frete:

{
    "DiscountCouponShippings": [
        {
            "DiscountCouponShipping": {
                "value": "20.00"
            }
        }
    ]
}

Como foi visto, temos retorno em separado para os Gets de Clientes relacionados, Produtos, Marca, Categoria e Frete. Para que não seja necessário a consulta em todas as APIs, ao realizar o GET principal ( /discount_coupons?access_token=) é retornado o campos " coupon_type" e " local_application", onde informa qual o tipo de cupom e assim qual API deve ser chamada para obter o restante dos dados.

Exemplo: Caso o " coupon_type" esteja com o valor "clientes", então teremos cliente relacionados e assim é necessário realizar um GET na API de customers para visualizar os clientes relacionados.

Valores possíveis:

Cadastrar Cupom#post

Requisição para inclusão de um cupom. Deverá enviar o JSON com os dados do cupom para a criação.

Código de Exemplo:

curl --location -g --request POST 'https://{api_address}/discount_coupons/?access_token={{access_token}}' \
--data-urlencode '["DiscountCoupon"]["code"]=123' \
--data-urlencode '["DiscountCoupon"]["description"]=Cupom criado pela API' \
--data-urlencode '["DiscountCoupon"]["starts_at"] =2019-01-10' \
--data-urlencode '["DiscountCoupon"]["ends_at"]=2019-01-20' \
--data-urlencode '["DiscountCoupon"]["value"]=10.00' \
--data-urlencode '["DiscountCoupon"]["type"]=$' \
--data-urlencode '["DiscountCoupon"]["value_start"]=10.00' \
--data-urlencode '["DiscountCoupon"]["value_end"]=100.00' \
--data-urlencode '["DiscountCoupon"]["usage_sum_limit"]=10.00' \
--data-urlencode '["DiscountCoupon"]["usage_counter_limit"]=' \
--data-urlencode '["DiscountCoupon"]["usage_counter_limit_customer"]=10' \
--data-urlencode '["DiscountCoupon"]["cumulative_discount"]=1'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/discount_coupons/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->addPostParameter(array(
  '["DiscountCoupon"]["code"]' => '123',
  '["DiscountCoupon"]["description"]' => 'Cupom criado pela API',
  '["DiscountCoupon"]["starts_at"] ' => '2019-01-10',
  '["DiscountCoupon"]["ends_at"]' => '2019-01-20',
  '["DiscountCoupon"]["value"]' => '10.00',
  '["DiscountCoupon"]["type"]' => '$',
  '["DiscountCoupon"]["value_start"]' => '10.00',
  '["DiscountCoupon"]["value_end"]' => '100.00',
  '["DiscountCoupon"]["usage_sum_limit"]' => '10.00',
  '["DiscountCoupon"]["usage_counter_limit"]' => '',
  '["DiscountCoupon"]["usage_counter_limit_customer"]' => '10',
  '["DiscountCoupon"]["cumulative_discount"]' => '1'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/discount_coupons/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddParameter("[\"DiscountCoupon\"][\"code\"]", "123");
request.AddParameter("[\"DiscountCoupon\"][\"description\"]", "Cupom criado pela API");
request.AddParameter("[\"DiscountCoupon\"][\"starts_at\"] ", "2019-01-10");
request.AddParameter("[\"DiscountCoupon\"][\"ends_at\"]", "2019-01-20");
request.AddParameter("[\"DiscountCoupon\"][\"value\"]", "10.00");
request.AddParameter("[\"DiscountCoupon\"][\"type\"]", "$");
request.AddParameter("[\"DiscountCoupon\"][\"value_start\"]", "10.00");
request.AddParameter("[\"DiscountCoupon\"][\"value_end\"]", "100.00");
request.AddParameter("[\"DiscountCoupon\"][\"usage_sum_limit\"]", "10.00");
request.AddParameter("[\"DiscountCoupon\"][\"usage_counter_limit\"]", "");
request.AddParameter("[\"DiscountCoupon\"][\"usage_counter_limit_customer\"]", "10");
request.AddParameter("[\"DiscountCoupon\"][\"cumulative_discount\"]", "1");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "[\"DiscountCoupon\"][\"code\"]=123&[\"DiscountCoupon\"][\"description\"]=Cupom criado pela API&[\"DiscountCoupon\"][\"starts_at\"] =2019-01-10&[\"DiscountCoupon\"][\"ends_at\"]=2019-01-20&[\"DiscountCoupon\"][\"value\"]=10.00&[\"DiscountCoupon\"][\"type\"]=$&[\"DiscountCoupon\"][\"value_start\"]=10.00&[\"DiscountCoupon\"][\"value_end\"]=100.00&[\"DiscountCoupon\"][\"usage_sum_limit\"]=10.00&[\"DiscountCoupon\"][\"usage_counter_limit\"]=&[\"DiscountCoupon\"][\"usage_counter_limit_customer\"]=10&[\"DiscountCoupon\"][\"cumulative_discount\"]=1");
Request request = new Request.Builder()
  .url("https://{api_address}/discount_coupons/?access_token={{access_token}}")
  .method("POST", body)
  .build();
Response response = client.newCall(request).execute();

Método POST

https://{api_address}/discount_coupons/?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
DiscountCoupon JSON Dados do cupom
code String Nome do cupom. Obs: Neste campo não é aceito espaço e acentuação nas palavras
description String Descrição do cupom
starts_at Date Data de início da validade do cupom 0000-00-00
ends_at Date Data final da validade do cupom 0000-00-00
value Decimal Valor de desconto do cupom
type String Tipo de desconto em reais ou percentual. Tabela A
value_start Decimal Valor mínimo do produto para ser aplicado o desconto
value_end Decimal Valor máximo do produto para ser aplicado o desconto
usage_sum_limit Decimal Limita o valor do cupom
usage_counter_limit String Limita a quantidade de vezes que o cupom poderá ser usado no geral
usage_counter_limit_customer String Limita a quantidade de vezes que o cupom poderá ser utilizado por cliente
cumulative_discount Number Permitir que o cupom acumule o desconto com o desconto progressivo. Tabela B

Observação: Ao utilizar somente o CUPOM GENÉRICO, sem realizar nenhum outro POST relacinando a clientes/produtos/categorias/marcas, o cupom poderá ser aplicado à toda a loja e à todos os clientes

Estrutura de Json:

{
  "DiscountCoupon": {
      "code": "123",
      "description": "Cupom criado pela API",
      "starts_at": "2019-01-10",
      "ends_at": "2019-01-20",
      "value": "10.00",
      "type": "$",
      "value_start": "10",
      "value_end": "100.00",
      "usage_sum_limit": "",
      "usage_counter_limit": "",
      "usage_counter_limit_customer": "10",
      "cumulative_discount": "1"
  }
}

Observação: Caso não deseje limitar o valor do produto, para que o cupom seja aplicado a todos os produtos de quaisquer valores, você poderá enviar os campos "value_start", "value_end" vazios.

Se não desejar limitar a quantidade de uso do cupom, poderá também enviar esses campos vazios "usage_counter_limit", "usage_counter_limit_customer".

Esses campos "usage_counter_limit":, "usage_counter_limit_customer": precisam estar alinhados, pois um limita a quantidade em que o cupom poderá ser utilizado e outro limita quantas vezes o cupom poderá ser utilizado pelo mesmo cliente. Se desejar que o mesmo cliente utilize o cupom por duas vezes, o campo "usage_counter_limit": deverá conter a mesma quantidade, no caso 2, ou então ser enviado vazio, para não dar conflito na hora do consumidor aplicar o cupom.

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
  "message": "Created",
  "id": "1",
  "code": 201
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código do cupom
code Number Código do retorno (201)

CUPOM BÁSICO + LIMITAÇÕES (2/3/4/5/6/7/8)

Relacionando Cliente no Cupom#post

O envio dos dados dentro do json, é limitado a 100 registros por POST. Dessa forma caso tenha 200 registros, será necessários enviar dois POST com 100 registros cada. Cada id dentro das chaves, representará um registro de informação.

Código de Exemplo:

curl --location -g --request POST 'https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}' \
--data-raw '{
  "DiscountCouponCustomer": [
    {
      "customer_id": "10"
    },
    {
      "customer_id": "20"
    }
  ]
}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setBody('{\n  "DiscountCouponCustomer": [\n    {\n      "customer_id": "10"\n    },\n    {\n      "customer_id": "20"\n    }\n  ]\n}');
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddParameter("text/plain", "{\n  \"DiscountCouponCustomer\": [\n    {\n      \"customer_id\": \"10\"\n    },\n    {\n      \"customer_id\": \"20\"\n    }\n  ]\n}",  ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "{\n  \"DiscountCouponCustomer\": [\n    {\n      \"customer_id\": \"10\"\n    },\n    {\n      \"customer_id\": \"20\"\n    }\n  ]\n}");
Request request = new Request.Builder()
  .url("https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}")
  .method("POST", body)
  .build();
Response response = client.newCall(request).execute();

Método POST

https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
DiscountCouponCustomer JSON Dados do cupom
customer_id String Id do cliente

Estrutura de Json:

{
  "DiscountCouponCustomer": [
    {
      "customer_id": "10"
    },
    {
      "customer_id": "20"
    }
  ]
}

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Created",
    "id": "1",
    "code": 201
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código do cupom
code Number Código do retorno (201)

Relacionando Produtos no Cupom#post

Código de Exemplo:

curl --location -g --request POST 'https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}' \
--data-raw '{
  "DiscountCouponProduct": [
    {
      "product_id": "10"
    },
    {
      "product_id": "20"
    }
  ]
}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setBody('{\n  "DiscountCouponProduct": [\n    {\n      "product_id": "10"\n    },\n    {\n      "product_id": "20"\n    }\n  ]\n}');
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddParameter("text/plain", "{\n  \"DiscountCouponProduct\": [\n    {\n      \"product_id\": \"10\"\n    },\n    {\n      \"product_id\": \"20\"\n    }\n  ]\n}",  ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "{\n  \"DiscountCouponProduct\": [\n    {\n      \"product_id\": \"10\"\n    },\n    {\n      \"product_id\": \"20\"\n    }\n  ]\n}");
Request request = new Request.Builder()
  .url("https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}")
  .method("POST", body)
  .build();
Response response = client.newCall(request).execute();

Método POST

https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
DiscountCouponCustomer JSON Dados do cupom
product_id String Id do produto

Estrutura de Json:

{
  "DiscountCouponProduct": [
    {
      "product_id": "10"
    },
    {
      "product_id": "20"
    }
  ]
}

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Created",
    "id": "1",
    "code": 201
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código do cupom
code Number Código do retorno (201)

Relacionando Categorias no Cupom#post

curl --location -g --request POST 'https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}' \
--data-raw '{
  "DiscountCouponCategory": [
    {
      "category_id": "10"
    },
    {
      "category_id": "20"
    }
  ]
}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setBody('{\n  "DiscountCouponCategory": [\n    {\n      "category_id": "10"\n    },\n    {\n      "category_id": "20"\n    }\n  ]\n}');
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddParameter("text/plain", "{\n  \"DiscountCouponCategory\": [\n    {\n      \"category_id\": \"10\"\n    },\n    {\n      \"category_id\": \"20\"\n    }\n  ]\n}",  ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "{\n  \"DiscountCouponCategory\": [\n    {\n      \"category_id\": \"10\"\n    },\n    {\n      \"category_id\": \"20\"\n    }\n  ]\n}");
Request request = new Request.Builder()
  .url("https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}")
  .method("POST", body)
  .build();
Response response = client.newCall(request).execute();

O envio dos dados dentro do json, é limitado a 100 registros por POST. Dessa forma caso tenha 200 registros, será necessários enviar dois POST com 100 registros cada. Cada id dentro das chaves, representará um registro de informação.

Método POST

https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
DiscountCouponCategory JSON Dados do cupom
category_id String Id da categoria

Estrutura de Json:

{
  "DiscountCouponCategory": [
    {
      "category_id": "10"
    },
    {
      "category_id": "20"
    }
  ]
}

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Created",
    "id": "1",
    "code": 201
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código do cupom
code Number Código do retorno (201)

Relacionando Marcas no Cupom#post

curl --location -g --request POST 'https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}' \
--data-raw '{
  "DiscountCouponBrand": [
    {
      "brand_id": "10"
    },
    {
      "brand_id": "20"
    }
  ]
}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setBody('{\n  "DiscountCouponBrand": [\n    {\n      "brand_id": "10"\n    },\n    {\n      "brand_id": "20"\n    }\n  ]\n}');
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddParameter("text/plain", "{\n  \"DiscountCouponBrand\": [\n    {\n      \"brand_id\": \"10\"\n    },\n    {\n      \"brand_id\": \"20\"\n    }\n  ]\n}",  ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "{\n  \"DiscountCouponBrand\": [\n    {\n      \"brand_id\": \"10\"\n    },\n    {\n      \"brand_id\": \"20\"\n    }\n  ]\n}");
Request request = new Request.Builder()
  .url("https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}")
  .method("POST", body)
  .build();
Response response = client.newCall(request).execute();

O envio dos dados dentro do json, é limitado a 100 registros por POST. Dessa forma caso tenha 200 registros, será necessários enviar dois POST com 100 registros cada. Cada id dentro das chaves, representará um registro de informação.

Método POST

https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
DiscountCouponBrand JSON Dados do cupom
brand_id String Id da marca

Estrutura de Json:

{
  "DiscountCouponBrand": [
    {
      "brand_id": "10"
    },
    {
      "brand_id": "20"
    }
  ]
}

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Created",
    "id": "1",
    "code": 201
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código do cupom
code Number Código do retorno (201)

Relacionando Frete Grátis no Cupom#post

curl --location -g --request POST 'https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}' \
--data-raw '{
  "DiscountCouponShipping": [
    {
      "shipping_id": "10"
    },
    {
      "shipping_id": "20"
    }
  ]
}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setBody('{\n  "DiscountCouponShipping": [\n    {\n      "shipping_id": "10"\n    },\n    {\n      "shipping_id": "20"\n    }\n  ]\n}');
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddParameter("text/plain", "{\n  \"DiscountCouponShipping\": [\n    {\n      \"shipping_id\": \"10\"\n    },\n    {\n      \"shipping_id\": \"20\"\n    }\n  ]\n}",  ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "{\n  \"DiscountCouponShipping\": [\n    {\n      \"shipping_id\": \"10\"\n    },\n    {\n      \"shipping_id\": \"20\"\n    }\n  ]\n}");
Request request = new Request.Builder()
  .url("https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}")
  .method("POST", body)
  .build();
Response response = client.newCall(request).execute();

O envio dos dados dentro do json, é limitado a 100 registros por POST. Dessa forma caso tenha 200 registros, será necessários enviar dois POST com 100 registros cada. Cada id dentro das chaves, representará um registro de informação. Para informar o id do frete, você poderá capturar através dessa API: https://traydevelopers.zendesk.com/hc/pt-br/articles/360012934234-Listagem-de-Formas-de-Envio.

Método POST

https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
DiscountCouponShipping JSON Dados do cupom
shipping_id String Id da forma de envio do frete

Estrutura de Json:

{
  "DiscountCouponShipping": [
    {
      "shipping_id": "10"
    },
    {
      "shipping_id": "20"
    }
  ]
}

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Created",
    "id": "1",
    "code": 201
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código do cupom
code Number Código do retorno (201)

Relacionando Desconto no Frete no Cupom#post

curl --location -g --request POST 'https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}' \
--data-raw '{
  "DiscountCouponShipping": {
    "value": "10"
  }
}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setBody('{\n  "DiscountCouponShipping": {\n    "value": "10"\n  }\n}');
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddParameter("text/plain", "{\n  \"DiscountCouponShipping\": {\n    \"value\": \"10\"\n  }\n}",  ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "{\n  \"DiscountCouponShipping\": {\n    \"value\": \"10\"\n  }\n}");
Request request = new Request.Builder()
  .url("https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}")
  .method("POST", body)
  .build();
Response response = client.newCall(request).execute();

O desconto no frete sempre será em reais, nunca será em percentual, mesmo que no cupom genérico o tipo de desconto no campo "type" tenha sido em percentual.

Método POST

https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
DiscountCouponShipping JSON Dados do cupom
value String Valor do desconto

Estrutura de Json:

{
  "DiscountCouponShipping": {
    "value": "10"
  }
}

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Created",
    "id": "1",
    "code": 201
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código do cupom
code Number Código do retorno (201)

Cupom de Troca#post

curl --location -g --request POST 'https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}' \
--data-raw '{
  "DiscountCouponCustomer": {
    "order_id": "10"
  }
}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setBody('{\n  "DiscountCouponCustomer": {\n    "order_id": "10"\n  }\n}');
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddParameter("text/plain", "{\n  \"DiscountCouponCustomer\": {\n    \"order_id\": \"10\"\n  }\n}",  ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "{\n  \"DiscountCouponCustomer\": {\n    \"order_id\": \"10\"\n  }\n}");
Request request = new Request.Builder()
  .url("https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}")
  .method("POST", body)
  .build();
Response response = client.newCall(request).execute();

Após criar o “CUPOM GENÉRICO - BÁSICO”, é possível apenas enviar o código do pedido nos dados do json e o cupom será automaticamente relacionado ao cliente e o desconto será com base no valor do pedido.

Método POST

https://{api_address}/discount_coupons/create_relationship/:id/?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
DiscountCouponShipping JSON Dados do cupom
value String Valor do desconto

Estrutura de Json:

{
  "DiscountCouponCustomer": {
    "order_id": "10"
  }
}

Tabelas Auxiliares de Cupons

Tabela A - Tipo de desconto em reais ou percentual (campo type)

Valor Descrição
$ Desconto em reais
% Desconto em percentual

Tabela B - Permitir que o cupom acumule o desconto com o desconto progressivo (campo cumulative_discount)

Valor Descrição
0 Desconto não acumulativo
1 Desconto acumulativo

Exclusão do Cupom Genérico#delete

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/discount_coupons/:id/?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/discount_coupons/:id/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/discount_coupons/:id/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/discount_coupons/:id/?access_token={{access_token}}")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método Delete

https://{api_address}/discount_coupons/:id/?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do cupom

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Deleted",
    "id": "123",
    "code": 200
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código do cliente
code Number Código do retorno (200)

Exclusão do cupom que contenha produtos específicos, categorias, marcas, clientes ou fretes associados#delete

Para excluir um produto que esteja relacionado ao produto, categoria, marca, cliente ou frete, é possível através dos métodos abaixo:

Método Delete

https://{api_address}/delete_relationship/:id/?access_token={{access_token}}

Exemplo de remoção de cliente:

{
    "DiscountCouponCustomer": [
        {
        "customer_id": "10"
    },
    {
        "customer_id": "20"
    }
    ]
}

Exemplo de remoção de TODOS os clientes:

{
    "DiscountCouponCustomer":
        {
        "delete": "all"
    }
}

Exemplo de remoção de produtos:

{
    "DiscountCouponProduct": [
        {
        "product_id": "10"
    },
    {
        "product_id": "20"
    }
    ]
}

Exemplo de remoção de todos os produtos:

{
    "DiscountCouponProduct":
        {
        "delete": "all"
    }
}

Exemplo remoção de categorias:

{
    "DiscountCouponCategory": [
        {
        "category_id": "10"
    },
    {
        "category_id": "20"
    }
    ]
}

Exemplo de remoção de todas as categorias:

{
    "DiscountCouponCategory":
        {
        "delete": "all"
    }
}

Exemplo de remoção de marcas:

{
    "DiscountCouponBrand": [
        {
        "brand_id": "10"
    },
    {
        "brand_id": "20"
    }
    ]
}

Exemplo de remoção de todas as marcas:

{
    "DiscountCouponBrand":
        {
        "delete": "all"
    }
}

Exemplo de remoção de fretes ou desconto no frete:

{
    "DiscountCouponShipping": [
        {
        "shipping_id": "10"
    },
    {
        "shipping_id": "20"
    }
    ]
}

Exemplo de remoção de todos os desconto de frete:

{
    "DiscountCouponShipping":
        {
        "delete": "all"
    }
}

APIs de Características

Consultar Características do Produto#get

Requisição para consultar os dados das características dos produtos.

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/products/properties?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/products/properties?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/products/properties?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/products/properties?access_token={{access_token}}")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/products/properties?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
id String Código da característica
name String Nome da característica
position String Posição da característica
display String Visível na loja virtual
active_display String Ativo na loja virtual

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "paging": {
        "total": 24,
        "page": 1,
        "offset": 0,
        "limit": 30,
        "maxLimit": 50
    },
    "sort": [
        {
            "id": "asc"
        }
    ],
    "availableFilters": [
        "id",
        "name",
        "position",
        "display",
        "active_display"
    ],
    "appliedFilters": {
        "Property.active_display": "1"
    },
    "Properties": [
        {
            "Property": {
                "id": "2",
                "active_display": "1",
                "name": "Cor",
                "position": "1",
                "display": "1",
                "has_product": "1",
                "PropertyValues": [
                    {
                        "id": "72",
                        "name": "Preto",
                        "property_id": "2",
                        "image": {
                            "http": "http://urldaimagem/img/img_prod/123/cor_4.png?123",
                            "https": "https://urldaimagem/img/img_prod/123/cor_4.png?123"
                        }
                    },
                    {
                        "id": "74",
                        "name": "Vermelho",
                        "property_id": "2",
                        "image": {
                            "http": "http://urldaimagem/img/img_prod/123/cor_12.png?123",
                            "https": "https://urldaimagem/img/img_prod/123/cor_12.png?123"
                        }
                    }
                ]
            }
        }
    ]
}
Campo Tipo Descrição
paging Object Dados de paginação
total Number Total de registros
page Number Páginas corrente
offset Number Registro inicial da página
limit Number Limite de registros
maxLimit Number Máximo de registros
sort Object Ordenação
availableFilters String Filtros disponíveis
appliedFilters String Filtros utilizados
Properties Object Dados das características
Property Object Dados da característica
id Number Código da característica
active_display Number Característica ativa na loja virtual
name String Nome da característica
position Number Posição da característica
display Number Característica visível na loja virtual
has_product Number Característica com produtos
PropertyValues Object Valores da característica
id Number Código do valor da característica
name String Nome do valor da característica
property_id Number Código da característica
image Object Código da característica
http Object Imagem da característica
https Object Imagem da característica em ambiente seguro

Cadastrar Características de Produtos#post

Requisição para cadastro das características dos produtos.

Código de Exemplo:

curl --location -g --request POST 'https://{api_address}/products/:id/properties?access_token={{access_token}}' \
--data-urlencode '[]=["property_id" => "1", "value" => "Branco"]' \
--data-urlencode '[]=["property_id" => "2", "value" => "220v"]' \
--data-urlencode '[]=["property_id" => "3", "value" => "Teste"]'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/products/:id/properties?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->addPostParameter(array(
  '[]' => '["property_id" => "1", "value" => "Branco"]',
  '[]' => '["property_id" => "2", "value" => "220v"]',
  '[]' => '["property_id" => "3", "value" => "Teste"]'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/products/:id/properties?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddParameter("[]", "[\"property_id\" => \"1\", \"value\" => \"Branco\"]");
request.AddParameter("[]", "[\"property_id\" => \"2\", \"value\" => \"220v\"]");
request.AddParameter("[]", "[\"property_id\" => \"3\", \"value\" => \"Teste\"]");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "[]=[\"property_id\" => \"1\", \"value\" => \"Branco\"]&[]=[\"property_id\" => \"2\", \"value\" => \"220v\"]&[]=[\"property_id\" => \"3\", \"value\" => \"Teste\"]");
Request request = new Request.Builder()
  .url("https://{api_address}/products/:id/properties?access_token={{access_token}}")
  .method("POST", body)
  .build();
Response response = client.newCall(request).execute();

Estrutura do Json:

[
    {
        "property_id": "1",
        "value": "Branco"
    },
    {
        "property_id": "2",
        "value": "220v"
        
    },
    {
        "property_id": "3",
        "value": "Teste"
    }
]

Método POST

https://{api_address}/products/:id/properties?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
property_id String Código da característica do produto
value String (100) característica do produto

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Created",
    "code": 201
}
Campo Tipo Descrição
message String Mensagem de retorno
code Number Código do retorno (201)

Criar uma Característica#post

Código de Exemplo:

curl --location -g --request POST 'https://{api_address}/properties?access_token={{access_token}}' \
--data-raw '{
    "name": "Caracteristica via API 1",
    "PropertyValues": [
        {
            "name": "Valor 1"
        },
        {
            "name": "Valor 2"
        }
    ]
}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/properties?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setBody('{\n    "name": "Caracteristica via API 1",\n    "PropertyValues": [\n        {\n            "name": "Valor 1"\n        },\n        {\n            "name": "Valor 2"\n        }\n    ]\n}');
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/properties?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddParameter("text/plain", "{\n    \"name\": \"Caracteristica via API 1\",\n    \"PropertyValues\": [\n        {\n            \"name\": \"Valor 1\"\n        },\n        {\n            \"name\": \"Valor 2\"\n        }\n    ]\n}",  ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "{\n    \"name\": \"Caracteristica via API 1\",\n    \"PropertyValues\": [\n        {\n            \"name\": \"Valor 1\"\n        },\n        {\n            \"name\": \"Valor 2\"\n        }\n    ]\n}");
Request request = new Request.Builder()
  .url("https://{api_address}/properties?access_token={{access_token}}")
  .method("POST", body)
  .build();
Response response = client.newCall(request).execute();

Método POST

https://{api_address}/properties?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
name String Nome da característica
PropertyValues Array[ ] Propriedades da característica
name String Nome da propriedade

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Created",
    "id": "19",
    "code": 201
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código da característica
code Number Código do retorno (201)

Deletar uma Característica#delete

Código de Exemplo:

curl --location -g --request DELETE 'https://{api_address}/properties/:id?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/properties/:id?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_DELETE);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/properties/:id?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.DELETE);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
  .url("https://{api_address}/properties/:id?access_token={{access_token}}")
  .method("DELETE", body)
  .build();
Response response = client.newCall(request).execute();

Método Delete

https://{api_address}/properties/:id?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do cliente

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
  "message": "Deleted",
  "id": "19",
  "code": 200
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código da característica
code Number Código do retorno (200)

API de Categorias

As APIs de Categorias disponibiliza a manutenção das categorias dentro da plataforma Tray, possiblilitando criar, atualizar e excluir as categorias por aplicações externas.

Consultar Árvore de Categorias#get

Requisição para consultar os dados das categorias de forma estruturada.

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/categories/tree/:id?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/categories/tree/:id?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/categories/tree/:id?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/categories/tree/:id?access_token={{access_token}}")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/categories/tree/:id

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do categoria

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
  "Category": [
      {
          "Category": {
              "slug": "categoria-teste",
              "id": "123",
              "parent_id": "",
              "name": "Categoria Teste",
              "description": "Descrição da Categoria de Teste",
              "title": "",
              "small_description": "",
              "link": {
                  "http": "http://loja.commercesuite.com.br/categoria-teste",
                  "https": "https://loja.commercesuite.com.br/categoria-teste"
              },
              "images": [
                  {
                      "http": "http://images.tcdn.com.br/img/img_prod/123/categoria_img_1_123.png",
                      "https": "https://images.tcdn.com.br/img/img_prod/123/categoria_img_1_123.png"
                  }
              ],
              "has_product": "1",
              "children": [
                  {
                      "Category": {
                          "slug": "subcategoria-teste",
                          "id": "456",
                          "parent_id": "",
                          "name": "Subcategoria Teste",
                          "description": "Descrição da Categoria de Teste",
                          "title": "",
                          "small_description": "",
                          "link": {
                              "http": "http://loja.commercesuite.com.br/subcategoria-teste",
                              "https": "https://loja.commercesuite.com.br/subcategoria-teste"
                          },
                          "images": [
                              {
                                  "http": "http://images.tcdn.com.br/img/img_prod/123/categoria_img_1_456.png",
                                  "https": "https://images.tcdn.com.br/img/img_prod/123/categoria_img_1_456.png"
                              }
                          ],
                          "has_product": "1",
                          "children": null
                      }
                  }
              ]
          }
      }
  ]
}
Campo Tipo Descrição
Category Object Lista da categoria
slug String Final da URL da categoria
id Number Código da categoria
parent_id Number Código da categoria pai
name String Nome da categoria
description String Descrição da categoria
title String Titulo da categoria
small_description String Descrição resumida da categoria
link Object URLs da categoria
http String URL da categoria
https String URL segura da categoria
images Object Imagens da categoria
http Number URL da imagem da categoria
https Number URL segura da imagem da categoria
has_product Number Categoria com produto relacionado 0
children Object Subcategoria do produto (com os mesmos dados deste Object Category)

Consultar Dados das Categorias#get

Requisição para consultar os dados das categorias.

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/categories/?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/categories/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/categories/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/categories/?access_token={{access_token}}")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/categories/

Parâmetros enviados:

Campo Tipo Descrição
access_token String Token de acesso
attrs String Atributos da categoria
limit Number Limite de registros
page Number Página corrente
sort String Ordenação ex.: [campo]_[asc/desc]

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
  "paging": {
      "total": 39,
      "page": 1,
      "offset": 0,
      "limit": 30,
      "maxLimit": 50
  },
  "sort": [
      {
          "id": "asc"
      }
  ],
  "availableFilters": [
      "id",
      "name",
      "parent_id"
  ],
  "appliedFilters": [],
  "Categories": [
      {
          "Category": {
              "id": "123",
              "parent_id": "",
              "name": "Categoria Teste",
              "description": "Descrição da Categoria de Teste",
              "small_description": "",
              "Images": [
                  {
                      "http": "http://images.tcdn.com.br/img/img_prod/123/categoria_img_1_123.png",
                      "https": "https://images.tcdn.com.br/img/img_prod/123/categoria_img_1_123.png"
                  }
              ]
          }
      }
  ]
}
Campo Tipo Descrição
paging Object Dados de paginação
total Number Total de registros
page Number Página corrente
offset Number Registro inicial da página
limit Number Limite de registros
maxLimit Number Máximo de registros
sort Object Ordenação
availableFilters String Filtros disponíveis
appliedFilters String Filtros utilizados
Categories Object Lista de categorias
Category Object Dados da categoria
id Number Código da categoria
parent_id Number Código da categoria pai
name String Nome da categoria
description String Descrição da categoria
small_description String Descrição resumida da categoria
Images Object Imagens da categoria
http Number URL da imagem da categoria
https Number URL segura da imagem da categoria

Consultar Dados da Categoria-por :id#get

Requisição para consultar os dados de uma categoria.

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/categories/:id?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/categories/:id?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/categories/:id?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/categories/:id?access_token={{access_token}}")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/categories/:id

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código da categoria

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
  "Category": {
      "slug": "categoria-teste",
      "id": "123",
      "parent_id": "",
      "name": "Categoria Teste",
      "description": "Descrição da Categoria de Teste",
      "order": "2",
      "title": "",
      "small_description": "",
      "link": {
          "http": "http://loja.commercesuite.com.br/categoria-teste",
          "https": "https://loja.commercesuite.com.br/categoria-teste"
      },
      "has_acceptance_term": "",
      "acceptance_term": "",
      "Images": [
          {
              "http": "http://images.tcdn.com.br/img/img_prod/123/categoria_img_1_123.png",
              "https": "https://images.tcdn.com.br/img/img_prod/123/categoria_img_1_123.png"
          }
      ]
  }
}
Campo Tipo Descrição
Category Object Dados da categoria
slug String Final da URL da categoria
id Number Código da categoria
parent_id Number Código da categoria pai
name String Nome da categoria
description String Descrição da categoria
order Number Ordem de exibição da categoria
small_description String Descrição resumida da categoria
link Object URLs da categoria
http String URL da categoria
https String URL segura da categoria
has_acceptance_term Number Categoria com termo de aceitação ( 0 / 1)
acceptance_term String Texto com os termos a ser aceito na categoria
Images Object Imagens da categoria
http String URL da imagem da categoria
https String URL segura da imagem da categoria

Cadastrar Categoria#post

Requisição para criação de uma categoria. Deverá enviar o JSON com os dados da categoria para a criação.

Código de Exemplo:

curl --location -g --request POST 'https://{api_address}/categories/?access_token={{access_token}}' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode '["Category"]["name"]=Categoria Teste' \
--data-urlencode '["Category"]["description"]=Categoria de Teste da Loja' \
--data-urlencode '["Category"]["slug"]=categoria-teste' \
--data-urlencode '["Category"]["order"]=2' \
--data-urlencode '["Category"]["title"]=Categoria de Teste' \
--data-urlencode '["Category"]["small_description"]=Categoria de Teste da Loja' \
--data-urlencode '["Category"]["has_acceptance_term"]=1' \
--data-urlencode '["Category"]["acceptance_term"]=Eu aceito os termos de uso ...' \
--data-urlencode '["Category"]["metatag"]["keywords"]=categoria teste' \
--data-urlencode '["Category"]["metatag"]["description"]=categoria teste da loja' \
--data-urlencode '["Category"]["property"]=Característica Teste 1","Característica Teste 2'
var client = new RestClient("https://{api_address}/categories/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("[\"Category\"][\"name\"]", "Categoria Teste");
request.AddParameter("[\"Category\"][\"description\"]", "Categoria de Teste da Loja");
request.AddParameter("[\"Category\"][\"slug\"]", "categoria-teste");
request.AddParameter("[\"Category\"][\"order\"]", "2");
request.AddParameter("[\"Category\"][\"title\"]", "Categoria de Teste");
request.AddParameter("[\"Category\"][\"small_description\"]", "Categoria de Teste da Loja");
request.AddParameter("[\"Category\"][\"has_acceptance_term\"]", "1");
request.AddParameter("[\"Category\"][\"acceptance_term\"]", "Eu aceito os termos de uso ...");
request.AddParameter("[\"Category\"][\"metatag\"][\"keywords\"]", "categoria teste");
request.AddParameter("[\"Category\"][\"metatag\"][\"description\"]", "categoria teste da loja");
request.AddParameter("[\"Category\"][\"property\"]", "Característica Teste 1\",\"Característica Teste 2");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
var client = new RestClient("https://{api_address}/categories/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("[\"Category\"][\"name\"]", "Categoria Teste");
request.AddParameter("[\"Category\"][\"description\"]", "Categoria de Teste da Loja");
request.AddParameter("[\"Category\"][\"slug\"]", "categoria-teste");
request.AddParameter("[\"Category\"][\"order\"]", "2");
request.AddParameter("[\"Category\"][\"title\"]", "Categoria de Teste");
request.AddParameter("[\"Category\"][\"small_description\"]", "Categoria de Teste da Loja");
request.AddParameter("[\"Category\"][\"has_acceptance_term\"]", "1");
request.AddParameter("[\"Category\"][\"acceptance_term\"]", "Eu aceito os termos de uso ...");
request.AddParameter("[\"Category\"][\"metatag\"][\"keywords\"]", "categoria teste");
request.AddParameter("[\"Category\"][\"metatag\"][\"description\"]", "categoria teste da loja");
request.AddParameter("[\"Category\"][\"property\"]", "Característica Teste 1\",\"Característica Teste 2");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
RequestBody body = RequestBody.create(mediaType, "[\"Category\"][\"name\"]=Categoria Teste&[\"Category\"][\"description\"]=Categoria de Teste da Loja&[\"Category\"][\"slug\"]=categoria-teste&[\"Category\"][\"order\"]=2&[\"Category\"][\"title\"]=Categoria de Teste&[\"Category\"][\"small_description\"]=Categoria de Teste da Loja&[\"Category\"][\"has_acceptance_term\"]=1&[\"Category\"][\"acceptance_term\"]=Eu aceito os termos de uso ...&[\"Category\"][\"metatag\"][\"keywords\"]=categoria teste&[\"Category\"][\"metatag\"][\"description\"]=categoria teste da loja&[\"Category\"][\"property\"]=Característica Teste 1\",\"Característica Teste 2");
Request request = new Request.Builder()
  .url("https://{api_address}/categories/?access_token={{access_token}}")
  .method("POST", body)
  .addHeader("Content-Type", "application/x-www-form-urlencoded")
  .build();
Response response = client.newCall(request).execute();

Método POST

https://{api_address}/categories/

Parâmetros enviados:

Estrutura do Json:

{
  "Category": {
      "name": "Categoria Teste", 
      "description": "Categoria de Teste da Loja",
      "slug": "categoria-teste",
      "order":"2",
      "title": "Categoria de Teste",
      "small_description":"Categoria de Teste da Loja",
      "has_acceptance_term":"1",
      "acceptance_term": "Eu aceito os termos de uso ...",
      "metatag": {
          "keywords": "categoria teste 123",
          "description": "categoria teste da loja 123"
      },
      "property": [
          "Característica Teste 1 123",
          "Característica Teste 2 123"
      ]
  }
}
Campo Tipo Descrição
access_token String Chave de acesso
Category JSON Dados da categoria
name String (255) Nome da categoria
description String Descrição da categoria
slug String (255) Final da URL da categoria
order Number Posição na Ordenação das Categorias
title String (255) Title da pagina de categorias
small_description String Descrição detalhada da Categoria
has_acceptance_term Number Categoria com termo de aceitação ( 0 / 1)
acceptance_term String Texto com os termos a ser aceito na categoria
Metatag Object Meta Tag
keywords String (256) Palavras-Chaves de Meta Tag
description String (256) Descrição de Meta Tag
property String Características

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Created",
    "id": "456",
    "code": 201
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código da categoria
code Number Código do retorno (201)

Observação:

Para cadastrar uma sub categoria, deverá ser realizado os mesmos procedimento para o cadastro da categoria pai, tendo como única informação adicional no corpo da requisição do json, o campo "parent_id" (categoria pai).

Atualizar Dados da Categoria#put

Requisição para alterar os dados de uma categoria. Deverá enviar o JSON com os dados do categoria para a alteração.

Código de Exemplo:

curl --location -g --request PUT 'https://{api_address}/categories/?access_token={{access_token}}' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode '["Category"]["name"]=Categoria Teste' \
--data-urlencode '["Category"]["description"]=Categoria de Teste da Loja' \
--data-urlencode '["Category"]["slug"]=categoria-teste' \
--data-urlencode '["Category"]["order"]=2' \
--data-urlencode '["Category"]["title"]=Categoria de Teste' \
--data-urlencode '["Category"]["small_description"]=Categoria de Teste da Loja' \
--data-urlencode '["Category"]["has_acceptance_term"]=1' \
--data-urlencode '["Category"]["acceptance_term"]=Eu aceito os termos de uso ...' \
--data-urlencode '["Category"]["metatag"]["keywords"]=categoria teste' \
--data-urlencode '["Category"]["metatag"]["description"]=categoria teste da loja' \
--data-urlencode '["Category"]["property"]=Característica Teste 1","Característica Teste 2'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/categories/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_PUT);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(
  'Content-Type' => 'application/x-www-form-urlencoded'
));
$request->addPostParameter(array(
  '["Category"]["name"]' => 'Categoria Teste',
  '["Category"]["description"]' => 'Categoria de Teste da Loja',
  '["Category"]["slug"]' => 'categoria-teste',
  '["Category"]["order"]' => '2',
  '["Category"]["title"]' => 'Categoria de Teste',
  '["Category"]["small_description"]' => 'Categoria de Teste da Loja',
  '["Category"]["has_acceptance_term"]' => '1',
  '["Category"]["acceptance_term"]' => 'Eu aceito os termos de uso ...',
  '["Category"]["metatag"]["keywords"]' => 'categoria teste',
  '["Category"]["metatag"]["description"]' => 'categoria teste da loja',
  '["Category"]["property"]' => 'Característica Teste 1","Característica Teste 2'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/categories/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.PUT);
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("[\"Category\"][\"name\"]", "Categoria Teste");
request.AddParameter("[\"Category\"][\"description\"]", "Categoria de Teste da Loja");
request.AddParameter("[\"Category\"][\"slug\"]", "categoria-teste");
request.AddParameter("[\"Category\"][\"order\"]", "2");
request.AddParameter("[\"Category\"][\"title\"]", "Categoria de Teste");
request.AddParameter("[\"Category\"][\"small_description\"]", "Categoria de Teste da Loja");
request.AddParameter("[\"Category\"][\"has_acceptance_term\"]", "1");
request.AddParameter("[\"Category\"][\"acceptance_term\"]", "Eu aceito os termos de uso ...");
request.AddParameter("[\"Category\"][\"metatag\"][\"keywords\"]", "categoria teste");
request.AddParameter("[\"Category\"][\"metatag\"][\"description\"]", "categoria teste da loja");
request.AddParameter("[\"Category\"][\"property\"]", "Característica Teste 1\",\"Característica Teste 2");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
RequestBody body = RequestBody.create(mediaType, "[\"Category\"][\"name\"]=Categoria Teste&[\"Category\"][\"description\"]=Categoria de Teste da Loja&[\"Category\"][\"slug\"]=categoria-teste&[\"Category\"][\"order\"]=2&[\"Category\"][\"title\"]=Categoria de Teste&[\"Category\"][\"small_description\"]=Categoria de Teste da Loja&[\"Category\"][\"has_acceptance_term\"]=1&[\"Category\"][\"acceptance_term\"]=Eu aceito os termos de uso ...&[\"Category\"][\"metatag\"][\"keywords\"]=categoria teste&[\"Category\"][\"metatag\"][\"description\"]=categoria teste da loja&[\"Category\"][\"property\"]=Característica Teste 1\",\"Característica Teste 2");
Request request = new Request.Builder()
  .url("https://{api_address}/categories/?access_token={{access_token}}")
  .method("PUT", body)
  .addHeader("Content-Type", "application/x-www-form-urlencoded")
  .build();
Response response = client.newCall(request).execute();

Método PUT

https://{api_address}/categories/:id

Parâmetros enviados:

Estrutura do Json:

{
  "Category": {
      "name": "Categoria Teste", 
      "description": "Categoria de Teste da Loja",
      "slug": "categoria-teste",
      "order":"2",
      "title": "Categoria de Teste",
      "small_description":"Categoria de Teste da Loja",
      "has_acceptance_term":"1",
      "acceptance_term": "Eu aceito os termos de uso ...",
      "metatag": {
          "keywords": "categoria teste 123",
          "description": "categoria teste da loja 123"
      },
      "property": [
          "Característica Teste 1 123",
          "Característica Teste 2 123"
      ]
  }
}
Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código da categoria (pai)
Category JSON Dados da categoria
description String Descrição da categoria
slug String Final da URL da categoria
order Number Posição na Ordenação das Categorias
title String Title da pagina de categorias
small_description String Descrição detalhada da Categoria
has_acceptance_term Number Categoria com termo de aceitação ( 0
acceptance_term String Texto com os termos a ser aceito na categoria
Metatag Object Meta Tag
keywords String Palavras-Chaves de Meta Tag
description String Descrição de Meta Tag
property String Características

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Created",
    "id": "456",
    "code": 201
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código da categoria
code Number Código do retorno (201)

Observação:

Para atualizar uma sub categoria, deverá ser realizado os mesmos procedimento acima, no entanto, na url o id informado deverá ser o id da subcategoria

E no corpo da requisição, deverá ser informado o campo "parent_id", que será o id da categoria pai onde se encontra atualmente a subcategoria

Excluir Categoria#delete

Código de Exemplo:

curl --location -g --request DELETE 'https://{api_address}/categories/:id?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/categories/:id?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_DELETE);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/categories/:id?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.DELETE);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
  .url("https://{api_address}/categories/:id?access_token={{access_token}}")
  .method("DELETE", body)
  .build();
Response response = client.newCall(request).execute();

Método Delete

https://{api_address}/categories/:id

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código da categoria

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
  "message": "Deleted",
  "id": "456",
  "code": 200
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código da categoria
code Number Código do retorno (200)

APIs de Variação de Produtos

Listagem de Variações#get

Requisição para consultar os dados de diversas variações.

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/products/variants/?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/products/variants/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/products/variants/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/products/variants/?access_token={{access_token}}")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/products/variants/?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
id Number Código da variação
product_id Number Código do produto principal
ean String EAN da variação
price Decimal Preço da variação
promotional_price Decimal Preço promocional da variação
stock Number Estoque da variação
minimum_stock Number Estoque mínimo da variação
modified Date Data de modificação (Pode-se enviar um intervalo de data, ex.: [start], end)
sort String Ordenação de listagem (ex.: [campo]_[asc/desc])
limit Number Quantidade de registros (max. 50)
page Number Número da página da consulta

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "paging": {
        "total": 55,
        "page": 1,
        "offset": 0,
        "limit": 30,
        "maxLimit": 50
    },
    "sort": [
        {
            "id": "asc"
        }
    ],
    "availableFilters": [
        "id",
        "product_id",
        "ean",
        "price",
        "promotional_price",
        "stock",
        "minimum_stock",
        "value_1",
        "reference",
        "value_2",
        "type_1",
        "type_2",
        "modified"
    ],
    "appliedFilters": [],
    "Variants": [
        {
            "Variant": {
                "id": "1233",
                "ean": "123",
                "order": "1",
                "product_id": "18",
                "price": "12.50",
                "cost_price": "10.00",
                "stock": "51",
                "minimum_stock": "1",
                "reference": "THR016-1",
                "weight": "21",
                "length": "21",
                "width": "21",
                "height": "21",
                "start_promotion": "2019-01-01",
                "end_promotion": "2019-01-10",
                "promotional_price": "10.00",
                "payment_option": "R$ 11,25 à vista com desconto Boleto - Yapay",
                "payment_option_details": [
                    {
                        "display_name": "Boleto - Yapay",
                        "type": "bank_billet",
                        "plots": "1",
                        "value": "11.25",
                        "tax": "0.00"
                    }
                ],
                "available": "1",
                "illustrative_image": {
                    "http": "http://urldaimagem/img/img_prod/123/123.png",
                    "https": "https://urldaimagem/img/img_prod/123/123.png"
                },
                "quantity_sold": "10",
                "color_id_1": "2",
                "color_id_2": "0",
                "cubic_weight": "1930",
                "Sku": [
                    {
                        "type": "Cor",
                        "value": "Azul",
                        "image": "http://urldaimagem/img/img_prod/123/cor_2.png?20160622100723",
                        "image_secure": "https://urldaimagem/img/img_prod/123/cor_2.png?20160622100723"
                    },
                    {
                        "type": "Tamanho",
                        "value": "38"
                    }
                ],
                "VariantImage": [
                    {
                        "http": "http://urldaimagem/img/img_prod/123/123.png",
                        "https": "https://urldaimagem/img/img_prod/123/123.png",
                        "thumbs": {
                            "30": {
                                "http": "http://urldaimagem/img/img_prod/123/30_123.png",
                                "https": "https://urldaimagem/img/img_prod/123/30_123.png"
                            },
                            "90": {
                                "http": "http://urldaimagem/img/img_prod/123/90_123.png",
                                "https": "https://urldaimagem/img/img_prod/123/90_123.png"
                            },
                            "180": {
                                "http": "http://urldaimagem/img/img_prod/123/180_123.png",
                                "https": "https://urldaimagem/img/img_prod/123/180_123.png"
                            }
                        }
                    }
                ]
            }
        }
    ]
}
Campo Tipo Descrição
access_token String Chave de acesso
paging Object Dados de raginação
total Number Total de tegistros
page Number Páginas corrente
offset Number Registro inicial da página
limit Number Limite de registros
maxLimit Number Máximo de registros
sort Object[ ] Ordenação
availableFilters String[ ] Filtros disponíveis
appliedFilters String[ ] Filtros utilizados
Variants Object[ ] Dados da variações dos produtos
Variant Object Dados da variação
id Number Código da variação
ean String Código EAN da variação
order String Ordem da visualização da variação
product_id Number Código
price Decimal Preço da variação
cost_price Decimal Preço da variação de custo da variação
stock Number Estoque da variação
minimum_stock Number Estoque mínimo da variação
reference String Referência da variação
weight Decimal Peso da variação
cubic_weight Decimal Peso cubico da variação
length Decimal Comprimento da variação
width Decimal Largura da variação
height Decimal Altura da variação
start_promotion Date Data de início de promoção da variação
end_promotion Date Data de termino de promoção da variação
promotional_price Decimal Preço promocional da variação
payment_option String Detalhes/Opções de pagamento da variação
payment_option_details Object[ ] Detalhes/Opções separadas de pagamento da variação
display_name String Nome da forma de pagamento da variação
type String Typo da forma de pagamento da variação
plots Number Quantidade de parcelas da forma de pagamento da variação
value Decimal Valor da parcela da forma de pagamento da variação
tax Decimal Taxa da parcela da forma de pagamento da variação
available Number Variação disponível (Veja Tabela A)
illustrative_image String Imagem ilustrativa da variação
color_id_1 String Código da cor primária da variação
color_id_2 String Código da cor secundaria da variação
type String Tipo de SKU da variação
value String Valor do SKU da variação
image String URL da imagem do SKU da variação
image_secure String URL segura da imagem do SKU da variação
VariantImage Object[ ] Imagens da variação
http String URL da imagem da variação
https String URL segura da imagem da variação
thumbs Object Miniaturas da imagem da variação
30 Object Miniaturas da imagem da variação (30px)
http String URL da miniaturas da imagem da variação (30px)
https String URL segura da miniaturas da imagem da variação (30px)
90 Object Miniaturas da imagem (90px)
http String URL da miniaturas da imagem da variação (90px)
https String URL segura da miniaturas da imagem da variação (90px)
180 Object Miniaturas da imagem da variação (180px)
http String URL da miniaturas da imagem da variação (180px)
https String URL segura da miniaturas da imagem da variação (180px)

Consultar Dados da Variação#get

Requisição para consultar os dados de uma variação do produto.

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/products/variants/:id?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/products/variants/:id?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/products/variants/:id?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/products/variants/:id?access_token={{access_token}}")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/products/variants/:id?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código da Variação do produto

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "Variant": {
        "id": "255",
        "ean": "125",
        "order": "1",
        "product_id": "18",
        "price": "12.50",
        "cost_price": "10.00",
        "stock": "51",
        "minimum_stock": "1",
        "reference": "THR016-2",
        "weight": "21",
        "cubic_weight": "1930",
        "length": "21",
        "width": "21",
        "height": "21",
        "start_promotion": "2019-01-01",
        "end_promotion": "2019-01-10",
        "promotional_price": "10.00",
        "payment_option": "R$ 11,25 à vista com desconto Boleto - Yapay",
        "payment_option_details": [
            {
                "display_name": "Boleto - Yapay",
                "type": "bank_billet",
                "plots": "1",
                "value": "11.25",
                "tax": "0.00"
            }
        ],
        "available": "1",
        "illustrative_image": "",
        "Sku": [
            {
                "type": "Cor",
                "value": "Preta"
            },
            {
                "type": "Tamanho",
                "value": "40"
            }
        ],
        "quantity_sold": "10",
        "color_id_1": "23",
        "color_id_2": "0",
        "VariantImage": [
            {
                "http": "http://images.tcdn.com.br/img/img_prod/406562/18_123.jpg",
                "https": "https://images.tcdn.com.br/img/img_prod/406562/18_123.jpg",
                "thumbs": {
                    "30": {
                        "http": "http://images.tcdn.com.br/img/img_prod/123/30_123.jpg",
                        "https": "https://images.tcdn.com.br/img/img_prod/123/30_123.jpg"
                    },
                    "90": {
                        "http": "http://images.tcdn.com.br/img/img_prod/123/90_123.jpg",
                        "https": "https://images.tcdn.com.br/img/img_prod/123/90_123.jpg"
                    },
                    "180": {
                        "http": "http://images.tcdn.com.br/img/img_prod/123/180_123.jpg",
                        "https": "https://images.tcdn.com.br/img/img_prod/123/180_123.jpg"
                    }
                }
            }
        ]
    }
}
Campo Tipo Descrição
Variant Object Dados da variação
id Number Código da variação
ean String Código EAN da variação
order String Ordem da visualização da variação
product_id Number Código da variação
price Decimal Preço da variação
cost_price Decimal Preço da variação de custo da variação
stock Number Estoque da variação
minimum_stock Number Estoque mínimo da variação
reference String Referência da variação
weight Decimal Peso da variação
cubic_weight Decimal Peso cubico da variação
length Decimal Comprimento da variação
width Decimal Largura da variação
height Decimal Altura da variação
start_promotion Date Data de início de promoção da variação
end_promotion Date Data de termino de promoção da variação
promotional_price Decimal Preço promocional da variação
payment_option String Detalhes/Opções de pagamento da variação
payment_option_details Object[ ] Detalhes/Opções separadas de pagamento da variação
display_name String Nome da forma de pagamento da variação
type String Tipo da forma de pagamento da variação
plots Number Quantidade de parcelas da forma de pagamento da variação
value Decimal Valor da parcela de pagamento da variação
tax Decimal Valor da taxa da parcela da forma de pagamento da variação
available Number Variação disponível (Veja Tabela A)
illustrative_image String Imagem ilustrativa da variação
color_id_1 String Código da cor primária da variação
color_id_2 String Código da cor secundaria da variação
Sku String SKU da variação
type String Tipo de SKU da variação
value String Valor do SKU da variação
image String URL da imagem do SKU da variação
image_secure String URL segura da imagem do SKU da variação
VariantImage Object[ ] Imagens da variação
http String URL da imagem da variação
https String URL segura da imagem da variação
thumbs Object Miniaturas da imagem da variação
30 Object Miniaturas da imagem da variação (30px)
http String URL da miniaturas da imagem da variação (30px)
https String URL segura da miniaturas da imagem da variação (30px)
90 Object Miniaturas da imagem (90px)
http String URL da miniaturas da imagem da variação (90px)
https String URL segura da miniaturas da imagem da variação (90px)
180 Object Miniaturas da imagem da variação (180px)
http String URL da miniaturas da imagem da variação (180px)
https String URL segura da miniaturas da imagem da variação (180px)

Cadastrar Variação#post

Requisição para inclusão de variação do produto. Deverá enviar o JSON com os dados da variação para a criação.

Código de Exemplo:

curl --location -g --request POST 'https://{api_address}/products/variants/?access_token={{access_token}}' \
--data-urlencode '["Variant"]["product_id"]=123' \
--data-urlencode '["Variant"]["ean"]=ABC' \
--data-urlencode '["Variant"]["order"]=1' \
--data-urlencode '["Variant"]["price"]=12.00' \
--data-urlencode '["Variant"]["cost_price"]=10.00' \
--data-urlencode '["Variant"]["stock"]=200' \
--data-urlencode '["Variant"]["minimum_stock"]=10' \
--data-urlencode '["Variant"]["reference"]=THR016' \
--data-urlencode '["Variant"]["weight"]=21' \
--data-urlencode '["Variant"]["length"]=21' \
--data-urlencode '["Variant"]["width"]=21' \
--data-urlencode '["Variant"]["height"]=21' \
--data-urlencode '["Variant"]["start_promotion"]=2021-01-01' \
--data-urlencode '["Variant"]["end_promotion"]=2021-02-01' \
--data-urlencode '["Variant"]["promotional_price"]=10.00' \
--data-urlencode '["Variant"]["promotional_price"]=10.00' \
--data-urlencode '["Variant"]["promotional_price"]=10.00' \
--data-urlencode '["Variant"]["Sku"][0]["type"]=Cor' \
--data-urlencode '["Variant"]["Sku"][0]["value"]=Azul' \
--data-urlencode '["Variant"]["Sku"][1]["type"]=Tamanho' \
--data-urlencode '["Variant"]["Sku"][1]["value"]=38' \
--data-urlencode '["Variant"]["quantity_sold"]=10'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/products/variants/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->addPostParameter(array(
  '["Variant"]["product_id"]' => '123',
  '["Variant"]["ean"]' => 'ABC',
  '["Variant"]["order"]' => '1',
  '["Variant"]["price"]' => '12.00',
  '["Variant"]["cost_price"]' => '10.00',
  '["Variant"]["stock"]' => '200',
  '["Variant"]["minimum_stock"]' => '10',
  '["Variant"]["reference"]' => 'THR016',
  '["Variant"]["weight"]' => '21',
  '["Variant"]["length"]' => '21',
  '["Variant"]["width"]' => '21',
  '["Variant"]["height"]' => '21',
  '["Variant"]["start_promotion"]' => '2021-01-01',
  '["Variant"]["end_promotion"]' => '2021-02-01',
  '["Variant"]["promotional_price"]' => '10.00',
  '["Variant"]["promotional_price"]' => '10.00',
  '["Variant"]["promotional_price"]' => '10.00',
  '["Variant"]["Sku"][0]["type"]' => 'Cor',
  '["Variant"]["Sku"][0]["value"]' => 'Azul',
  '["Variant"]["Sku"][1]["type"]' => 'Tamanho',
  '["Variant"]["Sku"][1]["value"]' => '38',
  '["Variant"]["quantity_sold"]' => '10'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/products/variants/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddParameter("[\"Variant\"][\"product_id\"]", "123");
request.AddParameter("[\"Variant\"][\"ean\"]", "ABC");
request.AddParameter("[\"Variant\"][\"order\"]", "1");
request.AddParameter("[\"Variant\"][\"price\"]", "12.00");
request.AddParameter("[\"Variant\"][\"cost_price\"]", "10.00");
request.AddParameter("[\"Variant\"][\"stock\"]", "200");
request.AddParameter("[\"Variant\"][\"minimum_stock\"]", "10");
request.AddParameter("[\"Variant\"][\"reference\"]", "THR016");
request.AddParameter("[\"Variant\"][\"weight\"]", "21");
request.AddParameter("[\"Variant\"][\"length\"]", "21");
request.AddParameter("[\"Variant\"][\"width\"]", "21");
request.AddParameter("[\"Variant\"][\"height\"]", "21");
request.AddParameter("[\"Variant\"][\"start_promotion\"]", "2021-01-01");
request.AddParameter("[\"Variant\"][\"end_promotion\"]", "2021-02-01");
request.AddParameter("[\"Variant\"][\"promotional_price\"]", "10.00");
request.AddParameter("[\"Variant\"][\"promotional_price\"]", "10.00");
request.AddParameter("[\"Variant\"][\"promotional_price\"]", "10.00");
request.AddParameter("[\"Variant\"][\"Sku\"][0][\"type\"]", "Cor");
request.AddParameter("[\"Variant\"][\"Sku\"][0][\"value\"]", "Azul");
request.AddParameter("[\"Variant\"][\"Sku\"][1][\"type\"]", "Tamanho");
request.AddParameter("[\"Variant\"][\"Sku\"][1][\"value\"]", "38");
request.AddParameter("[\"Variant\"][\"quantity_sold\"]", "10");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "[\"Variant\"][\"product_id\"]=123&[\"Variant\"][\"ean\"]=ABC&[\"Variant\"][\"order\"]=1&[\"Variant\"][\"price\"]=12.00&[\"Variant\"][\"cost_price\"]=10.00&[\"Variant\"][\"stock\"]=200&[\"Variant\"][\"minimum_stock\"]=10&[\"Variant\"][\"reference\"]=THR016&[\"Variant\"][\"weight\"]=21&[\"Variant\"][\"length\"]=21&[\"Variant\"][\"width\"]=21&[\"Variant\"][\"height\"]=21&[\"Variant\"][\"start_promotion\"]=2021-01-01&[\"Variant\"][\"end_promotion\"]=2021-02-01&[\"Variant\"][\"promotional_price\"]=10.00&[\"Variant\"][\"promotional_price\"]=10.00&[\"Variant\"][\"promotional_price\"]=10.00&[\"Variant\"][\"Sku\"][0][\"type\"]=Cor&[\"Variant\"][\"Sku\"][0][\"value\"]=Azul&[\"Variant\"][\"Sku\"][1][\"type\"]=Tamanho&[\"Variant\"][\"Sku\"][1][\"value\"]=38&[\"Variant\"][\"quantity_sold\"]=10");
Request request = new Request.Builder()
  .url("https://{api_address}/products/variants/?access_token={{access_token}}")
  .method("POST", body)
  .build();
Response response = client.newCall(request).execute();

Estrutura do Json:

{
    "Variant": {
        "product_id": "18",
        "ean": "125",
        "order": "1",
        "price": "12.50",
        "cost_price": "10.00",
        "stock": "51",
        "minimum_stock": "1",
        "reference": "THR016-2",
        "weight": "21",
        "length": "21",
        "width": "21",
        "height": "21",
        "start_promotion": "2019-01-01",
        "end_promotion": "2019-01-10",
        "promotional_price": "10.00",
        "type_1": "Cor",
        "value_1": "Preta"
        "type_2": "Tamanho",
        "value_2": "40"
        "quantity_sold": "10",
        "picture_source_1": "http://urldaimagem.com.br/img/imagem1.jpg",
        "picture_source_2": "http://urldaimagem.com.br/img/imagem2.jpg",
        "picture_source_3": "http://urldaimagem.com.br/img/imagem3.jpg",
        "picture_source_4": "http://urldaimagem.com.br/img/imagem4.jpg",
        "picture_source_5": "http://urldaimagem.com.br/img/imagem5.jpg",
        "picture_source_6": "http://urldaimagem.com.br/img/imagem6.jpg"
    }
}

Método POST

https://{api_address}/products/variants/?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
Variant JSON Dados da variação
product_id Number Código do produto principal
ean String EAN da variação
order Number Ordem da visualização da variação
price Decimal Preço da variação
cost_price Decimal Preço de custo da variação
stock Number Estoque da variação
minimum_stock Number Estoque mínimo da variação
reference String Referência da variação
weight Number Peso da variação
length Number Comprimento da variação
width Number Largura da variação
height Number Altura da variação
start_promotion Date Data de início da promoção da variação (Formato: aaaa-mm-dd)
end_promotion Date Data de termino da promoção da variação (Formato: aaaa-mm-dd)
promotional_price Decimal Preço promocional da variação
type String Tipo de sku da variação
value String Valor de sku da variação
picture_source_1 String Imagem principal do produto (URL da imagem) (Obrigatório enviar o product_id)
picture_source_2 String Imagem do produto - imagem 2 (URL da imagem) (Obrigatório enviar o product_id)
picture_source_3 String Imagem do produto - imagem 3 (URL da imagem) (Obrigatório enviar o product_id)
picture_source_4 String Imagem do produto - imagem 4 (URL da imagem) (Obrigatório enviar o product_id)
picture_source_5 String Imagem do produto - imagem 5 (URL da imagem) (Obrigatório enviar o product_id)
picture_source_6 String Imagem do produto - imagem 6 (URL da imagem) (Obrigatório enviar o product_id)
quantity_sold Number Quantidade vendida da variação

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Created",
    "id": "123",
    "code": 201
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código da variação
code Number Código do retorno (201)

Atualizar Dados da Variação#put

Requisição para alterar os dados da variação. Deverá enviar o JSON com os dados da variação para alteração.

Código de Exemplo:

curl --location -g --request PUT 'https://{api_address}/products/variants/?access_token={{access_token}}' \
--data-urlencode '["Variant"]["product_id"]=123' \
--data-urlencode '["Variant"]["ean"]=ABC' \
--data-urlencode '["Variant"]["order"]=1' \
--data-urlencode '["Variant"]["price"]=12.00' \
--data-urlencode '["Variant"]["cost_price"]=10.00' \
--data-urlencode '["Variant"]["stock"]=200' \
--data-urlencode '["Variant"]["minimum_stock"]=10' \
--data-urlencode '["Variant"]["reference"]=THR016' \
--data-urlencode '["Variant"]["weight"]=21' \
--data-urlencode '["Variant"]["length"]=21' \
--data-urlencode '["Variant"]["width"]=21' \
--data-urlencode '["Variant"]["height"]=21' \
--data-urlencode '["Variant"]["start_promotion"]=2021-01-01' \
--data-urlencode '["Variant"]["end_promotion"]=2021-02-01' \
--data-urlencode '["Variant"]["promotional_price"]=10.00' \
--data-urlencode '["Variant"]["promotional_price"]=10.00' \
--data-urlencode '["Variant"]["promotional_price"]=10.00' \
--data-urlencode '["Variant"]["Sku"][0]["type"]=Cor' \
--data-urlencode '["Variant"]["Sku"][0]["value"]=Azul' \
--data-urlencode '["Variant"]["Sku"][1]["type"]=Tamanho' \
--data-urlencode '["Variant"]["Sku"][1]["value"]=38' \
--data-urlencode '["Variant"]["quantity_sold"]=10'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/products/variants/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_PUT);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->addPostParameter(array(
  '["Variant"]["product_id"]' => '123',
  '["Variant"]["ean"]' => 'ABC',
  '["Variant"]["order"]' => '1',
  '["Variant"]["price"]' => '12.00',
  '["Variant"]["cost_price"]' => '10.00',
  '["Variant"]["stock"]' => '200',
  '["Variant"]["minimum_stock"]' => '10',
  '["Variant"]["reference"]' => 'THR016',
  '["Variant"]["weight"]' => '21',
  '["Variant"]["length"]' => '21',
  '["Variant"]["width"]' => '21',
  '["Variant"]["height"]' => '21',
  '["Variant"]["start_promotion"]' => '2021-01-01',
  '["Variant"]["end_promotion"]' => '2021-02-01',
  '["Variant"]["promotional_price"]' => '10.00',
  '["Variant"]["promotional_price"]' => '10.00',
  '["Variant"]["promotional_price"]' => '10.00',
  '["Variant"]["Sku"][0]["type"]' => 'Cor',
  '["Variant"]["Sku"][0]["value"]' => 'Azul',
  '["Variant"]["Sku"][1]["type"]' => 'Tamanho',
  '["Variant"]["Sku"][1]["value"]' => '38',
  '["Variant"]["quantity_sold"]' => '10'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/products/variants/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.PUT);
request.AddParameter("[\"Variant\"][\"product_id\"]", "123");
request.AddParameter("[\"Variant\"][\"ean\"]", "ABC");
request.AddParameter("[\"Variant\"][\"order\"]", "1");
request.AddParameter("[\"Variant\"][\"price\"]", "12.00");
request.AddParameter("[\"Variant\"][\"cost_price\"]", "10.00");
request.AddParameter("[\"Variant\"][\"stock\"]", "200");
request.AddParameter("[\"Variant\"][\"minimum_stock\"]", "10");
request.AddParameter("[\"Variant\"][\"reference\"]", "THR016");
request.AddParameter("[\"Variant\"][\"weight\"]", "21");
request.AddParameter("[\"Variant\"][\"length\"]", "21");
request.AddParameter("[\"Variant\"][\"width\"]", "21");
request.AddParameter("[\"Variant\"][\"height\"]", "21");
request.AddParameter("[\"Variant\"][\"start_promotion\"]", "2021-01-01");
request.AddParameter("[\"Variant\"][\"end_promotion\"]", "2021-02-01");
request.AddParameter("[\"Variant\"][\"promotional_price\"]", "10.00");
request.AddParameter("[\"Variant\"][\"promotional_price\"]", "10.00");
request.AddParameter("[\"Variant\"][\"promotional_price\"]", "10.00");
request.AddParameter("[\"Variant\"][\"Sku\"][0][\"type\"]", "Cor");
request.AddParameter("[\"Variant\"][\"Sku\"][0][\"value\"]", "Azul");
request.AddParameter("[\"Variant\"][\"Sku\"][1][\"type\"]", "Tamanho");
request.AddParameter("[\"Variant\"][\"Sku\"][1][\"value\"]", "38");
request.AddParameter("[\"Variant\"][\"quantity_sold\"]", "10");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "[\"Variant\"][\"product_id\"]=123&[\"Variant\"][\"ean\"]=ABC&[\"Variant\"][\"order\"]=1&[\"Variant\"][\"price\"]=12.00&[\"Variant\"][\"cost_price\"]=10.00&[\"Variant\"][\"stock\"]=200&[\"Variant\"][\"minimum_stock\"]=10&[\"Variant\"][\"reference\"]=THR016&[\"Variant\"][\"weight\"]=21&[\"Variant\"][\"length\"]=21&[\"Variant\"][\"width\"]=21&[\"Variant\"][\"height\"]=21&[\"Variant\"][\"start_promotion\"]=2021-01-01&[\"Variant\"][\"end_promotion\"]=2021-02-01&[\"Variant\"][\"promotional_price\"]=10.00&[\"Variant\"][\"promotional_price\"]=10.00&[\"Variant\"][\"promotional_price\"]=10.00&[\"Variant\"][\"Sku\"][0][\"type\"]=Cor&[\"Variant\"][\"Sku\"][0][\"value\"]=Azul&[\"Variant\"][\"Sku\"][1][\"type\"]=Tamanho&[\"Variant\"][\"Sku\"][1][\"value\"]=38&[\"Variant\"][\"quantity_sold\"]=10");
Request request = new Request.Builder()
  .url("https://{api_address}/products/variants/?access_token={{access_token}}")
  .method("PUT", body)
  .build();
Response response = client.newCall(request).execute();

Estrutura do Json:

{
    "Variant": {
        "ean": "123",
        "order": "2",
        "price": "12.50",
        "cost_price": "10.00",
        "stock": "51",
        "minimum_stock": "1",
        "reference": "THR016-1",
        "weight": "21",
        "length": "21",
        "width": "21",
        "height": "21",
        "start_promotion": "2019-01-01",
        "end_promotion": "2019-01-10",
        "promotional_price": "10.00",
        "Sku": [
            {
                "type": "Cor",
                "value": "Azul"
            },
            {
                "type": "Tamanho",
                "value": "38"
            }
        ],
        "quantity_sold": "10",
        "picture_source_1": "http://urldaimagem.com.br/img/imagem1.jpg",
        "picture_source_2": "http://urldaimagem.com.br/img/imagem2.jpg",
        "picture_source_3": "http://urldaimagem.com.br/img/imagem3.jpg",
        "picture_source_4": "http://urldaimagem.com.br/img/imagem4.jpg",
        "picture_source_5": "http://urldaimagem.com.br/img/imagem5.jpg",
        "picture_source_6": "http://urldaimagem.com.br/img/imagem6.jpg"
    }
}

Método PUT

https://{api_address}/products/variants/?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código da variação
Variant JSON Dados da variação
ean String EAN da variação
order Number Ordem da visualização da variação
price Decimal Preço da variação
cost_price Decimal Preço de custo da variação
stock Number Estoque da variação
minimum_stock Number Estoque mínimo da variação
reference String Referência da variação
weight Number Peso da variação
length Number Comprimento da variação
width Number Largura da variação
height Number Altura da variação
start_promotion Date Data de início da promoção da variação (Formato: aaaa-mm-dd)
end_promotion Date Data de termino da promoção da variação (Formato: aaaa-mm-dd)
promotional_price Decimal Preço promocional da variação
Sku Object[ ] Sku da variação
type String Tipo de sku da variação
value String Valor de sku da variação
picture_source_1 String Imagem principal do produto (URL da imagem) (Obrigatório enviar o product_id)
picture_source_2 String Imagem do produto - imagem 2 (URL da imagem) (Obrigatório enviar o product_id)
picture_source_3 String Imagem do produto - imagem 3 (URL da imagem) (Obrigatório enviar o product_id)
picture_source_4 String Imagem do produto - imagem 4 (URL da imagem) (Obrigatório enviar o product_id)
picture_source_5 String Imagem do produto - imagem 5 (URL da imagem) (Obrigatório enviar o product_id)
picture_source_6 String Imagem do produto - imagem 6 (URL da imagem) (Obrigatório enviar o product_id)
quantity_sold Number Quantidade vendida da variação

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Saved",
    "id": "123",
    "code": 200
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código da variação
code Number Código do retorno (200)

Excluir Variação#delete

Requisição para excluir uma variação do produto.

Código de Exemplo:

curl --location -g --request DELETE 'https://{api_address}/products/variants/:id?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/products/variants/:id?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_DELETE);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/products/variants/:id?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.DELETE);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
  .url("https://{api_address}/products/variants/:id?access_token={{access_token}}")
  .method("DELETE", body)
  .build();
Response response = client.newCall(request).execute();

Método DELETE

https://{api_address}/products/variants/:id?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do cliente

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Deleted",
    "id": "123",
    "code": 200
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código da variação
code Number Código do retorno (200)

Tabelas Auxiliares de Produtos

Tabela A - Disponibilidade do produto (campo available)

Valor Descrição
0 Produto indisponível
1 Produto disponível

API de Marca do Produto

Listagem de Marcas#get

Requisição para consultar os dados de diversas marcas.

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/products/brands/?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/products/brands/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/products/brands/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/products/brands/?access_token={{access_token}}")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/products/brands/

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
attrs String Filtro de campos disponíveis na listagem
sort String Ordenação de listagem, ex.: [campo]_[asc/desc]
limit Number Quantidade de registros (max. 50)
page Number Número da página da consulta

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "paging": {
        "total": 1,
        "page": 1,
        "offset": 0,
        "limit": 1,
        "maxLimit": 50
    },
    "sort": [
        {
            "id": "asc"
        }
    ],
    "availableFilters": [
        "id",
        "brand"
    ],
    "appliedFilters": [ ],
    "Brands": [
        {
          "Brand": {
            "id": "1",
            "slug": "marca-teste",
            "brand": "Marca Teste"
          }
        }
    ]
}
Campo Tipo Descrição
paging Object Dados de paginação
total Number Total de registros
page Number Páginas corrente
offset Number Registro inicial da página
limit Number Limite de registros
maxLimit Number Máximo de registros
sort Object Ordenação
availableFilters String Filtros disponíveis
appliedFilters String Filtros utilizados
Brands Object Dados da marcas dos produtos
Brand Object Dados da marca
id Number Código da marca
brand String Nome da marca
slug String Final da URL da marca

Consultar Dados da Marca#get

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/products/brands/:id?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/products/brands/:id?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/products/brands/:id?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/products/brands/:id?access_token={{access_token}}")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/products/brands/:id

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código da marca do produto

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "Brand": {
        "id": "9",
        "slug": "marca-produto",
        "brand": "Marca Produto"
    }
}
Campo Tipo Descrição
Brand Object Dados da marca
id Number Código da marca
slug String Final da URL da marca
brand String Nome da marca

Cadastrar Marca#post

Requisição para inclusão de marca do produto. Deverá enviar o JSON com os dados da marca para a criação.

Código de Exemplo:

curl --location -g --request POST 'https://{api_address}/products/brands/?access_token={{access_token}}' \
--data-urlencode '["Brand"]["slug"]=new-brand' \
--data-urlencode '["Brand"]["brand"]=Nova Marca'
<?php
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/products/brands/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->addPostParameter(array(
  '["Brand"]["slug"]' => 'new-brand',
  '["Brand"]["brand"]' => 'Nova Marca'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/products/brands/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddParameter("[\"Brand\"][\"slug\"]", "new-brand");
request.AddParameter("[\"Brand\"][\"brand\"]", "Nova Marca");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "[\"Brand\"][\"slug\"]=new-brand&[\"Brand\"][\"brand\"]=Nova Marca");
Request request = new Request.Builder()
  .url("https://{api_address}/products/brands/?access_token={{access_token}}")
  .method("POST", body)
  .build();
Response response = client.newCall(request).execute();

Método POST

https://{api_address}/products/brands/

Parâmetros enviados:

Json:

{
    "Brand": {
        "slug": "new-brand",
        "brand": "Nova Marca"
    }
}
Campo Tipo Descrição
access_token String Chave de acesso
Brand JSON Dados da marca
brand String Nome da marca
slug String Final da URL da marca

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Created",
    "id": "123",
    "code": 201
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código da marca
code Number Código do retorno (201)

Atualizar Dados da Marca#put

Requisição para alterar os dados da marca. Deverá enviar o JSON com os dados da marca para alteração.

Código de Exemplo:

curl --location -g --request PUT 'https://{api_address}/products/brands/:id?access_token={{access_token}}' \
--data-urlencode '["Brand"]["slug"]=new-brand' \
--data-urlencode '["Brand"]["brand"]=Nova Marca'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/products/brands/:id?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_PUT);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->addPostParameter(array(
  '["Brand"]["slug"]' => 'new-brand',
  '["Brand"]["brand"]' => 'Nova Marca'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/products/brands/:id?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.PUT);
request.AddParameter("[\"Brand\"][\"slug\"]", "new-brand");
request.AddParameter("[\"Brand\"][\"brand\"]", "Nova Marca");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "[\"Brand\"][\"slug\"]=new-brand&[\"Brand\"][\"brand\"]=Nova Marca");
Request request = new Request.Builder()
  .url("https://{api_address}/products/brands/:id?access_token={{access_token}}")
  .method("PUT", body)
  .build();
Response response = client.newCall(request).execute();

Método PUT

https://{api_address}/products/brands/:id

Parâmetros enviados:

Json:

{
    "Brand": {
        "slug": "new-brand",
        "brand": "Nova Marca"
    }
}
Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código da marca
Brand JSON Dados da marca
brand String Nome da marca
slug String Final da URL da marca

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Saved",
    "id": "123",
    "code": 200
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código da marca
code Number Código do retorno (200)

Excluir Marca#delete

Requisição para excluir uma marca do produto.

Código de Exemplo:

curl --location -g --request DELETE 'https://{api_address}/products/brands/:id?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/products/brands/:id?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_DELETE);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/products/brands/:id?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.DELETE);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
  .url("https://{api_address}/products/brands/:id?access_token={{access_token}}")
  .method("DELETE", body)
  .build();
Response response = client.newCall(request).execute();

Método DELETE

https://{api_address}/products/brands/:id

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código da marca

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Deleted",
    "id": "123",
    "code": 200
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código da marca
code Number Código do retorno (200)

API de Kit

Atualizar Dados do Kit#put

Atualmente o vínculo de produtos ao kit não tem PUT, apenas POST. Dessa forma caso deseje alterar os dados do kit, será necessário efetuar a exclusão e posteriormente realizar um novo POST.

Listagem Geral de Kits#get

Requisição para a consultar dados do kit.

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/products/kits/?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/products/kits/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/products/kits/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/products/kits/?access_token={{access_token}}")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/products/kits/?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "paging": {
        "total": 2,
        "page": 1,
        "offset": 0,
        "limit": 30,
        "maxLimit": 50
    },
    "sort": [
        {
            "id": "asc"
        }
    ],
    "availableFilters": [
        "product_parent_id",
        "product_id"
    ],
    "appliedFilters": [],
    "ProductKits": [
        {
            "ProductKit": {
                "id": "1",
                "product_parent_id": "7035",
                "product_id": "7037",
                "quantity": "1",
                "price": "98.05",
                "price_rule": "1",
                "discount_type": "$",
                "discount_value": "1.95",
                "brand": "",
                "warranty": "",
                "availability_days": "0",
                "ProductVariantKit": []
            }
        },
        {
            "ProductKit": {
                "id": "3",
                "product_parent_id": "7035",
                "product_id": "7037",
                "quantity": "1",
                "price": "98.05",
                "price_rule": "1",
                "discount_type": "$",
                "discount_value": "1.95",
                "brand": "",
                "warranty": "",
                "availability_days": "0",
                "ProductVariantKit": []
            }
        }
    ]
}
Campo Tipo Descrição
ProductKit JSON Dados do kit
id String id do kit
product_parent_id String Será o id do produto principal, que irá compor o kit
product_id String Será o id do produto que irá compor o kit
quantity String Quantidade
price String Valor do kit
price_rule String Valor do produto
discount_type String Valor do desconto em reais ou percentual
discount_value String Valor de desconto do kit
brand String Marca
warranty String Dados da garantia do kit
availability_days Number Disponbilidade em dias do kit
ProductVariantKit String Variação do kit

Consultar Dados do Kit#get

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/products/kits/?access_token={{access_token}}&product_parent_id=:id'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/products/kits/?access_token={{access_token}}&product_parent_id=:id');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/products/kits/?access_token={{access_token}}&product_parent_id=:id");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/products/kits/?access_token={{access_token}}&product_parent_id=:id")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/products/kits/?access_token={token}&product_parent_id=:id

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
product_parent_id String id

Retorno em caso de sucesso (status code 200 ou 201)

{
    "paging": {
        "total": 1,
        "page": 1,
        "offset": 0,
        "limit": 30,
        "maxLimit": 50
    },
    "sort": [
        {
            "id": "asc"
        }
    ],
    "availableFilters": [
        "product_parent_id",
        "product_id"
    ],
    "appliedFilters": {
        "ProductKit.product_parent_id": "7069"
    },
    "ProductKits": [
        {
            "ProductKit": {
                "id": "9",
                "product_parent_id": "7069",
                "product_id": "44",
                "quantity": "1",
                "price": "218.05",
                "price_rule": "1",
                "discount_type": "$",
                "discount_value": "1.95",
                "brand": "",
                "warranty": "",
                "availability_days": "0",
                "ProductVariantKit": []
            }
        }
    ]
}

Cadastrar Kit#post

Requisição para inclusão de um kit. Deverá enviar o JSON com os dados do kit para a criação.

Primeiramente, para trabalhar com kit, é necessário que esse recurso esteja habilitado na loja, caso contrário será necessário entrar em contato diretamente com a equipe de atendimento para efetuar a liberação.

Inicialmente será necessário criar um produto utilizando a mesma estrutura da API de Produtos, no entanto, no json você deverá vincular o campo is_kit=1

Código de Exemplo:

curl --location -g --request POST 'https://{api_address}/products/?access_token={{access_token}}' \
--data-urlencode '["Product"]["is_kit"]=1' \
--data-urlencode '["Product"]["name"]=Produto Kit Teste API' \
--data-urlencode '["Product"]["description"]=Descrição do Produto de Teste da API' \
--data-urlencode '["Product"]["description_small"]=Produto de Teste da API' \
--data-urlencode '["Product"]["price"]=3' \
--data-urlencode '["Product"]["stock"]=3' \
--data-urlencode '["Product"]["category_id"]=3' \
--data-urlencode '["Product"]["available"]=1' \
--data-urlencode '["Product"]["reference"]=111' \
--data-urlencode '["Product"]["related_categories"]=[]' \
--data-urlencode '["Product"]["release_date"]=' \
--data-urlencode '["Product"]["picture_source_1"]=http://bancodeimagens/imagem1.jpg'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/products/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->addPostParameter(array(
  '["Product"]["is_kit"]' => '1',
  '["Product"]["name"]' => 'Produto Kit Teste API',
  '["Product"]["description"]' => 'Descrição do Produto de Teste da API',
  '["Product"]["description_small"]' => 'Produto de Teste da API',
  '["Product"]["price"]' => '3',
  '["Product"]["stock"]' => '3',
  '["Product"]["category_id"]' => '3',
  '["Product"]["available"]' => '1',
  '["Product"]["reference"]' => '111',
  '["Product"]["related_categories"]' => '[]',
  '["Product"]["release_date"]' => '',
  '["Product"]["picture_source_1"]' => 'http://bancodeimagens/imagem1.jpg'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/products/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddParameter("[\"Product\"][\"is_kit\"]", "1");
request.AddParameter("[\"Product\"][\"name\"]", "Produto Kit Teste API");
request.AddParameter("[\"Product\"][\"description\"]", "Descrição do Produto de Teste da API");
request.AddParameter("[\"Product\"][\"description_small\"]", "Produto de Teste da API");
request.AddParameter("[\"Product\"][\"price\"]", "3");
request.AddParameter("[\"Product\"][\"stock\"]", "3");
request.AddParameter("[\"Product\"][\"category_id\"]", "3");
request.AddParameter("[\"Product\"][\"available\"]", "1");
request.AddParameter("[\"Product\"][\"reference\"]", "111");
request.AddParameter("[\"Product\"][\"related_categories\"]", "[]");
request.AddParameter("[\"Product\"][\"release_date\"]", "");
request.AddParameter("[\"Product\"][\"picture_source_1\"]", "http://bancodeimagens/imagem1.jpg");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "[\"Product\"][\"is_kit\"]=1&[\"Product\"][\"name\"]=Produto Kit Teste API&[\"Product\"][\"description\"]=Descrição do Produto de Teste da API&[\"Product\"][\"description_small\"]=Produto de Teste da API&[\"Product\"][\"price\"]=3&[\"Product\"][\"stock\"]=3&[\"Product\"][\"category_id\"]=3&[\"Product\"][\"available\"]=1&[\"Product\"][\"reference\"]=111&[\"Product\"][\"related_categories\"]=[]&[\"Product\"][\"release_date\"]=&[\"Product\"][\"picture_source_1\"]=http://bancodeimagens/imagem1.jpg");
Request request = new Request.Builder()
  .url("https://{api_address}/products/?access_token={{access_token}}")
  .method("POST", body)
  .build();
Response response = client.newCall(request).execute();

Método POST

https://{api_address}/products/?access_token={{access_token}}

Para efetuar a criação do kit via API, é necessário que os produtos já existam na loja, para então criar o kit, na criação do produto tipo kit, deverá ser vinculado o is_kit = 1 no produto considerado como o principal na formação do kit, o que irá acompanhar os demais id de produtos para compor o kit. E deverá ser informado is_kit = 0 para os produtos que servirão como parte do kit, porém não será a peça principal.

1 - Criar o produto através do método POST, utilizando a API de Cadastrar Produto

Parâmetros enviados:

Estrutura de Json:

{
    "Product":{
        "is_kit": 1,
        "name":"Produto Kit Teste API",
        "description":"Descrição do Produto de Teste da API",
        "description_small":"Produto de Teste da API",
       "price": 10.00,
       "stock": 3,
        "category_id":"3",
        "available":1,
        "reference":"111",
        "related_categories":[],
        "release_date":"",
        "picture_source_1":"http://bancodeimagens/imagem1.jpg",
        "picture_source_2":"http://bancodeimagens/imagem2.jpg",
        "picture_source_3":"http://bancodeimagens/imagem3.jpg"
    }
}
Campo Tipo Descrição
access_token String Chave de acesso
Product JSON Dados do produto
is_kit Number Produto possui kit (Veja Tabela A)
name String (200) Nome do produto
description String (4800) Descrição do produto
description_small String (500) Descrição resumida do produto
price Number Descrição resumida do produto
stock String Descrição resumida do produto
category_id Number Código da categoria principal do produto
available Number Produto disponível (Veja Tabela B)
reference String (120) Referência do produto
related_categories Number Categorias adicionais do produto (separados por vírgula)
release_date Date Data de lançamento do produto (Formato: aaaa-mm-dd)
picture_source_1 String Imagem principal do produto (Informar a URL para cadastro)
picture_source_2 String Imagem do produto - imagem 2 (Informar a URL para cadastro)
picture_source_3 String Imagem do produto - imagem 3 (Informar a URL para cadastro)
picture_source_4 String Imagem do produto - imagem 4 (Informar a URL para cadastro)
picture_source_5 String Imagem do produto - imagem 5 (Informar a URL para cadastro)
picture_source_6 String Imagem do produto - imagem 6 (Informar a URL para cadastro)

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Created",
    "id": "7035",
    "code": 201
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código do cliente
code Number Código do retorno (201)

2 - Criar o kit (vínculo do produto is_kit com os produtos que compõe o kit), por meio do método POST.

Método POST

https://{api_address}/products/kits/?access_token={token}

Parâmetros enviados:

Estrutura do Json:

{
    [  
        {  
            "product_parent_id":"799",
            "product_id":"6",
            "quantity":"1",
            "price_rule":"1",
            "discount_type":"$",
            "discount_value":1.95
        },
        {  
            "product_parent_id":"799",
            "product_id":"2",
            "quantity":"1",
            "price_rule":"2",
            "discount_type":"%",
            "discount_value":3
        },
        {  
            "product_parent_id":"799",
            "product_id":"87",
            "quantity":"1",
            "price_rule":"1",
            "discount_type":"%",
            "discount_value":3
        }
    ]
}
Campo Tipo Descrição
access_token String Chave de acesso
product_parent_id String Será o id do produto principal, que irá compor o kit, inclusive o mesmo deverá ter sido cadastrado com is_kit = 1
product_id String Será o id do produto que irá compor o kit, o mesmo deverá ter sido cadastrado com is_kit = 0
quantity String Quantidade do produto para compor o kit
price_rule String Valor do produto (Veja Tabela C)
discount_type String Valor do desconto em reais ou percentual (Veja Tabela D)
discount_value Number Valor do desconto

Dessa forma, se um kit for composto por 3 produtos, o produto pai deverá ser carregado no campo "product_parent_id" e os demais produtos deverá ser informado no campo "product_id", sendo um produto em cada nó.

No caso, na exemplificação abaixo, os produtos de id: 6;2;87 serão componentes para a criação do kit do produto 799.

Lembrando que para a formação do kit, é necessário que o mesmo seja formado por três produtos no total e possua no mínimo dois nós. Em caso de ser um kit formado somente de um id de produto "pai" e um id de produto "filho", o kit deverá ser formado então com uma peça do produto pai e duas peças do produto filho, sendo representados em dois nós distintos, mesmo o produto filho sendo o mesmo em cada nó.

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Created",
    "code": 201
}
Campo Tipo Descrição
message String Mensagem de retorno
code Number Código do retorno (201)

A visualização dos produtos dentro do painel administrativo seguirá da seguinte forma:

Visualização de produto kit "pai" (is_kit = 1) = Será visualizado através do caminho Produtos > Kit de Produtos Visualização de produto que apenas compõe o kit "filho" (is_kit = 0) = Será visualizado através do caminho Produtos > Produtos cadastrados

Tabelas Auxiliares de kits

Tabela A - Kit do produto (campo is_kit)

Valor Descrição
0 Produto não possui kit
1 Produto possui kit

Tabela B - Disponibilidade do produto (campo available)

Valor Descrição
0 Produto indisponível
1 Produto disponível

Tabela C - Valor do produto (campo price_rule)

Valor Descrição
1 Preço igual da loja
2 Preço com desconto

Tabela D - Valor do desconto (campo discount_type)

Valor Descrição
$ Valor do desconto em reais
% Valor do desconto em percentual

API de Informação Adicional (additional_info)

Atualizar as informações adicionais#put

Requisição para atualizar as informações adicionais.

Código de Exemplo:

curl --location -g --request PUT 'https://{api_address}/additional_info/:id?access_token={{access_token}}' \
--data-urlencode '["AdditionalInfo"]["type"]=1' \
--data-urlencode '["AdditionalInfo"]["name"]=Time do coração?' \
--data-urlencode '["AdditionalInfo"]["display_value"]=1' \
--data-urlencode '["AdditionalInfo"]["required"]=1' \
--data-urlencode '["AdditionalInfo"]["add_total"]=1' \
--data-urlencode '["AdditionalInfo"]["max_length"]=12' \
--data-urlencode '["AdditionalInfo"]["value"]=11.90' \
--data-urlencode '["AdditionalInfo"]["active"]=1'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/additional_info/:id?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_PUT);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->addPostParameter(array(
  '["AdditionalInfo"]["type"]' => '1',
  '["AdditionalInfo"]["name"]' => 'Time do coração?',
  '["AdditionalInfo"]["display_value"]' => '1',
  '["AdditionalInfo"]["required"]' => '1',
  '["AdditionalInfo"]["add_total"]' => '1',
  '["AdditionalInfo"]["max_length"]' => '12',
  '["AdditionalInfo"]["value"]' => '11.90',
  '["AdditionalInfo"]["active"]' => '1'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/additional_info/:id?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.PUT);
request.AddParameter("[\"AdditionalInfo\"][\"type\"]", "1");
request.AddParameter("[\"AdditionalInfo\"][\"name\"]", "Time do coração?");
request.AddParameter("[\"AdditionalInfo\"][\"display_value\"]", "1");
request.AddParameter("[\"AdditionalInfo\"][\"required\"]", "1");
request.AddParameter("[\"AdditionalInfo\"][\"add_total\"]", "1");
request.AddParameter("[\"AdditionalInfo\"][\"max_length\"]", "12");
request.AddParameter("[\"AdditionalInfo\"][\"value\"]", "11.90");
request.AddParameter("[\"AdditionalInfo\"][\"active\"]", "1");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "[\"AdditionalInfo\"][\"type\"]=1&[\"AdditionalInfo\"][\"name\"]=Time do coração?&[\"AdditionalInfo\"][\"display_value\"]=1&[\"AdditionalInfo\"][\"required\"]=1&[\"AdditionalInfo\"][\"add_total\"]=1&[\"AdditionalInfo\"][\"max_length\"]=12&[\"AdditionalInfo\"][\"value\"]=11.90&[\"AdditionalInfo\"][\"active\"]=1");
Request request = new Request.Builder()
  .url("https://{api_address}/additional_info/:id?access_token={{access_token}}")
  .method("PUT", body)
  .build();
Response response = client.newCall(request).execute();

Estrutura do Json:

{
    "AdditionalInfo": {
        "type": 1,
        "name": "Time do coração?",
        "display_value": 1,
        "required": 1,
        "add_total": 1,
        "max_length": 12,
        "value": "11.90",
        "active": 1
    }
}

Método PUT

https://{api_address}/additional_info/:id(additional_info)?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
AdditionalInfo JSON Informações adicionais do produto
type String Correspondo a forma como será exibida a informação adicional. Tabela A
name String Nome da informação adicional
display_value Number Se o valor será exibido. Tabela B
required Number Se será obrigatório ou não no momento da compra. Tabela C
add_total Number Se o valor será somado ou não ao produto. Tabela D
max_length Number Corresponde a quantidade de caracter que poderá ser inserido na informação adicional. Exemplo: Camisa de torcedor (possuirá dois dígitos)
value Decimal Valor do produto que estiver setado com a informação adicional
active Number Se a informação adicional estará ativa ou inativa. Tabela E

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Saved",
    "id": "17",
    "code": 201
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código do cliente
code Number Código do retorno (201)

Atualizar as informações adicionais relacionadas ao Produto#put

Código de Exemplo:

curl --location -g --request PUT 'https://{api_address}/products/:id/additional_info/?access_token={{access_token}}' \
--data-raw '{
    "AdditionalInfo": {
        "info_id": 17,
        "inherit_deadline": 1,
        "deadline": 3,
        "order": 1
    }
}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/products/:id/additional_info/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_PUT);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setBody('{\n    "AdditionalInfo": {\n        "info_id": 17,\n        "inherit_deadline": 1,\n        "deadline": 3,\n        "order": 1\n    }\n}');
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/products/:id/additional_info/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.PUT);
request.AddParameter("text/plain", "{\n    \"AdditionalInfo\": {\n        \"info_id\": 17,\n        \"inherit_deadline\": 1,\n        \"deadline\": 3,\n        \"order\": 1\n    }\n}",  ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "{\n    \"AdditionalInfo\": {\n        \"info_id\": 17,\n        \"inherit_deadline\": 1,\n        \"deadline\": 3,\n        \"order\": 1\n    }\n}");
Request request = new Request.Builder()
  .url("https://{api_address}/products/:id/additional_info/?access_token={{access_token}}")
  .method("PUT", body)
  .build();
Response response = client.newCall(request).execute();

Método PUT

https://{api_address}/products/:id(do_produto)/additional_info/?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
:id Number Código do cliente

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Created",
    "code": 201
}
Campo Tipo Descrição
message String Mensagem de retorno
code Number Código do retorno (200)

Tabelas Auxiliares de Informações Adicionais (additional_info)

Tabela A - Correspondo a forma como será exibida a informação adicional (campo type)

Valor Descrição
0 Linha de texto (input text)
1 Caixa de seleção (select)
2 Caixa de Texto (textarea)

Tabela B - Se o valor será exibido (campo display_value)

Valor Descrição
0 não exibir valor
1 exibir valor

Tabela C - Se será obrigatório ou não no momento da compra (campo required)

Valor Descrição
0 não é obrigatório
1 obrigatório

Tabela D - Se o valor será somado ou não ao produto (campo add_total)

Valor Descrição
0 não somar com o valor do preço do produto
1 somar com o total do preço do produto

Tabela E - Se a informação adicional estará ativa ou inativa (campo active)

Valor Descrição
0 inativa
1 ativa

Tabela F - Se herdará o prazo a ser inserido no frete (campo inherit_deadline)

Valor Descrição
0 não herdar prazo
1 herdar prazo

Listagem Geral das Informações Adicionais#get

Requisição para a consultar dados da additional_info.

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/additional_info/?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/additional_info/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/additional_info/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/additional_info/?access_token={{access_token}}")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/additional_info/?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
AdditionalInfo JSON Informações adicionais do produto
Id String Id da AdditionalInfo
type String Corresponde ao tipo de exibição da informação adicional. Tabela A
display_as String Corresponde a forma como será exibida a informação adicional.
name String Nome da informação adicional
display_value Number Se o valor será exibido. Tabela B
required Number Se será obrigatório ou não no momento da compra. Tabela C
add_total Number Se o valor será somado ou não ao produto. Tabela D
max_length Number Corresponde a quantidade de caracter que poderá ser inserido na informação adicional. Exemplo: Camisa de torcedor (possuirá dois dígitos)
value Decimal Valor do produto que estiver setado com a informação adicional
active Number Se a informação adicional estará ativa ou inativa. Tabela E

Retorno de Sucesso:

{
    "paging": {
        "total": 3,
        "page": 1,
        "offset": 0,
        "limit": 30,
        "maxLimit": 50
    },
    "sort": [
        {
            "id": "asc"
        }
    ],
    "availableFilters": [
        "id",
        "type",
        "name",
        "display_value",
        "required",
        "add_total",
        "active",
        "order",
        "display_as",
        "max_length",
        "value",
        "height"
    ],
    "appliedFilters": [],
    "AdditionalInfos": [
        {
            "AdditionalInfo": {
                "id": "5",
                "type": "imput text",
                "name": "Time do coração?",
                "display_value": 0,
                "required": 0,
                "add_total": 0,
                "max_length": 0,
                "value": "1",
                "active": 1
            }
        },
        {
            "AdditionalInfo": {
                "id": "31",
                "type": "textarea",
                "name": "Time do coração?",
                "display_value": 1,
                "required": 1,
                "add_total": 1,
                "max_length": 12,
                "value": 11.9,
                "active": 1,
                "height": 0
            }
        },
        {
            "AdditionalInfo": {
                "id": "33",
                "type": "select",
                "display_as": "select",
                "name": "Time do coração?",
                "display_value": 1,
                "required": 1,
                "add_total": 1,
                "active": 1
            }
        }
    ]
}

Consultar Dados das Informações Adicionais#get

Código de Exemplo:

curl --location -g --request GET 'https://{api_address}/additional_info/:id/?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/additional_info/:id/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/additional_info/:id/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://{api_address}/additional_info/:id/?access_token={{access_token}}")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();

Método GET

https://{api_address}/additional_info/:id(additional_info)/?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
AdditionalInfo JSON Informações adicionais do produto
Id String Id da AdditionalInfo
type String Corresponde ao tipo de exibição da informação adicional. Tabela A
display_as String Corresponde a forma como será exibida a informação adicional.
name String Nome da informação adicional
display_value Number Se o valor será exibido. Tabela B
required Number Se será obrigatório ou não no momento da compra. Tabela C
add_total Number Se o valor será somado ou não ao produto. Tabela D
max_length Number Corresponde a quantidade de caracter que poderá ser inserido na informação adicional. Exemplo: Camisa de torcedor (possuirá dois dígitos)
value Decimal Valor do produto que estiver setado com a informação adicional
active Number Se a informação adicional estará ativa ou inativa. Tabela E

Retorno de Sucesso:

{
    "AdditionalInfo": {
        "id": "33",
        "type": "select",
        "display_as": "select",
        "name": "Time do coração?",
        "display_value": "1",
        "required": "1",
        "add_total": "1",
        "active": "1"
    }
}

Tabelas Auxiliares de Informações Adicionais (additional_info)

Tabela A - Correspondo a forma como será exibida a informação adicional (campo type)

Valor Descrição
0 Linha de texto (input text)
1 Caixa de seleção (select)
2 Caixa de Texto (textarea)

Tabela B - Se o valor será exibido (campo display_value)

Valor Descrição
0 não exibir valor
1 exibir valor

Tabela C - Se será obrigatório ou não no momento da compra (campo required)

Valor Descrição
0 não é obrigatório
1 obrigatório

Tabela D - Se o valor será somado ou não ao produto (campo add_total)

Valor Descrição
0 não somar com o valor do preço do produto
1 somar com o total do preço do produto

Tabela E - Se a informação adicional estará ativa ou inativa (campo active)

Valor Descrição
0 inativa
1 ativa

Cadastrar Informação Adicional#post

Requisição para cadastrar informação adicional. É possível inserir as Informações Adicionais ao Produto, via API.

Para acrescentar informações, além da descrição, sobre os seus produtos, você tem a opção de cadastrar as informações adicionais.

Código de Exemplo:

curl --location -g --request POST 'https://{api_address}/additional_info/?access_token={{access_token}}' \
--data-urlencode '["AdditionalInfo"]["type"]=1' \
--data-urlencode '["AdditionalInfo"]["name"]=Time do coração?' \
--data-urlencode '["AdditionalInfo"]["display_value"]=1' \
--data-urlencode '["AdditionalInfo"]["required"]=1' \
--data-urlencode '["AdditionalInfo"]["add_total"]=1' \
--data-urlencode '["AdditionalInfo"]["max_length"]=12' \
--data-urlencode '["AdditionalInfo"]["value"]=11.90' \
--data-urlencode '["AdditionalInfo"]["active"]=1'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/additional_info/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->addPostParameter(array(
  '["AdditionalInfo"]["type"]' => '1',
  '["AdditionalInfo"]["name"]' => 'Time do coração?',
  '["AdditionalInfo"]["display_value"]' => '1',
  '["AdditionalInfo"]["required"]' => '1',
  '["AdditionalInfo"]["add_total"]' => '1',
  '["AdditionalInfo"]["max_length"]' => '12',
  '["AdditionalInfo"]["value"]' => '11.90',
  '["AdditionalInfo"]["active"]' => '1'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/additional_info/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddParameter("[\"AdditionalInfo\"][\"type\"]", "1");
request.AddParameter("[\"AdditionalInfo\"][\"name\"]", "Time do coração?");
request.AddParameter("[\"AdditionalInfo\"][\"display_value\"]", "1");
request.AddParameter("[\"AdditionalInfo\"][\"required\"]", "1");
request.AddParameter("[\"AdditionalInfo\"][\"add_total\"]", "1");
request.AddParameter("[\"AdditionalInfo\"][\"max_length\"]", "12");
request.AddParameter("[\"AdditionalInfo\"][\"value\"]", "11.90");
request.AddParameter("[\"AdditionalInfo\"][\"active\"]", "1");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "[\"AdditionalInfo\"][\"type\"]=1&[\"AdditionalInfo\"][\"name\"]=Time do coração?&[\"AdditionalInfo\"][\"display_value\"]=1&[\"AdditionalInfo\"][\"required\"]=1&[\"AdditionalInfo\"][\"add_total\"]=1&[\"AdditionalInfo\"][\"max_length\"]=12&[\"AdditionalInfo\"][\"value\"]=11.90&[\"AdditionalInfo\"][\"active\"]=1");
Request request = new Request.Builder()
  .url("https://{api_address}/additional_info/?access_token={{access_token}}")
  .method("POST", body)
  .build();
Response response = client.newCall(request).execute();

Estrutura do Json:

{
    "AdditionalInfo": {
        "type": 0,
        "name": "Time do coração?",
        "display_value": 1,
        "required": 1,
        "add_total": 1,
        "max_length": 12,
        "value": "11.90",
        "active": 1
    }
}

Haverá uma diferença no envio do Json, quando o tipo escolhido for 1 ("type": 1)

{
    "AdditionalInfo": {
        "type": 1,
        "name": "Time do coração?",
        "display_value": 1,
        "required": 1,
        "add_total": 1,
        "max_length": 12,
        "value": "11.90",
        "active": 1,
        "options": [
            {
                "name": "São Paulo",
                "value": "15.00"
            },
            {
                "name": "Vasco",
                "value": "30.00"
            }
        ]
    }
}

Método POST

https://{api_address}/additional_info/?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
AdditionalInfo JSON Informações adicionais do produto
type String Correspondo a forma como será exibida a informação adicional. Tabela A
name String Nome da informação adicional
display_value Number Se o valor será exibido. Tabela B
required Number Se será obrigatório ou não no momento da compra. Tabela C
add_total Number Se o valor será somado ou não ao produto. Tabela D
max_length Number Corresponde a quantidade de caracter que poderá ser inserido na informação adicional. Exemplo: Camisa de torcedor (possuirá dois dígitos)
value Decimal Valor do produto que estiver setado com a informação adicional
active Number Se a informação adicional estará ativa ou inativa. Tabela E

Parâmetros enviados quando "type:" 1:

Campo Tipo Descrição
access_token String Chave de acesso
AdditionalInfo JSON Informações adicionais do produto
type String Correspondo a forma como será exibida a informação adicional. Tabela A
name String Nome da informação adicional
display_value Number Se o valor será exibido. Tabela B
required Number Se será obrigatório ou não no momento da compra. Tabela C
add_total Number Se o valor será somado ou não ao produto. Tabela D
max_length Number Corresponde a quantidade de caracter que poderá ser inserido na informação adicional. Exemplo: Camisa de torcedor (possuirá dois dígitos)
value Decimal Valor do produto que estiver setado com a informação adicional
active Number Se a informação adicional estará ativa ou inativa. Tabela E
options Array Opções do select
name String Nome da opção a ser selecionada
value String Valor da opção a ser selecionada

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Created",
    "id": "17",
    "code": 201
}
Campo Tipo Descrição
message String Mensagem de retorno
id Number Código do AdditionalInfo
code Number Código do retorno (201)

Vincular a informação adicional ao produto, por meio do POST#post

Código de Exemplo:

curl --location -g --request POST 'https://{api_address}/products/:id/additional_info/?access_token={{access_token}}' \
--data-raw '{
    "AdditionalInfo": {
        "info_id": 17,
        "inherit_deadline": 1,
        "deadline": 3,
        "order": 1,
    }
}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/products/:id/additional_info/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setBody('{\n    "AdditionalInfo": {\n        "info_id": 17,\n        "inherit_deadline": 1,\n        "deadline": 3,\n        "order": 1\n    }\n}');
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/products/:id/additional_info/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddParameter("text/plain", "{\n    \"AdditionalInfo\": {\n        \"info_id\": 17,\n        \"inherit_deadline\": 1,\n        \"deadline\": 3,\n        \"order\": 1\n    }\n}",  ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "{\n    \"AdditionalInfo\": {\n        \"info_id\": 17,\n        \"inherit_deadline\": 1,\n        \"deadline\": 3,\n        \"order\": 1\n    }\n}");
Request request = new Request.Builder()
  .url("https://{api_address}/products/:id/additional_info/?access_token={{access_token}}")
  .method("POST", body)
  .build();
Response response = client.newCall(request).execute();

Estrutura do Json:

{
  "AdditionalInfo": {
    "info_id": 17,
    "inherit_deadline": 1,
    "deadline": 3,
    "order": 1,
    "options_ids": [
      11,
      15
    ]
  }
}

Método POST

https://{api_address}/products/:id(do_produto)/additional_info/?access_token={{access_token}}

Parâmetros enviados:

Campo Tipo Descrição
access_token String Chave de acesso
AdditionalInfo String Informações adicionais do produto
info_id String id da informação adicional gerada
inherit_deadline Number Se herdará o prazo a ser inserido no frete. Tabela F
deadline Number prazo que será adicionado ao frete, caso seja necessário para preparação da personalização do produto
order Number Ordem de exibição da informação adicional na loja virtual

Retorno em caso de sucesso (status code 200 ou 201)

Retorno de Sucesso:

{
    "message": "Created",
    "code": 201
}
Campo Tipo Descrição
message String Mensagem de retorno
code Number Código do retorno (201)

Tabelas Auxiliares de Informações Adicionais (additional_info)

Tabela A - Correspondo a forma como será exibida a informação adicional (campo type)

Valor Descrição
0 Linha de texto (input text)
1 Caixa de seleção (select)
2 Caixa de Texto (textarea)

Tabela B - Se o valor será exibido (campo display_value)

Valor Descrição
0 não exibir valor
1 exibir valor

Tabela C - Se será obrigatório ou não no momento da compra (campo required)

Valor Descrição
0 não é obrigatório
1 obrigatório

Tabela D - Se o valor será somado ou não ao produto (campo add_total)

Valor Descrição
0 não somar com o valor do preço do produto
1 somar com o total do preço do produto

Tabela E - Se a informação adicional estará ativa ou inativa (campo active)

Valor Descrição
0 inativa
1 ativa

Tabela F - Se herdará o prazo a ser inserido no frete (campo inherit_deadline)

Valor Descrição
0 não herdar prazo
1 herdar prazo

Excluir Informação Adicional Relacionada ao Produto#delete

Requisição para excluir uma informação adicional.

Código de Exemplo:

curl --location -g --request DELETE 'https://{api_address}/products/:id/additional_info/:id/?access_token={{access_token}}'
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://{api_address}/products/:id/additional_info/:id/?access_token={{access_token}}');
$request->setMethod(HTTP_Request2::METHOD_DELETE);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
var client = new RestClient("https://{api_address}/products/:id/additional_info/:id/?access_token={{access_token}}");
client.Timeout = -1;
var request = new RestRequest(Method.DELETE);
IRestResponse response = client.Execute(request);
Console.WriteLin