SoftPay API da loja

Venda pela loja SoftPay em qualquer site

O site pode ter o visual que você quiser. Produtos, preços, pedido e Pix vêm da loja no SoftPay, e cada pedido cai no painel do lojista, como numa compra pela vitrine.

Prompt mestre

Cole na IA que vai montar o site, como Lovable, v0, Bolt, Cursor, ChatGPT ou Claude. Ele explica a API, o fluxo de compra e as regras da loja. Depois é só descrever o visual.

É o que vem depois de /loja/ no link da loja. O lojista pode mandar o link já preenchido, assim: sdk.softpaybr.com/?loja=nome-da-loja

prompt-mestre.md Abrir em texto
Carregando o prompt…

Do zero ao primeiro pedido

  1. O lojista liga a APINo SoftPay, em Catálogo → API: liga "Aceitar pedidos do meu site" e autoriza o endereço do site.
  2. A IA monta o siteCole o prompt mestre com o endereço da loja preenchido e descreva o visual que você quer.
  3. Teste e publiqueRode em http://localhost, faça um pedido com o nome TESTE e publique no endereço autorizado.

Rotas

Todas respondem JSON. Nos POST, envie Content-Type: application/json. Não há chave secreta nem login.

https://sdk.softpaybr.com/v1
Método e caminhoO que faz
GET /lojas/{loja}Nome, cores, contato, entrega, formas de pagamento, promoção e pixels.
GET /lojas/{loja}/filtrosCategorias, tamanhos, cores e total de produtos.
GET /lojas/{loja}/produtosLista paginada. Filtros: busca, categoria, secao, tamanho, cor, sem_tamanho=true, limite (até 48) e pagina.
GET /lojas/{loja}/produtos/{id}Um produto, com a galeria de fotos.
GET /lojas/{loja}/saboresSabores que combinam no meio a meio.
POST /lojas/{loja}/cupons/validarConfere um cupom para um subtotal.
POST /lojas/{loja}/pedidosCria o pedido e devolve o total calculado pela loja.
POST /lojas/{loja}/pedidos/{id}/pixGera o Pix copia e cola do pedido.
POST /lojas/{loja}/pedidos/{id}/pagamentoCorpo { "chave" }. Status: pendente, pago ou cancelado.
POST /lojas/{loja}/visitasConta visitas do site para o lojista.

Pelo navegador, só sites autorizados pelo lojista usam a API daquela loja. Chamadas de servidor (PHP, Node, app) não passam por essa checagem, mas seguem todas as outras regras. Sem plano ativo, a API da loja para em todo lugar.

Mostrar os produtos

curl "https://sdk.softpaybr.com/v1/lojas/nero-forno/produtos?categoria=Pizzas&limite=24"
{
  "produtos": [
    {
      "id": "3f1c…",
      "nome": "Calabresa",
      "preco": 45,
      "imagem": "https://…",
      "variacoes": [{ "id": "g", "nome": "G", "tamanho": "G", "preco": 59, "estoque": null }],
      "adicionais": [{ "id": "borda", "nome": "Borda de catupiry", "preco": 9 }],
      "aceitaMeioAMeio": true
    }
  ],
  "pagina": 1,
  "limite": 24
}

Variação sem preco usa o preço do produto. estoque vem null quando a loja não mostra estoque.

Criar o pedido

POST https://sdk.softpaybr.com/v1/lojas/nero-forno/pedidos
Content-Type: application/json

{
  "chave": "2b0f1d9e-6c1a-4f7e-9b1e-5d7a8c3e4f21",
  "cliente": { "nome": "Ana", "telefone": "11988887777", "cpf": "12345678909" },
  "entrega": {
    "tipo": "entrega",
    "bairro": "Centro",
    "endereco": { "rua": "Rua A", "numero": "10", "complemento": "ap 2" }
  },
  "pagamento": "pix",
  "cupom": "PROMO10",
  "observacao": "Sem cebola",
  "itens": [
    { "produtoId": "3f1c…", "variacaoId": "g", "quantidade": 1, "adicionais": ["borda"], "sabores": ["8a2d…"] }
  ]
}
201 Created
{ "id": "c0de…", "chave": "2b0f1d9e-…", "total": 64, "subtotal": 59, "taxaDeEntrega": 5, "duplicado": false, "itensPulados": [] }
  • pagamento: pix, dinheiro, cartao (maquininha na entrega ou retirada) ou outro, só entre as formas que a loja aceita.
  • Gere uma chave (UUID) por pedido e guarde. Se a conexão cair, envie de novo com a mesma chave: a loja devolve o pedido já criado, sem duplicar. A chave também autoriza o Pix e a consulta de pagamento.
  • O servidor recalcula preço, adicionais, meio a meio, promoção, frete e cupom. O total da resposta é o que o cliente paga.
  • O site segue a configuração do catálogo da loja: formas de pagamento, entrega ou retirada, pedido mínimo, bairros atendidos, horário e tamanhos pausados.

Cobrar no Pix

Quando pagamento.pixAutomatico vem true nos dados da loja, o Pix é confirmado sozinho:

POST /lojas/nero-forno/pedidos/{id}/pix        { "chave": "2b0f1d9e-…" }
→ { "jaPago": false, "copiaECola": "000201…", "segundosRestantes": 598, "valor": 64 }

POST /lojas/nero-forno/pedidos/{id}/pagamento  { "chave": "2b0f1d9e-…" }
→ { "status": "pendente" }   …   { "status": "pago" }

Desenhe o QR Code no navegador a partir do copiaECola e consulte o status a cada 3 segundos. Sem Pix automático, mostre pagamento.chavePix ou combine com a loja.

Atalho em JavaScript

<script src="https://sdk.softpaybr.com/v1.js"></script>
<script type="module">
  const loja = SoftPayLoja.conectar('nero-forno');

  const produtos = await loja.produtos({ categoria: 'Pizzas' });
  const pedido = await loja.criarPedido({ cliente, entrega, pagamento: 'pix', itens });
  const pix = await loja.gerarPix(pedido);
  await SoftPayLoja.desenharQrCode('#qr', pix.copiaECola);
  loja.acompanharPagamento(pedido, { aoPagar: () => mostrarConfirmacao() });
</script>

O SDK gera a chave, reenvia com segurança e acompanha o Pix. SoftPayLoja.precoDoItem(produto, escolha, info) mostra o preço antes do pedido, pela mesma regra da loja.

Erros

Todo erro vem como { "erro": { "codigo": "…", "mensagem": "…" } }. A mensagem já está em português, pronta para o cliente.

HTTPCódigoQuando
403site_nao_autorizadoO navegador está num site que o lojista não autorizou.
403api_indisponivelA loja não está vendendo pelo site agora. O lojista confere em Catálogo → API.
403exige_contaA loja exige conta também no site, e a API não tem login. Confira exigeConta antes do checkout.
404loja_nao_encontradaEndereço errado ou loja fora do ar.
409sem_pix_automatico, pedido_nao_pendentePix automático indisponível ou pedido já resolvido.
422forma_indisponivel, endereco_obrigatorio, telefone_invalido, item_invalidoO pedido não segue a configuração da loja.
422pedido_recusadoA loja recusou (bairro fora da área, pedido mínimo, cupom…). Mostre a mensagem.
429muitos_pedidos, loja_ocupada_ou_fechadaMuitos pedidos seguidos ou loja fechada agora.
503indisponivel, api_em_manutencaoTente de novo em instantes.

A lista completa de códigos, com o que o site deve fazer em cada um, está no prompt mestre.

Limites

  • Até 48 produtos por página.
  • 8 pedidos e 10 cobranças Pix a cada 2 minutos por conexão, por loja.
  • 3 pedidos a cada 2 minutos por navegador e 120 pedidos por hora por loja.
  • Cartão é na maquininha, na entrega ou na retirada. Não há cobrança de cartão online.