DOCS
Dashboard Criar conta
API v1 · Base URL: https://n7pay.com.br/api/v1

Documentação da API N7 Pay

O N7 Pay é uma plataforma global de orquestração de pagamentos. Esta API REST permite criar links de pagamento, gerenciar clientes, consultar transações e receber notificações em tempo real via webhooks.

Todos os endpoints retornam JSON. Datas seguem ISO 8601 (UTC). Valores monetários são strings decimais (ex: "299.90") para evitar erros de ponto flutuante.

Gateways suportados: Asaas (PIX, boleto, cartão — BRL) e Stripe (cartão internacional — USD/EUR/BRL). O roteamento é automático via Smart Routing.

Autenticação

Toda requisição deve incluir o header Authorization com sua chave de API:

Authorization: Bearer n7_sk_sand_SuaChaveAqui
PrefixoAmbienteUso
n7_sk_sand_…SandboxTestes — nenhuma cobrança real
n7_sk_live_…LiveProdução — cobranças reais
Segurança: Nunca exponha chaves live no frontend ou em repositórios públicos. Cada chave é exibida uma única vez no momento da criação.

Token JWT temporário

Troque sua API Key por um JWT de curta duração (útil para clientes públicos):

POST/api/v1/auth/token
Retorna JWT válido por 1 hora.
curl -X POST https://n7pay.com.br/api/v1/auth/token \
  -H "Content-Type: application/json" \
  -d '{"api_key": "n7_sk_sand_SuaChaveAqui"}'

Ambiente Sandbox

O ambiente sandbox usa a infraestrutura de testes dos gateways. Nenhuma cobrança real é processada.

Como ativar: Gere uma chave com prefixo n7_sk_sand_ no seu dashboard. Todas as chamadas com essa chave são roteadas automaticamente para o sandbox dos gateways configurados.
ComportamentoSandboxLive
Cobranças reaisNãoSim
Webhooks disparadosSim (simulado)Sim (real)
Rate limit1000 req/min300 req/min
Dados isoladosSim — por contaProdução

Erros

Erros retornam JSON com campo error (código) e message (descrição legível):

{
  "error": "unauthorized",
  "message": "API key inválida ou revogada."
}
HTTPCódigoDescrição
400invalid_paramsParâmetros ausentes ou inválidos
401unauthorizedAPI key ausente, inválida ou revogada
403forbiddenChave sem permissão para o recurso
404not_foundRecurso não encontrado
409conflictConflito — ex: documento duplicado
422unprocessableDados inválidos (validação)
429rate_limit_exceededLimite de requisições atingido
500internal_errorErro interno — entre em contato

Rate Limit

Limites aplicados por chave de API. Headers de resposta indicam o estado atual:

X-RateLimit-Limit: 300
X-RateLimit-Remaining: 297
X-RateLimit-Reset: 1717852800

Links são URLs que permitem cobranças sem integração de checkout customizado. Suportam PIX, boleto, cartão (BRL/USD). Podem ter URL personalizada com o slug da empresa: https://n7pay.com.br/c/sua-empresa/pay/:slug.

GET/api/v1/payment-links
Lista links da empresa. Paginação: page, per_page. Filtros: status, currency.
POST/api/v1/payment-links
Cria um novo link de pagamento.
GET/api/v1/payment-links/:id
Retorna detalhes de um link específico.

Parâmetros — POST /payment-links

CampoTipoDescrição
titlestringobrigatórioTítulo na página de pagamento
amountdecimalobrigatórioValor — ex: "299.90"
currencystringopcionalBRL (padrão), USD ou EUR
methodsarrayopcional["pix"], ["card_1x"], ["boleto"] etc. (padrão: pix)
fee_strategystringopcional"absorb" — merchant paga · "pass_on" — cliente paga
expires_instringopcional"1h", "24h", "3d", "7d" — omitir = sem expiração
customer_idintegeropcionalID de cliente N7 para pré-preencher dados
curl -X POST https://n7pay.com.br/api/v1/payment-links \
  -H "Authorization: Bearer n7_sk_sand_SuaChaveAqui" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Plano Pro · Mensal",
    "amount": "99.90",
    "currency": "BRL",
    "methods": ["pix", "card_1x"],
    "fee_strategy": "absorb"
  }'
# Resposta 201
{
  "id": 42,
  "slug": "abc123def",
  "url": "https://n7pay.com.br/pay/abc123def",
  "branded_url": "https://n7pay.com.br/c/sua-empresa-a1b2c3/pay/abc123def",
  "title": "Plano Pro · Mensal",
  "amount": "99.90",
  "currency": "BRL",
  "status": "active",
  "methods": ["pix", "card_1x"],
  "created_at": "2026-06-08T12:00:00Z"
}

Transações

Transações são criadas automaticamente quando um pagador conclui o fluxo em um link de pagamento ou via API de cobrança direta.

GET/api/v1/transactions
Lista transações. Filtros: status, method, from, to (ISO 8601), gateway.
GET/api/v1/transactions/:id
Retorna transação com detalhes de gateway, fees e splits.

Status de transação

StatusDescrição
pendingAguardando pagamento (PIX/boleto gerado)
processingPagamento detectado, aguardando confirmação
paidConfirmado pelo gateway
failedRecusado pelo gateway
expiredExpirou sem pagamento
refundedEstornado
chargebackDisputa aberta pelo titular do cartão

Clientes

Clientes representam os pagadores da sua empresa. Ao criar um cliente, o N7 Pay sincroniza automaticamente com os gateways configurados (Asaas, Stripe), armazenando os IDs remotos para acelerar cobranças futuras e habilitar split de receita.

Campos para gateways: Asaas exige document (CPF/CNPJ) para PIX. Stripe exige email + endereço de cobrança para cartões internacionais. Sempre capture o máximo de dados para cobrir ambos os casos.
GET/api/v1/customers
Lista clientes da empresa. Filtros: document, email, country.
POST/api/v1/customers
Cria cliente e inicia sincronização com gateways em background.
GET/api/v1/customers/:id
Retorna cliente com gateway_customer_ids mapeados.
PUT/api/v1/customers/:id
Atualiza dados do cliente.

Parâmetros — POST /customers

CampoTipoDescrição
namestringobrigatórioNome completo ou razão social
emailstringopcional**Obrigatório para Stripe
phonestringopcionalCom DDI, ex: +5511999999999
document_typestringopcional"cpf", "cnpj", "vat", "ssn", "passport"
documentstringopcional**Obrigatório para PIX (CPF/CNPJ)
countrystringopcionalISO 3166 — ex: "BR", "US", "PT" (padrão: "BR")
address_line1stringopcionalLogradouro. Obrigatório para Stripe.
citystringopcionalCidade
statestringopcionalEstado / UF
zip_codestringopcionalCEP ou postal code
timezonestringopcionalIANA — ex: "America/Sao_Paulo" (padrão)
# Criar cliente (PIX + cartão internacional)
curl -X POST https://n7pay.com.br/api/v1/customers \
  -H "Authorization: Bearer n7_sk_sand_SuaChaveAqui" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "João da Silva",
    "email": "joao@exemplo.com",
    "phone": "+5511999999999",
    "document_type": "cpf",
    "document": "123.456.789-00",
    "country": "BR",
    "address_line1": "Rua das Flores, 100",
    "city": "São Paulo",
    "state": "SP",
    "zip_code": "01310-100"
  }'
# Resposta 201
{
  "id": 7,
  "name": "João da Silva",
  "email": "joao@exemplo.com",
  "country": "BR",
  "gateway_customer_ids": {
    "asaas": "cus_000123abc",
    "stripe": "cus_Nxxx1234"
  },
  "created_at": "2026-06-08T15:00:00Z"
}

Webhooks — Saída (N7 → seu servidor)

Configure endpoints HTTPS no seu dashboard para receber notificações em tempo real. O N7 Pay assina cada payload com HMAC-SHA256.

Formato do payload

{
  "event": "payment_link.paid",
  "occurred_at": "2026-06-08T15:42:00Z",
  "data": {
    "transaction_id": 142,
    "payment_link_id": 42,
    "amount": "99.90",
    "currency": "BRL",
    "method": "pix",
    "gateway": "asaas",
    "status": "paid"
  }
}

A assinatura é enviada no header X-N7-Signature:

# Verificação em Elixir
def valid_signature?(raw_body, signature, secret) do
  expected = :crypto.mac(:hmac, :sha256, secret, raw_body)
             |> Base.encode16(case: :lower)
  Plug.Crypto.secure_compare(expected, signature)
end

# Verificação em Node.js
const crypto = require("crypto");
const expected = crypto.createHmac("sha256", secret)
  .update(rawBody).digest("hex");
const valid = crypto.timingSafeEqual(
  Buffer.from(expected), Buffer.from(signature)
);

Eventos disponíveis

EventoDisparado quando
payment_link.paidPagamento confirmado pelo gateway
payment_link.expiredLink expirou sem pagamento
transaction.failedTransação recusada pelo gateway
transaction.refundedEstorno processado
transaction.chargebackDisputa aberta pelo titular do cartão
customer.createdNovo cliente criado e sincronizado
URLs de recebimento N7 Pay: Para configurar nos gateways, use as URLs abaixo. Elas ficam visíveis no painel Dashboard → API & Webhooks.
  • Asaas → https://n7pay.com.br/webhooks/asaas
  • Stripe → https://n7pay.com.br/webhooks/stripe

Webhooks Incoming — Asaas → N7

O Asaas envia notificações para https://n7pay.com.br/webhooks/asaas. Configure este URL no painel do Asaas em Configurações → Integrações → Webhook.

Eventos tratados

Evento AsaasAção no N7
PAYMENT_CONFIRMEDMarca transação como paid, dispara webhook de saída
PAYMENT_RECEIVEDMarca transação como paid
PAYMENT_OVERDUEMarca transação como expired
PAYMENT_DELETEDCancela transação
PAYMENT_REFUNDEDMarca transação como refunded
PAYMENT_CHARGEBACK_REQUESTEDAbre disputa na transação

Autenticação do webhook Asaas

Configure um token de webhook no campo Assis-Token dentro do Asaas. O N7 Pay valida o header asaas-access-token em cada requisição. O token é armazenado em company_gateway.config.webhook_token.

Webhooks Incoming — Stripe → N7

O Stripe envia notificações para https://n7pay.com.br/webhooks/stripe. Configure este URL no Stripe Dashboard → Developers → Webhooks.

Eventos tratados

Evento StripeAção no N7
payment_intent.succeededMarca transação como paid
payment_intent.payment_failedMarca transação como failed
charge.refundedMarca transação como refunded
charge.dispute.createdAbre disputa (chargeback)

Verificação de assinatura Stripe

O N7 Pay valida o header Stripe-Signature usando o webhook secret configurado em company_gateway.config.webhook_token. Nunca processe eventos sem validação de assinatura.

Smart Routing

O Smart Routing seleciona automaticamente o melhor gateway para cada transação com base em:

Prioridade por empresa: Cada empresa pode ter gateways atribuídos com prioridade customizada e override de custo. O Smart Routing respeita essas configurações por cima dos defaults globais.

Critérios de roteamento por método

MétodoGateway principalFallback
pixAsaas (melhor custo BRL)Outro gateway com suporte PIX
boletoAsaas
card_1x … card_12xAsaas (BRL) / Stripe (USD, EUR)Gateway com maior aprovação 24h
usd / wireStripe

Split de Receita

Quando uma empresa usa o Asaas com split configurado, cada cobrança enviada via N7 Pay inclui automaticamente o parâmetro splits com o walletId da empresa. A N7 retém sua comissão e o restante vai direto para a carteira da empresa.

Asaas — configuração

No console N7, ao atribuir o gateway Asaas à empresa, preencha o campo Wallet ID com o ID da sub-carteira Asaas da empresa. O split será calculado automaticamente com base no fee plan configurado.

Stripe — configuração

Para Stripe, configure a conta Connect da empresa no campo Merchant ID (no formato acct_xxx). As cobranças usarão transfer_data[destination] para roteamento direto.

Suporte Internacional

O N7 Pay suporta clientes e cobranças globais. Cada gateway tem requisitos diferentes:

Campo do clienteAsaas (PIX/Boleto)Stripe (Cartão)
nameobrigatórioobrigatório
document (CPF/CNPJ)obrigatórionão usado
emailrecomendadoobrigatório
address_line1opcionalobrigatório
countryBR implícitoobrigatório
zip_codeopcionalobrigatório
Recomendação: Sempre capture todos os campos ao registrar o cliente. O N7 Pay armazena tudo e usa apenas o que cada gateway exige, sem interromper o fluxo se campos opcionais estiverem ausentes.

Exemplos cURL

Listar links

curl https://n7pay.com.br/api/v1/payment-links \
  -H "Authorization: Bearer n7_sk_sand_SuaChaveAqui"

Criar link USD (Stripe)

curl -X POST https://n7pay.com.br/api/v1/payment-links \
  -H "Authorization: Bearer n7_sk_sand_SuaChaveAqui" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "International Plan",
    "amount": "29.00",
    "currency": "USD",
    "methods": ["card_1x"]
  }'

Consultar transação

curl https://n7pay.com.br/api/v1/transactions/142 \
  -H "Authorization: Bearer n7_sk_sand_SuaChaveAqui"

Exemplos JavaScript / TypeScript

Criar link de pagamento

const res = await fetch("https://n7pay.com.br/api/v1/payment-links", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.N7_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    title: "Plano Mensal",
    amount: "99.90",
    currency: "BRL",
    methods: ["pix"],
  }),
});
const link = await res.json();
console.log(link.url); // https://n7pay.com.br/pay/abc123

Verificar assinatura de webhook

import crypto from "node:crypto";

function verifyWebhook(rawBody: Buffer, signature: string, secret: string): boolean {
  const expected = crypto
    .createHmac("sha256", secret)
    .update(rawBody)
    .digest("hex");
  return crypto.timingSafeEqual(
    Buffer.from(expected, "hex"),
    Buffer.from(signature, "hex")
  );
}
Suporte: Dúvidas ou problemas? Entre em contato pelo dashboard ou envie e-mail para suporte@n7pay.com.br.