proffer API Hub

📚 Guias

Documentação para times de produto e desenvolvedores

📦

Time de Produto

🌐

O que é a API Proffer?

Visão geral do ecossistema e fluxo de dados end-to-end.

🔄

Ciclo de Preços

Como o ERP envia dados e recebe recomendações de IA.

📖

Glossário de Termos

EAN, codrede, zonapreco, PMC e outros termos técnicos.

🎨

Melhores Práticas de UX

Como apresentar preços sugeridos no painel do ERP.

👩‍💻

Desenvolvedores

Quick Start (5 min)

Faça sua primeira chamada autenticada em minutos.

🔐

Autenticação JWT

Login, refresh token e renovação automática.

🗃️

Guia de Integração — V1

Documentação completa dos endpoints V1.

🚀

Migração V1 → V2

Diferenças, breaking changes e o que melhorou.

🐛

Tratamento de Erros

Códigos HTTP, retry strategy e debugging.

⚙️

Rate Limits & Boas Práticas

Limites de requisições e otimizações.

🌐 O que é a API Proffer?

A API Proffer Parceiros é uma interface RESTful desenhada para conectar o motor de IA da Proffer diretamente ao ecossistema do seu ERP de farmácia. O objetivo é automatizar a inteligência de precificação: o ERP envia dados de transações e catálogo de produtos, e a IA da Proffer devolve preços otimizados e recomendações para maximizar margem e competitividade.

Arquitetura Base

  • RESTful: Utilizamos recursos bem definidos, verbos HTTP padronizados (GET, POST, PUT, DELETE) e respostas JSON.
  • Assíncrono: O processamento de grandes cargas de dados (ex: milhões de transações) ocorre em background após o recebimento via API.
  • Segurança: Todas as rotas (exceto `/health`) exigem token JWT emitido pelo nosso Identity Provider via endpoint de Login.

🔄 Ciclo de Inteligência e Reprecificação

Entender o timing da API é essencial. A reprecificação funciona num fluxo cíclico baseado nos dados do dia anterior.

1

Fim do Dia (D-1): Ingestão

O parceiro/ERP aciona a rota `POST /integracao/transacao` enviando todas as vendas realizadas no dia anterior (ou no dia corrente até a meia-noite). Isso alimenta nossos modelos de elasticidade.

2

Madrugada: Processamento IA

Nossos clusters analisam a nova carga de dados + sinais de mercado (concorrentes) para calcular e recalibrar a curva de preço de cada EAN/Loja.

3

Manhã (D+0): Consumo pelo ERP

O ERP aciona a rota `GET /otimizacao/recomendacoes` e sincroniza os preços sugeridos para o PDV da loja antes da abertura.

⚡ Quick Start (5 minutos)

Autentique, envie produtos e consuma recomendações em Python em 4 passos.

🐍 Python — Quick Start
# Quick Start — Proffer Parceiros API (Python)
#
# ⚠️ Sandbox e Produção são ambientes distintos:
#   Sandbox: https://sandbox.apiproffer.com/parceiros  ← testes, credenciais sandbox
#   Produção: https://parceiros.apiproffer.com/parceiros ← dados reais, credenciais do parceiro

import requests

# Troque para a URL de produção quando estiver pronto
BASE = "https://sandbox.apiproffer.com/parceiros"

# 1. Autenticar (use as credenciais fornecidas pela Proffer para cada ambiente)
response = requests.post(
    f"{BASE}/v2/auth/login",
    json={"email": "erp+sandbox@proffer.com.br", "password": "erpsandbox"}
)
token = response.json()["access_token"]

# 2. Enviar mix de produtos
headers = {"Authorization": f"Bearer {token}"}

produtos = [
    {
        "codproduto": 5155,
        "codloja": 23,
        "ean": 7891058011222,
        "descricao": "NOVALGINA 1G 4CPR",
        "imprimeetiqueta": "S",
        "custo": 4.82,
        "customedio": 4.83,
        "pmc": 7.00,
        "precoregular": 5.80,
        "estoque": 150,
        "estado": "SP"
    }
]

r = requests.post(f"{BASE}/v2/integracao/produto", json=produtos, headers=headers)
print(r.json())  # {"success": true, "data": {"aceitos": 1, ...}}

# 3. Ler recomendações de preço
r = requests.get(
    f"{BASE}/v2/otimizacao/recomendacoes",
    headers=headers,
    params={"per_page": 10}
)
for rec in r.json()["data"]:
    print(f"{rec['descricao']}: R$ {rec['precosugerido']}")

🔐 Autenticação JWT

A API usa JWT via AWS Cognito. O access_token expira em 1 hora.

🔑

1. Login

POST /v2/auth/login com e-mail e senha. Retorna access_token, refresh_token e id_token.

📨

2. Header

Adicione Authorization: Bearer {access_token} em todas as chamadas subsequentes.

🔄

3. Refresh

Quando receber 401, chame POST /v2/auth/refresh com o refresh_token para renovar.

⚙️

4. Automático

Implemente verificação de expiração antes de cada chamada para renovar proativamente.

🚀 Novidades V2

V2 é retrocompatível. V1 continua funcionando.

RecursoV1V2
RespostaFormato inconsistenteEnvelope padronizado { success, data, error, pagination }
ErrosStrings variadasErro tipado com code, message, details
Autenticação2 módulos duplicadosUnificada em /v2/auth/
AutorizaçãoChecagem manual por rota@require_roles('admin', 'parceiro_admin')
PaginaçãoDiferente por endpointPadrão page, per_page, total, total_pages, has_next
ValidaçãoInexistenteValidação com erros por campo
Health CheckInexistenteGET /v2/health

🐛 Referência de Erros

400 Bad Request

Parâmetros inválidos ou campos obrigatórios ausentes. Verifique o payload.

401 Unauthorized

Token ausente, inválido ou expirado. Re-autentique ou use o refresh_token.

403 Forbidden

Sem permissão para o recurso ou codrede. Verifique acessos do usuário.

422 Unprocessable Entity

Formato correto mas dados semanticamente inválidos (ex: EAN inexistente).

429 Too Many Requests

Rate limit atingido. Aguarde e tente com backoff exponencial.

500 Server Error

Erro interno na Proffer. Tente novamente ou contate parceiros@proffer.com.br.

📖 Glossário

EANEuropean Article Number — código de barras de 13 dígitos que identifica unicamente um produto.
codredeCódigo da rede de farmácias. Agrupa todas as lojas (codloja) de um mesmo grupo.
codlojaCódigo de uma filial/loja individual dentro da rede.
codprodutoID interno do produto no ERP do parceiro. Pode ser diferente do EAN.
zonaprecoAgrupamento geográfico de lojas que compartilham o mesmo preço. Ex: ZONA_SP_CAPITAL.
PMCPreço Máximo ao Consumidor — preço regulatório máximo para medicamentos.
precovendaPreço líquido efetivamente cobrado do cliente na transação.
precosugeridoCampo principal da otimização — preço recomendado pela IA para maximizar margem/competitividade.
D-1Dados do dia anterior. Transações devem ser enviadas com frequência D-1 (ontem).
JWTJSON Web Token — token de autenticação com validade de 1 hora. Use o refresh_token para renovar.

⚙️ Rate Limits e Boas Práticas

Nossa infraestrutura é escalável, mas aplicamos limites de requisição para garantir a disponibilidade a todos os parceiros.

Limites por Endpoint

  • Auth & Consulta: 50 reqs / segundo por IP.
  • Ingestão em Massa: 10 reqs / segundo (mas permitem payloads maiores).

Estratégia Retry (Backoff)

Em caso de status HTTP 429 ou 5xx, use Exponential Backoff. Aguarde 1s, tente, se falhar aguarde 2s, depois 4s, etc.

Lotes de Ingestão

Não envie 1 requisição POST por produto. Agrupe sua ingestão em arrays de 500 a 1000 itens por request para maior throughput.

🎨 Melhores Práticas de UX no ERP

O valor da IA se traduz na ponta (o usuário do ERP). Como desenhar sua tela de reprecificação:

✅ Faça
  • Mostre lado a lado o Preço Atual e o Preço Sugerido (Proffer).
  • Destaque a variação percentual (%) com cor (verde se subir margem, cinza/laranja se cair).
  • Exiba claramente a "Zonapreco" ou "Loja" a que o preço se aplica. Opcionalmente, um botão "Aplicar em Massa".
❌ Evite
  • Atualizar preços via banco direto sem avisar o usuário se ele tiver processos manuais de checagem.
  • Mostrar códigos EAN/Internos sem associar à "Descrição do Produto". O humano compra por nome + embalagem.
🎮 Experimentar no Playground →