NAV
shell javascript php java

Introdução

A API Yever foi cuidadosamente projetada seguindo os princípios e melhores práticas do padrão REST. Esta API permite a integração com diversas aplicações, independentemente da linguagem de programação utilizada, graças à sua abordagem simples e clara na manipulação de requisições e respostas.

As operações disponíveis são realizadas através de requisições aos endpoints correspondentes, utilizando os verbos HTTP apropriados e corpos de mensagem formatados em JSON. As respostas podem ser analisadas com base nos códigos de status HTTP fornecidos.

É importante ressaltar que não dispomos de um ambiente de homologação, uma vez que todos os endpoints utilizam o método GET. A URL base para todas as requisições é: https://api.yever.com.br/api/v1. A partir desta URL base, é possível acessar o endpoint desejado, como no exemplo a seguir: https://api.yever.com.br/api/v1/order/list, que consulta a lista de pedidos.

Esta documentação oferece informações detalhadas sobre como consultar dados via API e realizar integrações através de Webhooks. Ao longo da documentação, você encontrará descrições detalhadas dos endpoints disponíveis, bem como exemplos de requisições e respostas, para auxiliar no desenvolvimento de sua aplicação.

Autenticação

Exemplo para a rota de pedidos

curl 'https://api.yever.com.br/api/v1/order/list' \
  --header 'Authorization: Bearer 999|xxxxxxxxxxxxxx'
const options = {
  method: "GET",
  headers: {
    Accept: "application/json",
    Authorization: "Bearer 999|xxxxxxxxxxxxxx",
  },
};

fetch("https://api.yever.com.br/api/v1/order/list", options)
  .then((response) => response.json())
  .then((response) => console.log(response));
<?php

$client = new \GuzzleHttp\Client();

$response = $client->request(
  'GET',
  'https://api.yever.com.br/api/v1/order/list',
  [
    'headers' => [
      'Accept' => 'application/json',
      'Authorization' => 'Bearer 999|xxxxxxxxxxxxxx',
    ],
  ],
);

$data = $response->getBody()->getContents();
OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.yever.com.br/api/v1/order/list")
  .get()
  .addHeader("Accept", "application/json")
  .addHeader("Authorization", "Bearer 999|xxxxxxxxxxxxxx")
  .build();

Response response = client.newCall(request).execute();

Lembre-se de substituir 999|xxxxxxxxxxxxxx pelo token fornecido na Yever.

Todas as chamadas devem conter o seguinte Header: Authorization: Bearer 999|xxxxxxxxxxxxxx. O token deve ser gerado dentro do sistema Yever, no seguinte caminho: Configuração > API > Novo token. O formato do token será [0-9]+|[a-zA-z0-9]+, ou seja, um número, pipe (|) e uma string aleatória. O token só será exibido no momento da criação, não sendo possível visualizá-lo novamente.

Filtros e paginação

{
  "orders": [
    {},
    {},
    ...
  ],
  "paginate": {
    "current": 1,
    "last": 5,
    "total": 430,
    "per_page": 100
  }
}

Todos os filtros sempre serão via query parameters. Exemplo: https://api.yever.com.br/api/v1/order/list?created_at_inicial=2022-11-01&created_at_final=2022-12-10&payment_method=credit_card&per_page=50&page=5. Os filtros permitidos serão informados em cada endpoint. Se forem enviados outros filtros além dos permitidos na requisição a API apenas irá ignorá-los. Se existir algum filtro com valor incorreto, será retornado o status 422 e a mensagem de erro. Exemplo: payment_method precisa ser pix, billet ou credit_card.

O objeto paginate sempre estará presente em todas as respostas, independente dela ter apenas 1 registro. Ele sempre vem após os dados, no final da resposta.

O parâmetro per_page tem limite de 500, enquanto o page tem limite de 100. Ou seja, é possível obter até 50.000 registros por filtro. Caso necessite de mais registros, utilize os filtros por data e faça a quantidade de consultas necessárias. No exemplo a direita, você precisa fazer 5 consultas para pegar todos os dados (page=1,page=2,page=3,page=4,page=5). Se o parâmetro page não estiver presente, o valor 1 será considerado. Se o parâmetro per_page não estiver presente, o valor 100 será considerado.

Api

Pedidos

GET: https://api.yever.com.br/api/v1/order/list

curl 'https://api.yever.com.br/api/v1/order/list?created_at_inicial=2022-11-01&created_at_final=2023-01-01&per_page=200&page=1' \
  --header 'Authorization: Bearer 999|xxxxxxxxxxxxxx'
const options = {
  method: "GET",
  headers: {
    Accept: "application/json",
    Authorization: "Bearer 999|xxxxxxxxxxxxxx",
  },
};

fetch(
  "https://api.yever.com.br/api/v1/order/list?created_at_inicial=2022-11-01&created_at_final=2023-01-01&per_page=200&page=1",
  options
)
  .then((response) => response.json())
  .then((response) => console.log(response));
<?php

$client = new \GuzzleHttp\Client();

$response = $client->request(
  'GET',
  'https://api.yever.com.br/api/v1/order/list?created_at_inicial=2022-11-01&created_at_final=2023-01-01&per_page=200&page=1',
  [
    'headers' => [
      'Accept' => 'application/json',
      'Authorization' => 'Bearer 999|xxxxxxxxxxxxxx',
    ],
  ],
);

$data = $response->getBody()->getContents();
OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.yever.com.br/api/v1/order/list?created_at_inicial=2022-11-01&created_at_final=2023-01-01&per_page=200&page=1")
  .get()
  .addHeader("Accept", "application/json")
  .addHeader("Authorization", "Bearer 999|xxxxxxxxxxxxxx")
  .build();

Response response = client.newCall(request).execute();

A resposta da requisição acima será um json no seguinte formato

{
  "orders": [
    {
      "reference": "1234567890", // [0-9]{10}
      "customer": {
        "name": "Nome do cliente",
        "email": "email@email.com",
        "phone": "+5511999991111", // sempre 14 dígitos, +55 (código do brasil), 2 números do ddd e 9 do celular
        "type": "F", // F -> Pessoa Física, J -> Pessoa Jurídica
        "document": "92220244008" // \d{11}(\d{3})? - 11 ou 14 números
      },
      "status": "paid", // pending_payment, paid, refunded, charged_back, canceled
      "products": [ // produtos que de fato foram comprados
        {
          "product_id": 5732411797552, // id no ERP
          "product_title": "Exemplo de produto",
          "variant_id": 53012421484761,
          "variant_title": "Variante abc",
          "quantity": 3,
          "price": 33.15,
          "image_url": "https://images.yever.com.br/product/exemplodeimagem-1669936110.jpg",
          "is_order_bump": 0
        }
      ],
      "shipping_address": {
        "name": "Nome de quem vai receber",
        "phone": "+5511999991111", // sempre 14 dígitos, +55 (código do brasil), 2 números do ddd e 9 do celular
        "address1": "logradouro, numero",
        "address2": "Bairro",
        "city": "Cidade",
        "province_code": "MG",
        "country": "Brazil",
        "country_code": "BR",
        "zip": "11111111" // sempre 8 dígitos
      },
      "tracking": {
        "code": "código de rastreio", // qualquer formato, pode ser de alguma transportadora da china, correios, etc. Ex: NL501111803BR
        "courier": "transportadora" // nome da transportadora. Ex: Correios
      },
      "coupon_code": null, // código do cupom se tiver
      "currency": "BRL",
      "price_initial": 178.86, // valor inicial do pedido -> price_subtotal + price_shipment
      "price_subtotal": 168.40, // valor dos produtos
      "price_shipment": 10.46, // valor do frete
      "price_coupon_discount": 5.05, // desconto do cupom
      "price_shipment_discount": 10.46, // desconto do frete
      "price_offer_discount": 0, // desconto da oferta
      "price_payment_discount": 8.17, // desconto por forma de pagamento
      "price_total": 155.18, // valor final do pedido -> price_subtotal + price_shipment - price_coupon_discount - price_shipment_discount - price_offer_discount - price_payment_discount
      "price_client_final": 155.18, // valor da venda com juros de parcelamento - recebimento no fluxo ou  checkout
      "price_coupon": 0.00, // deprecated, do not use
      "price_discount": 0.00,  // deprecated, do not use
      "payment_method": "credit_card", // pix, billet, credit_card
      "billet_code": null, // linha digitável do boleto
      "billet_url": null, // url para acessar o boleto
      "pix_code": null, // pix copia e cola
      "pix_url": null, // url para imagem do pix
      "checkout_url": "https://seguro.client.com.br/checkout/products?product_id[0]=1&quantity[0]=1", // url para refazer a compra se necessário
      "payment_url": "https://seguro.client.com.br/checkout/pix/1234567890", // url para fazer o pagamento -> Apenas pix e boleto e os números são o reference
      "is_upsell": 0,
      "installments": 12, // sempre será 1 para pix e boleto
      "created_at": "2022-12-09 05:46:59",
      "updated_at": "2022-12-09 05:47:01",
      "utms": {
        "source": "face",
        "campaign": "promocao_blackfriday",
        "medium": null,
        "content": null,
        "term": null,
      },
      "price_client": {
        "client":  102.89, // valor recebido pelo cliente
        "yever_base": 6.56, // taxa da yever
        "installment_antecipation": 0, // valor pago por assumir parcelas sem juros
      }
    },
    {
      ...
    },
  ],
  "paginate": {
    "current": 1,
    "last": 3,
    "total": 475,
    "per_page": 200
  }
}

Possíveis filtros:

Parâmetro Valor padrão Obrigatório Exemplo Description
reference Não 1234567890 Código do pedido
customer Não Maria da C, 31999991111, exemploemail@h Nome, e-mail, telefone (apenas números, sem +55), ou cpf (apenas números). O filtro é do tipo like, ou seja, você pode enviar apenas uma parte do que deseja procurar
status Não paid pending_payment, paid, refunded, charged_back, canceled
payment_method Não credit_card billet, credit_card, pix
created_at_inicial Não 2022-10-01 15:00:00.
created_at_final Não 2022-10-01 19:00:00
updated_at_inicial Não 2023-01-01 Se o horário não for fornecido, será considerado 00:00:00
updated_at_final Não 2023-02-01
page 1 Não 1 Objeto de paginação. Se o resultado tiver mais de uma página, você deverá fazer uma requisição para cada página. Máximo 100 páginas
per_page 100 Não 25 Quantidade de itens por página. Máximo de 500 itens

Carrinho

GET: https://api.yever.com.br/api/v1/cart/list

curl 'https://api.yever.com.br/api/v1/cart/list?last_step=payment&order_status=canceled&per_page=10' \
  --header 'Authorization: Bearer 999|xxxxxxxxxxxxxx'
const options = {
  method: "GET",
  headers: {
    Accept: "application/json",
    Authorization: "Bearer 999|xxxxxxxxxxxxxx",
  },
};

fetch(
  "https://api.yever.com.br/api/v1/cart/list?last_step=payment&order_status=canceled&per_page=10",
  options
)
  .then((response) => response.json())
  .then((response) => console.log(response));
<?php

$client = new \GuzzleHttp\Client();

$response = $client->request(
  'GET',
  'https://api.yever.com.br/api/v1/cart/list?last_step=payment&order_status=canceled&per_page=10',
  [
    'headers' => [
      'Accept' => 'application/json',
      'Authorization' => 'Bearer 999|xxxxxxxxxxxxxx',
    ],
  ],
);

$data = $response->getBody()->getContents();
OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.yever.com.br/api/v1/cart/list?last_step=payment&order_status=canceled&per_page=10")
  .get()
  .addHeader("Accept", "application/json")
  .addHeader("Authorization", "Bearer 999|xxxxxxxxxxxxxx")
  .build();

Response response = client.newCall(request).execute();

A resposta da requisição acima será um json no seguinte formato

{
  "carts": [
    {
      "reference": "41413750-c68f-46f0-ae42-a8f3ad9e4859", // 36 char, nesse formato
      "customer": {
        "name": "Nome do cliente",
        "email": "email@email.com",
        "phone": "+5511999991111" // sempre 14 dígitos, +55 (código do brasil), 2 números do ddd e 9 do celular
      },
      "last_step": "payment", // client, delivery, shipment, payment. Até qual step o cliente chegou
      "order_status": "canceled", // null se não tiver sido gerado um pedido, pending_payment, paid, refunded, charged_back, canceled
      "products": [ // produtos iniciais quando o cliente entrou na tela
        {
          "product_title": "Exemplo de produto",
          "variant_title": "Variante abc",
          "quantity": 2,
          "price": 47.91, // preço unitário
          "image_url": "https://images.yever.com.br/product/exemplodeimagem-1669936110.jpg",
        }
      ],
      "currency": "BRL",
      "price_total": 95.82,
      "checkout_url": "https://seguro.yever.com.br/checkout/products?product_id[0]=1&quantity[0]=2",
      "created_at": "2022-12-02 06:59:17",
      "updated_at": "2022-12-02 07:00:27",
      "abandoned_at":"2022-12-02 07:05:00",
      "utms": {
        "source": "face",
        "campaign": "promocao_blackfriday",
        "medium": null,
        "content": null,
        "term": null,
      },
    },
    {
      ...
    }
  ],
  "paginate": {
    "current": 1,
    "last": 4,
    "total": 36,
    "per_page": 10
  }
}

Possíveis filtros:

Parâmetro Valor padrão Obrigatório Exemplo Description
reference Não 41413750-c68f-46f0-ae42-a8f3ad9e4859 uuid do cliente pedido. 36 dígitos
customer Não Maria da C, 31999991111, exemploemail@h Nome, e-mail, telefone (apenas números, sem +55), ou cpf (apenas números). O filtro é do tipo like, ou seja, você pode enviar apenas uma parte do que deseja procurar
last_step Não payment client, delivery, shipment, payment
order_status Não paid pending_payment, paid, refunded, charged_back, canceled
created_at_inicial Não 2022-10-01 15:00:00.
created_at_final Não 2022-10-01 19:00:00
updated_at_inicial Não 2023-01-01 Se o horário não for fornecido, será considerado 00:00:00
updated_at_final Não 2023-02-01
page 1 Não 5 Objeto de paginação. Se o resultado tiver mais de uma página, você deverá fazer uma requisição para cada página. Máximo 100 páginas
per_page 100 Não 500 Quantidade de itens por página. Máximo de 500 itens

Exemplos respostas

Se os filtros não retornarem nenhum item, a resposta será o seguinte json.

{
  "carts": [],
  "paginate": {
    "current": 1,
    "last": 1,
    "total": 0,
    "per_page": 100
  }
}

Exemplo de filtro de data incorreto: https://api.yever.com.br/api/v1/order/list?created_at_inicial=2022-11-02&created_at_final=2022-10-01

{
  "errors": {
    "created_at_final": [
      "O campo created at final deve conter uma data superior ou igual a created at inicial."
    ]
  }
}

Exemplo de filtro de status incorreto: https://api.yever.com.br/api/v1/order/list?status=teste

{
  "errors": {
    "status": ["The selected status is invalid."]
  }
}

Webhook

Toda vez que houver um evento (criação ou atualização de um pedido/carrinho), será disparado um POST para a URL cadastrada. Em todas as requisições será enviado no corpo da requisição o parâmetro token para validar se foi disparado pela Yever. O token é informado na criação do webhook no sistema da Yever. O corpo da requisição será um json e nos Headeres da requisição será informado o Content-Type: application/json.

Pedidos

{
  "token": "xxxxxxxxxxxxx", // [a-zA-Z0-9]{64}
  "reference": "1234567890", // [0-9]{10}
  "customer": {
    "name": "Nome do cliente",
    "email": "email@email.com",
    "phone": "+5511999991111", // sempre 14 dígitos, +55 (código do brasil), 2 números do ddd e 9 do celular
    "type": "F", // F -> Pessoa Física, J -> Pessoa Jurídica
    "document": "92220244008" // \d{11}(\d{3})? - 11 ou 14 números
  },
  "status": "paid", // pending_payment, paid, refunded, charged_back, canceled
  "products": [
    // produtos que de fato foram comprados
    {
      "product_id": 5732411797552, // id no ERP
      "product_title": "Exemplo de produto",
      "variant_id": 53012421484761,
      "variant_title": "Variante abc",
      "quantity": 3,
      "price": 33.15,
      "image_url": "https://images.yever.com.br/product/exemplodeimagem-1669936110.jpg",
      "is_order_bump": 0
    }
  ],
  "shipping_address": {
    "name": "Nome de quem vai receber",
    "phone": "+5511999991111", // sempre 14 dígitos, +55 (código do brasil), 2 números do ddd e 9 do celular
    "address1": "logradouro, numero",
    "address2": "Bairro",
    "city": "Cidade",
    "province_code": "MG",
    "country": "Brazil",
    "country_code": "BR",
    "zip": "11111111" // sempre 8 dígitos
  },
  "tracking": {
    "code": "código de rastreio", // qualquer formato, pode ser de alguma transportadora da china, correios, etc. Ex: NL501111803BR
    "courier": "transportadora" // nome da transportadora. Ex: Correios
  },
  "coupon_code": null, // código do cupom se tiver
  "currency": "BRL",
  "price_initial": 178.86, // valor inicial do pedido -> price_subtotal + price_shipment
  "price_subtotal": 168.4, // valor dos produtos
  "price_shipment": 10.46, // valor do frete
  "price_coupon_discount": 5.05, // desconto do cupom
  "price_shipment_discount": 10.46, // desconto do frete
  "price_offer_discount": 0, // desconto da oferta
  "price_payment_discount": 8.17, // desconto por forma de pagamento
  "price_total": 155.18, // valor final do pedido -> price_subtotal + price_shipment - price_coupon_discount - price_shipment_discount - price_offer_discount - price_payment_discount
  "price_client_final": 155.18, // valor da venda com juros de parcelamento - recebimento no fluxo ou  checkout
  "price_coupon": 0.0, // deprecated, do not use
  "price_discount": 0.0, // deprecated, do not use
  "payment_method": "credit_card", // pix, billet, credit_card
  "billet_code": null, // linha digitável do boleto
  "billet_url": null, // url para acessar o boleto
  "pix_code": null, // pix copia e cola
  "pix_url": null, // url para imagem do pix
  "checkout_url": "https://seguro.client.com.br/checkout/products?product_id[0]=1&quantity[0]=1", // url para refazer a compra se necessário
  "payment_url": "https://seguro.client.com.br/checkout/pix/1234567890", // url para fazer o pagamento -> Apenas pix e boleto e os números são o reference
  "is_upsell": 0,
  "installments": 12, // sempre será 1 para pix e boleto
  "created_at": "2022-12-09 05:46:59",
  "updated_at": "2022-12-09 05:47:01",
  "utms": {
    "source": "face",
    "campaign": "promocao_blackfriday",
    "medium": null,
    "content": null,
    "term": null
  },
  "price_client": {
    "client": 102.89, // valor recebido pelo cliente
    "yever_base": 6.56, // taxa da yever
    "installment_antecipation": 0 // valor pago por assumir parcelas sem juros
  }
}

Carrinho

{
  "reference": "41413750-c68f-46f0-ae42-a8f3ad9e4859", // 36 char, nesse formato
  "customer": {
    "name": "Nome do cliente",
    "email": "email@email.com",
    "phone": "+5511999991111" // sempre 14 dígitos, +55 (código do brasil), 2 números do ddd e 9 do celular
  },
  "last_step": "payment", // client, delivery, shipment, payment. Até qual step o cliente chegou
  "order_status": "canceled", // null se não tiver sido gerado um pedido, pending_payment, paid, refunded, charged_back, canceled
  "products": [
    // produtos iniciais quando o cliente entrou na tela
    {
      "product_title": "Exemplo de produto",
      "variant_title": "Variante abc",
      "quantity": 2,
      "price": 47.91, // preço unitário
      "image_url": "https://images.yever.com.br/product/exemplodeimagem-1669936110.jpg"
    }
  ],
  "currency": "BRL",
  "price_total": 95.82,
  "checkout_url": "https://seguro.yever.com.br/checkout/products?product_id[0]=1&quantity[0]=2",
  "created_at": "2022-12-02 06:59:17",
  "updated_at": "2022-12-02 07:00:27",
  "abandoned_at": "2022-12-02 07:05:00",
  "utms": {
    "source": "face",
    "campaign": "promocao_blackfriday",
    "medium": null,
    "content": null,
    "term": null
  }
}

Errors

A API utiliza os códigos de erro HTTP. Além do erro, a grande maioria vai retornar alguma mensagem para explicar o motivo do erro.

Código Significado
400 Bad request -> Requisição inválida.
401 Unauthorized -> O Bearer Token fornecido no header Authorization é inválido. Confira a seção Autenticação.
403 Forbidden -> O token não possui permissão para executar esta ação.
404 Not found -> Não encontrado.
405 Method not allowed -> Você tentou acessar a rota com o método errado.
422 Unprocessable entity -> Erro de validação em algum parâmetro.
429 Too many requests -> Limit de requisições atingido.
5xx Se qualquer erro 5xx acontecer a Yever será notificada e o time irá realizar as correções necessárias.