Documentação da API PeGow para integração ERP
Integre Totvs, Linx e outros ERPs ao PeGow para publicar automaticamente produtos próximos ao vencimento.
Introdução
A API de integração ERP da PeGow permite enviar em lote produtos próximos ao vencimento para publicação no marketplace. O fluxo foi projetado para cenários de sincronização automática entre ERPs como Totvs, Linx e sistemas proprietários.
Base URL
https://pegow.com.br/api/erp/v1Autenticação
Gere uma chave em /merchant/api-keys e envie o token em todas as requisições no header Authorization.
Authorization: Bearer pgw_sua_chave_aquiNunca exponha sua chave em código client-side. Use variáveis de ambiente no servidor do seu ERP.
Endpoint de Inventário
/api/erp/v1/inventory/batchRecebe um array de produtos e realiza UPSERT no inventário do tenant autenticado. O campo ean representa o codigo interno/ticket usado na loja, enquanto original_ean e opcional e guarda o codigo de barras real para enriquecimento. Limite: 500 itens por requisição.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| ean | string | Sim | Codigo interno/ticket numerico usado como chave principal no estoque |
| original_ean | string | Nao | Codigo de barras real do fabricante (EAN-8, EAN-13 ou UPC-A) para lookup e catalogo |
| product_name | string | Sim | Nome do produto (2 a 255 caracteres) |
| description | string | Não | Descrição opcional (máx. 1000 caracteres) |
| original_price | number | Sim | Preço original em reais (> 0) |
| discount_price | number | Sim | Preço com desconto em reais (> 0 e ≤ original_price) |
| quantity | integer | Sim | Quantidade disponÃvel em estoque (≥ 0) |
| expiry_date | string | Sim | Data de validade no formato YYYY-MM-DD (≥ data de hoje) |
| store_code | string | Não | Código da filial (opcional; roteia o item para o estoque da filial se presente) |
| Header | Valor | Obrigatório |
|---|---|---|
| Authorization | Bearer <sua_chave> | Sim |
| Content-Type | application/json | Sim |
Schema do Payload
O corpo da requisição deve ser um array JSON com 1 a 500 objetos.
[
{
"ean": "200000192837",
"original_ean": "7891000000021",
"product_name": "Leite Integral Itambe 1L",
"description": "Leite integral longa vida, caixa 1 litro.",
"original_price": 7.49,
"discount_price": 4.99,
"quantity": 24,
"expiry_date": "2026-03-05"
},
{
"ean": "200000192838",
"original_ean": "7896017201019",
"product_name": "Iogurte Natural Integral 170g",
"description": "Iogurte natural sem adicao de acucar.",
"original_price": 4.99,
"discount_price": 2.99,
"quantity": 36,
"expiry_date": "2026-03-03"
}
]Endpoint de Baixa Rápida
POST /api/erp/v1/inventory/decrementUse este endpoint para abater estoque fisico imediatamente quando uma venda acontecer fora do app. A baixa e atomica e consome os lotes em ordem FEFO.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| ean | string | Sim | Codigo interno/ticket do produto a ser abatido |
| quantity_sold | integer | Sim | Quantidade vendida na loja fisica (minimo 1) |
{
"ean": "200000192837",
"quantity_sold": 1
}{
"success": true,
"ean": "200000192837",
"quantity_sold": 1,
"remaining_quantity": 23,
"affected_lots": 1
}{
"error": "Estoque insuficiente para baixa solicitada"
}Exemplos de Resposta
{
"processed": 2,
"errors": []
}{
"error": "Validation failed",
"details": {
"fieldErrors": {
"original_ean": ["EAN original invalido"]
},
"formErrors": []
}
}{
"error": "Unauthorized"
}Códigos de Erro
| Código | Status | Causa | Ação Recomendada |
|---|---|---|---|
| 200 | OK | Sucesso | Itens processados com sucesso |
| 400 | Bad Request | JSON malformado | Verificar o corpo da requisição |
| 401 | Unauthorized | Token ausente, inválido ou revogado | Verificar o header Authorization e o status da chave |
| 422 | Unprocessable Entity | Falha de validação Zod ou constraint do banco | Corrigir os campos indicados em details |
| 403 | Forbidden | Filial tentando criar sub-filial | Usar a chave API da conta Matriz |
| 422 | Unprocessable Entity | store_code não encontrado na rede | Cadastrar a filial via POST /api/erp/v1/stores antes de enviar inventário |
| 500 | Internal Server Error | Erro interno do servidor | Tentar novamente ou contatar suporte |
Multi-Lojas (Rede Matriz/Filial)
O modelo Matriz/Filial permite cadastrar múltiplas lojas em uma rede com uma única chave de API da conta Matriz. O fluxo possui duas etapas: primeiro cadastrar/atualizar a filial, depois enviar inventário com store_code para rotear os itens ao estoque correto.
Endpoint de Cadastro de Lojas
POST /api/erp/v1/stores| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| store_code | string | Sim | Código da filial no ERP (1 a 50 caracteres) |
| name | string | Sim | Nome da filial (2 a 255 caracteres) |
| cnpj | string | Sim | CNPJ com 14 dÃgitos numéricos |
| cep | string | Sim | CEP com 8 dÃgitos numéricos |
| address | string | Sim | Endereço completo da filial |
| lat | number | Não | Latitude (fornecer junto com lng) |
| lng | number | Não | Longitude (fornecer junto com lat) |
{
"store_code": "SP-001",
"name": "Big Box Asa Sul",
"cnpj": "12345678000195",
"cep": "70390900",
"address": "CLS 304 Bloco A, Asa Sul, Brasilia - DF",
"lat": -15.7998,
"lng": -47.8992
}lat/lng opcionais. Filiais sem GPS não aparecem no feed de proximidade.
{
"store_id": "8e6f4a4f-2b2d-48f8-bdb9-0b2f61b4f8cf",
"store_code": "SP-001",
"created": true
}{
"store_id": "8e6f4a4f-2b2d-48f8-bdb9-0b2f61b4f8cf",
"store_code": "SP-001",
"created": false
}{
"error": "Filiais não podem cadastrar sub-filiais. Use a chave API da conta Matriz."
}Roteamento por Filial no Inventário
Adicione store_code em cada item do batch para direcionar ao estoque da filial.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| store_code | string | Não | Código da filial (max 50 chars) |
[
{
"ean": "200000192837",
"original_ean": "7891000000021",
"product_name": "Leite Integral Itambe 1L",
"description": "Leite integral longa vida, caixa 1 litro.",
"original_price": 7.49,
"discount_price": 4.99,
"quantity": 24,
"expiry_date": "2026-03-05",
"store_code": "SP-001"
},
{
"ean": "200000192838",
"original_ean": "7896017201019",
"product_name": "Iogurte Natural Integral 170g",
"description": "Iogurte natural sem adicao de acucar.",
"original_price": 4.99,
"discount_price": 2.99,
"quantity": 36,
"expiry_date": "2026-03-03"
}
]{
"error": "Loja 'SP-001' não encontrada. Cadastre o endereço da filial primeiro via POST /api/erp/v1/stores"
}Fluxo Multi-Lojas
Matriz API Key -> POST /api/erp/v1/stores -> Filial criada
Matriz API Key + store_code -> POST /api/erp/v1/inventory/batch -> Estoque da Filial