Documentação da API
Bem-vindo à documentação oficial da API PopStore v2. Nossa API é baseada em REST, utiliza JSON para requisições e respostas, e utiliza códigos de status HTTP padrão.
A URL base para todas as requisições é: https://api2.popstore.com.br
Autenticação
A API utiliza autenticação via Bearer Token. Este token identifica sua loja (Store ID) e garante a segurança das transações.
Você deve incluir o token no cabeçalho Authorization de todas
as requisições.
Authorization: Bearer {sua_api_key}
Listar Produtos
GETRetorna uma lista de produtos cadastrados na loja.
Parâmetros (Query String)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| page | int | Não | Número da página (Padrão: 1) |
| limit | int | Não | Itens por página (Padrão: 10, Máximo: 100) |
| id | int | Não | ID específico do produto |
| code | string | Não | Referência específica do produto |
| status | int | Não | 1 retorna apenas os ativos |
| updated_at | string | Não | Data de atualização (YYYY-MM-DD HH:mm:ss) |
| search | string | Não | Busca por nome (name) ou referência (code) |
| collection_id | int | Não | ID da coleção |
| category_id | int | Não | ID da categoria |
| manufacturer | int | Não | ID do fabricante/marca |
URL de Requisição
200 OK
{
"data": [
{
"id": 185743,
"name": "Vestido Miss Misses Preto",
"code": "REF123",
"created_at": "2025-12-15 12:30:00",
"updated_at": "2026-02-19 15:00:00",
"brand": "Miss Misses",
"collection": "Verão 2026",
"categories": [
"Roupas",
"Roupas > Vestidos",
"Roupas > Vestidos > Vestidos de Festa"
],
"weight": "0.600",
"height": 35,
"width": 25,
"depth": 7,
"ncm": "62044200",
"ucom": "UN",
"utrib": "UN",
"status": {
"retail": 1,
"wholesale": 1
},
"discount_percent": {
"retail": 0,
"wholesale": 0
},
"options": [
{
"id": 1287728,
"type": "Vestido",
"color": "Vermelho",
"color_html": "#FF0000",
"size": "P",
"sku": "5475902402",
"ean": "7890000001",
"price": {
"retail": 395.90,
"wholesale": 179.90
},
"sale_price": {
"retail": 395.90,
"wholesale": 179.90
},
"quantity": {
"available": 2,
"hold": 0,
"total": 2
}
},
{
"id": 1287729,
"type": "Vestido",
"color": "Vermelho",
"color_html": "#FF0000",
"size": "M",
"sku": "5475902403",
"ean": "7908981970950",
"price": {
"retail": 395.90,
"wholesale": 179.90
},
"sale_price": {
"retail": 395.90,
"wholesale": 179.90
},
"quantity": {
"available": 3,
"hold": 1,
"total": 4
}
}
],
"photos": [
{
"url": "https://popstore.com.br/.../produto.webp"
}
],
"videos": [
{
"url": "https://popstore.com.br/.../produto.mp4"
}
],
"composition": "Composição do produto..."
"description": "Descrição do produto..."
}
]
}
Atualizar Estoque
PUTAtualiza a quantidade de estoque de um produto ou variante específica. Suporta atualização individual ou em lote (enviando um array de itens). A quantidade informada deve ser a contagem física total. O sistema automaticamente desconta itens reservados em pedidos.
Parâmetros (Body / JSON)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| product_id | int | Sim* | ID do produto pai |
| code | string | Sim* | Código do produto pai |
| option_id | int | ** | ID da variante (opcional se enviar sku ou ean) |
| sku | string | ** | SKU da variante (opcional se enviar option_id ou ean) |
| ean | string | ** | Código de barras (opcional se enviar option_id ou sku) |
| quantity | int | Sim | Quantidade |
Exemplo de Requisição (JSON)
[
{
"product_id": 185743,
"option_id": 1287728,
"quantity": 50
},
{
"code": "54759024",
"sku": "5475902402",
"quantity": 35
}
]
200 OK
{
"status": "ok",
"results": [
{
"status": "ok",
"data": {
"product_id": 185743,
"code": "54759024",
"option_id": 1287728,
"sku": "5475902402",
"ean": "7980323238781",
"old_quantity": 10,
"quantity": {
"available": 45,
"hold": 5,
"total": 50
}
}
},
{
"status": "ok",
"data": {
...
}
}
]
}
Atualizar Preços
PUT
Atualiza os preços de venda e atacado de todas as opções de um produto, identificado pelo
product_id ou code (Store Code).
Parâmetros (Body / JSON)
| Campo | Tipo | Opcional | Descrição |
|---|---|---|---|
| product_id | int | Não* | ID do produto pai. |
| code | string | Não* | Referência (code) do produto. |
| price.retail | float | Sim | Novo Preço de Varejo (para todas as opções). |
| price.wholesale | float | Sim | Novo Preço de Atacado (para todas as opções). |
product_id OU code. Se ambos forem
enviados, o ID tem prioridade.
Exemplo de Requisição (Batch)
[
{
"product_id": 185743,
"price": {
"retail": 150.00,
"wholesale": 80.00
}
},
{
"code": "REF123",
"price": {
"retail": 199.90
}
}
]
200 OK
{
"status": "ok",
"results": [
{
"status": "ok",
"data": {
"product_id": 185743,
"price": {
"retail": 150.00,
"wholesale": 80.00
}
}
},
...
]
}
Atualizar Descontos
PUT
Atualiza os descontos do produto (Retail e Wholesale).
Você pode enviar o percentual de desconto diretamente no objeto
discount ou o preço final desejado no objeto
sale_price (o sistema calculará o percentual necessário baseado no preço atual
do produto).
Parâmetros (Body / JSON)
| Campo | Tipo | Opcional | Descrição |
|---|---|---|---|
| product_id | int | Não* | ID do produto pai. |
| code | string | Não* | Referência (code) do produto. |
| discount.retail | float | Sim** | % Desconto Varejo (0-100). |
| discount.wholesale | float | Sim** | % Desconto Atacado (0-100). |
| sale_price.retail | float | Sim** | Preço final desejado (Varejo). Sistema calculará % desconto. |
| sale_price.wholesale | float | Sim** | Preço final desejado (Atacado). Sistema calculará % desconto. |
product_id OU code. Se ambos forem
enviados, o ID tem prioridade.** Se enviar
discount e sale_price, o valor de
discount (percentual) tem precedência.
Exemplo de Requisição
[
{
"product_id": 185743,
"discount": {
"retail": 10,
"wholesale": 0
}
},
{
"code": "REF123",
// Calcular desconto para chegar no preço final
"sale_price": {
"retail": 135.00
}
}
]
200 OK
{
"status": "ok",
"results": [
{
"status": "ok",
"updated_fields": ["discount_retail"],
"data": {
"product_id": 185743,
"store_code": "REF123",
"discount_percent": {
"retail": 10,
"wholesale": 0
}
}
}
]
}
Atualizar Produto
PUTAtualiza dados de um produto existente. O comportamento de variações (options) opera no formato UPSERT completo: as variações que você enviar no array e já existirem (por `option_id`, `ean` ou `sku`) serão atualizadas mantendo seus outros parâmetros intocados. Variantes não encontradas serão criadas. E qualquer variação já existente no banco que for OMITIDA no payload será apagada/inativada.
Parâmetros do Body (JSON)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| product_id | int | Ou code | ID interno único do produto para localizar. |
| code | string | Ou id | Referência do produto para localizar (caso não envie o ID). |
| Campos de Atualização Opcionais | |||
| new_code | string | Não | Se enviado, substitui o Reference Code atual do produto. |
| name | string | Não | Novo Nome/Título do produto. |
| brand | string | Não | Nome da marca. Se enviada, associa caso exista, ou cria uma nova. |
| brand_id | int | Não | ID da marca diretamente (tem prioridade sobre brand). |
| collection | string | Não | Nome da coleção. Se enviada, associa ou cria nova. |
| collection_id | int | Não | ID da coleção (prioritário sobre collection). |
| description | string | Não | Descrição detalhada (HTML permitido). |
| composition | string | Não | Composição longa de materiais. |
| weight | string | Não | Peso em KG (Ex: "0.350"). |
| ncm | string | Não | Nomenclatura Comum do Mercosul. |
| ucom | string | Não | Unidade Comercial (Ex: "UN", "M2"). |
| utrib | string | Não | Unidade Tributável. |
| options | array | Não | Lista completa e definitiva de variações sob regime de UPSERT. O sistema faz match prioritário por option_id -> ean -> sku.• Atenção: Qualquer opção já existente no produto que não for enviada neste array será apagada permanentemente. • Validação: Para criar novas opções, é obrigatório enviar sku, price_retail e size. Tentar atualizar um option_id inexistente também gera bloqueio.Atributos dentro de cada objeto: option_id, sku (ou code), ean, color_name, color_html, size (ou option), type, quantity, price_cost, price_wholesale, price_retail |
Exemplo de Requisição
application/json{
"code": "REF123",
"name": "Vestido Coleção Nova 2026",
"brand": "Miss Misses",
"description": "Vestido leve 100% viscose.",
"weight": "0.350",
"options": [
{
"sku": "NEW-SKU-1",
"ean": "7890000001",
"type": "Vestido",
"color_name": "Vermelho",
"color_html": "#FF0000",
"size": "P",
"quantity": 10,
"price_cost": 45.00,
"price_wholesale": 90.00,
"price_retail": 189.90
},
{
"option_id": 12892,
"color_name": "Preto Mescla",
"price_retail": 199.90
}
]
}
200 OK
{
"return": {
"status": "ok",
"data": {
"id": 185744
}
}
}
400 Bad Request
{
"return": {
"status": "error",
"error": "Can't update this product. You are not the owner, view only."
}
}
400 Bad Request
{
"return": {
"status": "error",
"error": "Missing mandatory fields (sku, price_retail, size or option) for creating new variant."
}
}
400 Bad Request
option_id que o banco confirma não existir para aquele produto no payload de Upsert.{
"return": {
"status": "error",
"error": "Option ID 99999 not found."
}
}
Criar Produto
POSTCria um novo produto na loja. Este endpoint permite o cadastro completo, incluindo variações (SKUs), fotos e preços.
Parâmetros do Body (JSON)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| code | string | Sim | Código de referência única do produto. |
| name | string | Sim | Nome/Título do produto. |
| brand | string | Não | Nome da marca. Se não existir, será criada automaticamente. |
| collection | string | Não | Nome da coleção. Se não existir, será criada automaticamente. |
| description | string | Não | Descrição detalhada do produto (HTML permitido). |
| price_cost | float | Não | Preço de custo. |
| price_whlesale | float | Não | Preço de atacado. |
| price_retail | float | Não | Preço de varejo. |
| weight | float | Não | Peso do produto em kg. exemplo: 0.350 |
| length | int | Não | Comprimento do produto em cm. exemplo: 20 |
| width | int | Não | Largura do produto em cm. exemplo: 20 |
| height | int | Não | Altura do produto em cm. exemplo: 2 |
| options | array | Não | Lista de variações (tamanho/cor). Veja o exemplo. |
| photos | array | Não | Lista de fotos (URL ou Base64). |
Exemplo de Requisição
application/json{
"code": "REF123",
"name": "Vestido Miss Misses Preto",
"brand": "Miss Misses",
"collection": "Verão 2026",
"description": "<p>Vestido longo com fenda lateral.</p>",
"composition": "<p>100% Viscose</p>",
"price_cost": 45.00,
"price_wholesale": 90.00,
"price_retail": 189.90,
"weight": "0.350",
"options": [
{
"sku": "5475902402",
"type": "Vestido",
"color_name": "Vermelho",
"color_html": "#FF0000",
"size": "P",
"ean": "7890000001",
"quantity": 10
},
{
"sku": "5475902403",
"type": "Vestido",
"color_name": "Vermelho",
"color_html": "#FF0000",
"size": "M",
"ean": "7890000001",
"quantity": 15
}
],
"photos": [
{
"url": "https://site.com/foto1.jpg",
"width": 800,
"height": 1200
}
]
}
200 OK
{
"return": {
"status": "ok",
"data": {
"id": 185744,
"options": {
"id": 1287730
}
}
}
}
400 Bad Request
{
"return": {
"status": "error",
"error": "code is empty"
}
}
Consultar Estoque Reservado
GETRetorna a quantidade de estoque reservado (aguardando pagamento, pago ou em separação) dos produtos.
Parâmetros (Query String)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| product_id | int | Não | ID do Produto para filtrar as reservas de apenas um produto. Deixe vazio para retornar todos. |
URL de Requisição
200 OK
{
"data": {
"1287729": {
"option_id": 1287729,
"sku": "5475902402",
"pending": 2,
"approved": 1,
"picked": 0,
"total": 3
}
}
}
Listar Pedidos
GETRetorna uma lista de pedidos realizados na loja filtrados por um intervalo de datas.
Parâmetros (Query String)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| date_from | string | Não | Data inicial (YYYY-MM-DD) |
| date_to | string | Não | Data final (YYYY-MM-DD) |
| updated_at | string | Não | Data de atualização (YYYY-MM-DD HH:mm:ss) |
| page | int | Não | 1 |
| limit | int | Não | Itens por página (Padrão: 10, Máximo: 100) |
| order_id | int | Não | Número do Pedido interno |
| external_id | string | Não | ID estrangeiro exato associado ao pedido de origem externa (Ex. Mercado Livre) |
| sort | string | Não | ASC / DESC |
Status do Pedido
O campo status pode retornar um dos
seguintes valores:
URL de Requisição
200 OK
{
"data": [
{
"id": 900044,
"external_id": PED-123456,
"created_at": "2026-02-19 16:54:26",
"updated_at": "2026-02-20 17:50:00",
"type": "retail",
"status": "Approved",
"marketplace": "Vesti",
"name": "Nome Sobrenome",
"cpf": "00000000000",
"company_name": "Empresa",
"cnpj": "00000000000000",
"ie": "00000000000",
"email": "[email protected]",
"phone": "(11) 999999999",
"zip_code": "99999999",
"address": "Rua Teste",
"number": "1000",
"address2": "Complemento",
"neighborhood": "Centro",
"city": "São Paulo",
"state": "São Paulo",
"state_iso": "SP",
"country": "Brasil",
"country_iso": "BR",
"shipping_type": "CORREIOS - SEDEX",
"shipping_deadline": "2",
"tracking_code": "EG1234567890BR",
"tracking_url": "https://rastreamento.correios.com.br/app/index.php?objetos=EG1234567890BR",
"payment_method": "PIX",
"sub_total": 379.74,
"discount": 37.97,
"shipping": 10.00,
"total": 351.77,
"items": [
{
"product_id": "185743",
"option_id": "1287729",
"sku": "5475902402",
"ean": "7908981970950",
"name": "Vestido Miss Misses Preto",
"color": "Vermelho",
"size": "M",
"cost": 45.00,
"price": 90.00
"quantity": 1,
}
]
},
{
// ... demais pedidos
}
]
}
Criar Pedido
POSTCria um novo pedido no sistema. O estoque dos produtos será atualizado automaticamente.
Parâmetros (JSON Body)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| external_id | string | Sim | ID único do pedido no seu sistema. |
| type | string | Não | "retail" para varejo, "wholesale" para atacado. |
| status | string | Sim | Pending, Approved |
| marketplace | string | Não | Nome do marketplace. Ex: "Vesti". |
| Dados do Cliente | |||
| name | string | Sim | Nome completo. |
| string | Sim | E-mail de contato. | |
| phone | string | Sim | Telefone com DDD. |
| birth_date | string | Não | Data de nascimento (formato: DD/MM/YYYY). |
| cpf | string | Não | CPF (apenas números). |
| company_name | string | Não | Razão Social. |
| cnpj | string | Não | CNPJ (apenas números). |
| ie | string | Não | Inscrição Estadual. |
| Endereço de Entrega | |||
| zip_code | string | Sim | CEP (apenas números). |
| address | string | Sim | Logradouro. |
| number | string | Sim | Número. |
| address2 | string | Não | Complemento. |
| neighborhood | string | Sim | Bairro. |
| city | string | Sim | Cidade. |
| state | string | Sim | Nome do Estado. |
| state_iso | string | Sim | Sigla do Estado (ex: SP). |
| country | string | Não | País (Padrão: Brasil). |
| country_iso | string | Não | Sigla do País (Padrão: BR). |
| Valores e Envio | |||
| shipping_type | string | Sim | Forma de envio (ex: CORREIOS - SEDEX). O mesmo do campo name que retorna em /shipping |
| shipping_deadline | int | Sim | Prazo de envio em dias (ex: 5). |
| payment_method | string | Não | Forma de pagamento (ex: PIX). |
| sub_total | float | Sim | Valor total dos produtos. |
| discount | float | Sim | Valor do desconto. |
| discount_code | string | Não | Código do cupom. |
| shipping | float | Sim | Valor do frete. |
| total | float | Sim | Valor total final do pedido. |
| Itens do Pedido | |||
| items | array | Obrigatório | Lista de objetos contendo os seguintes campos: |
| └─ product_id ou code | string | Sim | ID interno ou referência SKU do produto. |
| └─ option_id ou sku ou ean | string | Sim | ID da variação, SKU da variação ou EAN13. |
| └─ quantity | integer | Sim | Quantidade desejada. |
| └─ price | float | Sim | Preço unitário do item. |
Exemplo de Requisição
application/json{
"external_id": "PED-123456",
"status": "Pending",
"marketplace": "Vesti",
"type": "retail",
"name": "João da Silva",
"email": "[email protected]",
"phone": "(11) 98888-7777",
"birth_date": "25/10/1985",
"cpf": "12345678901",
"zip_code": "01310-930",
"address": "Avenida Paulista",
"number": "1578",
"address2": "apt 221",
"neighborhood": "Bela Vista",
"city": "São Paulo",
"state": "São Paulo",
"state_iso": "SP",
"country": "Brasil",
"country_iso": "BR",
"shipping_type": "CORREIOS - SEDEX",
"shipping_deadline": 5,
"payment_method": "Cartão",
"sub_total": 1000.00,
"discount": 100.00,
"discount_code": "CUPOM10",
"shipping": 25.00,
"total": 925.00,
"items": [
{
"product_id": "185743",
"option_id": "1287728",
"price": 250.00,
"quantity": 2
},
{
"code": "REF123",
"sku": "5475902402",
"price": 250.00,
"quantity": 1
},
{
"code": "REF123",
"ean": "7890000001",
"price": 250.00,
"quantity": 1
}
]
}
200 OK
{
"return": {
"status": "ok",
"id": 900500
}
}
Atualizar Pedido
PUTAtualiza o Status de Pagamento/Evolução de um pedido da loja. O sistema protege automaticamente pedidos já finalizados, permitindo apenas a transição de um pedido que esteja como Pending.
Atenção ao Cancelamento: Quando um pedido pendente transaciona para Canceled, a API executa um script interno automático que lê todos os produtos que estavam em seu carrinho e devolve completamente os estoques daquelas respectivas grades (options) de volta à loja. O histórico do pedido (status_history) é reescrito a cada transação automaticamente.
Parâmetros do Body (JSON)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| order_id | integer | Ou external_id | ID interno absoluto na Popstore. |
| external_id | string | Ou order_id | Código estrangeiro do pedido (ID do Mktplace, ID do ERP). |
| Atualização de Estado | |||
| status | string | Não | Novo status que o pedido adotará. Somente: Pending, Approved, ou Canceled. |
Exemplo de Requisição
application/json{
"external_id": "123444400-PAGARME",
"status": "Approved"
}
200 OK
{
"return": {
"status": "ok",
"data": {
"id": 900044,
"order_status": Approved
}
}
}
400 Bad Request
{
"return": {
"status": "error",
"error": "Order is already finalized (Approved/Canceled) and cannot be changed."
}
}
400 Bad Request
{
"return": {
"status": "error",
"error": "Order not found or you do not have permission."
}
}
Listar Categorias
GETLista todas as categorias de produtos vinculadas à loja atual. Retorna o ID, nome, parent_id e slug de cada categoria.
URL de Requisição
200 OK
{
"return": {
"status": "ok",
"data": [
{
"id": 10,
"parent_id": 0,
"name": "Roupas",
"slug": "roupas"
},
{
"id": 11,
"parent_id": 10,
"name": "Vestidos",
"slug": "vestidos-de-festa"
}
]
}
}
Criar Categoria
POSTCria uma nova categoria de produto. Retorna o ID caso a categoria já exista com o mesmo nome e mesmo `parent_id`.
Payload (JSON)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| name | string | Sim | O nome da categoria. |
| parent_id | int | Não* | ID da categoria pai. Envie 0 para categoria primária. Padrão ao omitir: 0. |
| slug | string | Não | URL amigável da categoria (ex: roupas-de-inverno). Gerado automaticamente se omitido. |
URL de Requisição
Body (JSON)
{
"name": "Vestidos",
"parent_id": 10,
"slug": "meus-vestidos-lindos"
}
200 OK
{
"return": {
"status": "ok",
"data": {
"id": 11
}
}
}
Listar Marcas
GETLista todas as marcas vinculadas à loja atual.
URL de Requisição
200 OK
{
"return": {
"status": "ok",
"data": {
"123": "Marca Exemplo",
"456": "Outra Marca"
}
}
}
Criar Marca
POSTCria uma nova marca ou retorna o ID da marca existente caso ela já tenha sido criada anteriormente com o mesmo nome para a sua loja.
Payload (JSON)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| name | string | Sim | O nome interno ou fantasia da marca. |
URL de Requisição
Body (JSON)
{
"name": "Marca Exemplo"
}
200 OK
{
"return": {
"status": "ok",
"data": {
"id": 123
}
}
}
Listar Coleções
GETLista todas as coleções vinculadas à loja atual.
URL de Requisição
200 OK
{
"return": {
"status": "ok",
"data": {
"123": "Coleção Verão",
"456": "Coleção Inverno"
}
}
}
Criar Coleção
POSTCria uma nova coleção ou retorna o ID da coleção existente caso ela já tenha sido criada anteriormente com o mesmo nome para a sua loja.
Payload (JSON)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| name | string | Sim | O nome da coleção. |
| brand_id | int | Não | ID da marca opcional para vincular à coleção. |
| brand_name | string | Não | Nome da marca. Se o ID não for informado, a API buscará ou criará automaticamente a marca a partir deste nome. |
URL de Requisição
Body (JSON)
{
"name": "Coleção Verão",
"brand_id": 123,
"brand_name": "Nome da Marca"
}
200 OK
{
"return": {
"status": "ok",
"data": {
"id": 456
}
}
}
Listar Opções
GETLista todas as opções (grades) vinculadas à loja atual. (ex: P, M, G, Único)
URL de Requisição
200 OK
{
"return": {
"status": "ok",
"data": {
"1": "P",
"2": "M",
"3": "G"
}
}
}
Criar Opção
POSTCria uma nova opção de grade (ex: G) ou retorna o ID da opção existente caso ela já tenha sido criada anteriormente com o mesmo nome para a sua loja.
Payload (JSON)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| name | string | Sim | O nome interno da opção de grade. |
URL de Requisição
Body (JSON)
{
"name": "G"
}
200 OK
{
"return": {
"status": "ok",
"data": {
"id": 3
}
}
}
Listar Tipos
GETLista todos os tipos de produtos vinculados à loja atual. (ex: Vestido, Blusa, Calça)
URL de Requisição
200 OK
{
"return": {
"status": "ok",
"data": {
"1": "Vestido",
"2": "Blusa",
"3": "Calça"
}
}
}
Criar Tipo
POSTCria um novo tipo de produto (ex: Vestido) ou retorna o ID do tipo existente caso ele já tenha sido criado anteriormente com o mesmo nome para a sua loja.
Payload (JSON)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| name | string | Sim | O nome interno do tipo de produto. |
URL de Requisição
Body (JSON)
{
"name": "Vestido"
}
200 OK
{
"return": {
"status": "ok",
"data": {
"id": 3
}
}
}
Listar Clientes
GETRetorna a lista de clientes, permitindo paginação e busca detalhada.
Parâmetros (Query String)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| page | int | Não | Número da página para paginação. Padrão: 1. |
| limit | int | Não | Quantidade de clientes por página. Padrão: 10. Máximo: 100. |
| search | string | Não | Termo de busca genérico. Busca por ID, nome, e-mail, CPF ou CNPJ. |
| id | int | Não | ID específico do cliente para filtragem direta. Retornará apenas um cliente se encontrado. |
URL de Requisição
200 OK
{
"return": {
"status": "ok"
},
"data": [
{
"id": 123,
"register_type": "person",
"name": "Maria Oliveira",
"email": "[email protected]",
"phone": "(11) 99999-8888",
"birth_date": "15/06/1990",
"cpf": "11122233344",
"company_name": "",
"cnpj": "",
"ie": "",
"zip_code": "01310-100",
"address": "Av. Paulista",
"number": "1000",
"address2": "Apto 31",
"neighborhood": "Bela Vista",
"city": "São Paulo",
"state": "São Paulo",
"state_iso": "SP",
"country": "Brasil",
"country_iso": "BR",
"created_at": "2023-11-20 10:30:00",
"status": "active"
}
],
"meta": {
"total_items": 1,
"total_pages": 1,
"current_page": 1,
"items_per_page": 10
}
}
Criar Cliente
POST
Cria um cliente validando seus dados obrigatórios e definindo automaticamente seu status.
É obrigatório informar o tipo de cliente (type), sendo retail para pessoa física e wholesale para pessoa jurídica.
Dependendo do type, torna-se obrigatório informar cpf para retail e cnpj para wholesale.
Corpo da Requisição (JSON)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| type | string | Sim | Tipo de cliente: retail ou wholesale. |
| name | string | Sim | Nome completo do cliente. |
| string | Sim | E-mail para login e contato (deve ser único). | |
| phone | string | Sim | Telefone de contato com DDD. |
| birth_date | string | Não | Data de nascimento formato DD/MM/YYYY. |
| cpf | string | Condicional | CPF do titular. Obrigatório se type for retail. |
| company_name | string | Não | Razão Social (PJ). |
| cnpj | string | Condicional | CNPJ (PJ). Obrigatório se type for wholesale. |
| ie | string | Não | Inscrição Estadual (PJ). |
| password | string | Não | Senha de acesso do cliente. Gerada automaticamente caso não seja preenchida. |
| Endereço de Entrega | |||
| zip_code | string | Sim | CEP. |
| address | string | Sim | Logradouro / Rua. |
| number | string | Sim | Número. |
| address2 | string | Não | Complemento. |
| neighborhood | string | Sim | Bairro. |
| city | string | Sim | Cidade. |
| state | string | Sim | Estado (Nome Completo). |
| state_iso | string | Sim | UF do Estado. |
| country | string | Não | País. |
| country_iso | string | Não | País (ISO). |
Exemplo de Requisição (JSON)
{
"type": "retail",
"name": "João Albergossi",
"email": "[email protected]",
"password": "senha_segura_123",
"phone": "(11) 98888-7777",
"birth_date": "25/10/1985",
"cpf": "12345678901",
"zip_code": "01310-930",
"address": "Avenida Paulista",
"number": "1578",
"address2": "Apto 204",
"neighborhood": "Bela Vista",
"city": "São Paulo",
"state": "São Paulo",
"state_iso": "SP",
"country": "Brasil",
"country_iso": "BR"
}
200 OK
{
"return": {
"status": "ok",
"id": 501
}
}
Obter Cotações de Frete
GETRetorna todas as opções de frete ativas na loja para um determinado CEP, peso e dimensões. A API se encarrega de consultar todas as transportadoras (como Correios) e retornar o array unificado ordenado pelo menor preço.
Parâmetros (Query String)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| zip_code | string | Sim | CEP de destino. Ex: 00000-000 ou apenas números. |
| weight | float | Sim | Peso do pacote em Quilogramas (Kg). Ex: 0.3 para 300g, 1.2 para 1.2kg. |
| height, width, depth |
int | Não | Dimensões da caixa em centímetros: Altura, Largura e Profundidade. |
| total | float | Sim | Valor total do carrinho, exigido para calcular promoções de frete grátis e seguro. |
URL de Requisição
200 OK
{
"success": true,
"rates": [
{
"name": "CORREIOS - PAC",
"price": 0.00,
"deadline": 8,
"tag": "Free Shipping"
},
{
"name": "CORREIOS - SEDEX",
"price": 18.90,
"deadline": 2
}
]
}
Cadastrar ou Alterar Webhook
POSTEste endpoint é utilizado tanto para registrar um novo webhook quanto para atualizá-lo. A URL vinculada à sua Chave de API (Bearer Token) será cadastrada (ou sobrescrita caso já exista) para receber as notificações de eventos da plataforma.
Corpo da Requisição (JSON)
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| webhook | string | Sim | A URL completa (incluindo https://) que receberá as notificações. Formato válido de URL requerido. |
Formato do Disparo (O que você recebe)
Quando houver alterações nos registros da loja, o PopStore fará uma requisição POST automatizada em lotes (agrupando até 500 eventos por vez) para a sua URL cadastrada contendo o payload em application/json neste formato restrito abaixo, devolvendo apenas os IDs numéricos para proteção de dados:
{
"orders": [900044, 900055, 900078],
"products": [185743, 185754],
"customers": [123456]
}
É de sua responsabilidade consultar/injetar estes IDs nas outras rotas da API (`GET /orders/[id]`, etc.) para baixar a carga processada em ambiente seguro.
Exemplo de Requisição (JSON)
{
"webhook": "https://int.seusistema.com.br/webhooks/popstore"
}
200 OK
{
"return": {
"status": "ok"
},
"data": {
"webhook": "https://int.seusistema.com.br/webhooks/popstore",
"message": "Webhook registered successfully for this API Key."
}
}