Integre pagamentos, saques e webhooks ao seu sistema com uma API HTTP/JSON aberta e documentada.
API 2026-10-14
Referência da API
Esta página é gerada a partir da especificação OpenAPI (30 operações), a mesma que o backend valida em testes automatizados. Versão da API: 2026-10-14.
Cobrar cartão de crédito · createCreditcardChargeBearer
Cria a cobrança e tenta autorizar na hora. Os dados do cartão passam pelo seu servidor e pelo SharkPay:
isso traz obrigações PCI DSS para quem os coleta. Nunca registre número/CVV em logs.
Requer o método "cartão" habilitado para a conta. total = amount × quantity + imposto% − desconto%.
Parâmetros
Nome
Em
Tipo
Descrição
Idempotency-Key
header
string (mín. 8, máx. 100)
Recomendado. 8–100 caracteres A-Za-z0-9_.:-.
Corpo (JSON)
Campo
Tipo
Descrição
amountobrigatório
number (≤ 999999999, > 0)
Valor unitário.
quantityobrigatório
integer (≥ 1, ≤ 100000)
discountobrigatório
number (≥ 0, ≤ 100)
Desconto em %.
taxobrigatório
number (≥ 0, ≤ 100)
Imposto em %.
invoice_noobrigatório
string (máx. 100)
due_dateobrigatório
string (date)
item_nameobrigatório
string (máx. 255)
notesopcional
string (máx. 500)
emailobrigatório
string (email)
installmentsobrigatório
integer (≥ 1, ≤ 24)
creditcard_holderobrigatório
string
creditcard_numberobrigatório
string
creditcard_cvvobrigatório
string
creditcard_monthobrigatório
integer (≥ 1, ≤ 12)
creditcard_yearobrigatório
integer
4 dígitos.
creditcard_brandobrigatório
string
Respostas
HTTP
Descrição
200
Pagamento aprovado.
400
Requisição inválida ou regra de negócio violada.
401
Token ausente/inválido/expirado, ou credenciais incorretas.
409
A mesma Idempotency-Key ainda está em processamento.
422
Campos inválidos.
500
Falha inesperada. Seguro repetir com a mesma Idempotency-Key.
Campos da resposta de sucesso
Campo
Tipo
Descrição
invoice
object
invoice.reference
string
invoice.total
string
invoice.due_date
string
invoice.status
string (PENDING, PAID, CANCELED, REFUNDED)
invoice.transaction
object
invoice.transaction.id
string
invoice.transaction.amount
string
invoice.transaction.status
integer
invoice.transaction.description
string
invoice.transaction.method
string
Exemplo · Cobrar cartão de crédito
#!/usr/bin/env bash
# Cobrar cartão de crédito
set -euo pipefail
: "${SHARKPAY_BASE_URL:?defina a URL base, ex.: https://pay.exemplo.com}"
: "${SHARKPAY_TOKEN:?obtenha o token com o exemplo "auth"}"
DUE=$(date -d "+7 days" +%F 2>/dev/null || date -v+7d +%F) # vencimento daqui a 7 dias
curl -sS --fail-with-body -X POST "$SHARKPAY_BASE_URL/api/creditcard/create" \
-H "Authorization: Bearer $SHARKPAY_TOKEN" \
-H "Idempotency-Key: ${IDEMPOTENCY_KEY:-$(uuidgen)}" \
-H "Content-Type: application/json" \
-d '{
"amount": 100,
"quantity": 1,
"discount": 0,
"tax": 0,
"installments": 3,
"invoice_no": "PED-1003",
"due_date": "'"$DUE"'",
"item_name": "Assinatura",
"email": "maria@example.com",
"creditcard_holder": "MARIA SOUZA",
"creditcard_number": "4111111111111111",
"creditcard_cvv": "123",
"creditcard_month": 12,
"creditcard_year": 2030,
"creditcard_brand": "Visa"
}'
echo
// Cobrar cartão de crédito — Node.js 18+ (fetch nativo, sem dependências)
import { randomUUID } from 'node:crypto';
const BASE = process.env.SHARKPAY_BASE_URL;
const TOKEN = process.env.SHARKPAY_TOKEN;
const dueDate = new Date(Date.now() + 7 * 864e5).toISOString().slice(0, 10); // vencimento em 7 dias
const body = {
amount: 100,
quantity: 1,
discount: 0,
tax: 0,
installments: 3,
invoice_no: "PED-1003",
due_date: dueDate,
item_name: "Assinatura",
email: "maria@example.com",
creditcard_holder: "MARIA SOUZA",
creditcard_number: "4111111111111111",
creditcard_cvv: "123",
creditcard_month: 12,
creditcard_year: 2030,
creditcard_brand: "Visa",
};
const headers = { Authorization: `Bearer ${TOKEN}` };
headers['Content-Type'] = 'application/json';
headers['Idempotency-Key'] = process.env.IDEMPOTENCY_KEY ?? randomUUID(); // reutilize a MESMA chave ao repetir a operação
const res = await fetch(`${BASE}/api/creditcard/create`, {
method: 'POST',
headers,
body: JSON.stringify(body),
signal: AbortSignal.timeout(30_000), // sempre defina um timeout
});
const data = await res.json().catch(() => ({}));
console.log(res.status, JSON.stringify(data, null, 2));
if (!res.ok) process.exit(1);
# Cobrar cartão de crédito — Python 3.9+ (pip install requests)
import os, sys, uuid
from datetime import date, timedelta
import requests
BASE = os.environ["SHARKPAY_BASE_URL"]
TOKEN = os.environ["SHARKPAY_TOKEN"]
due_date = (date.today() + timedelta(days=7)).isoformat() # vencimento em 7 dias
body = {
"amount": 100,
"quantity": 1,
"discount": 0,
"tax": 0,
"installments": 3,
"invoice_no": "PED-1003",
"due_date": due_date,
"item_name": "Assinatura",
"email": "maria@example.com",
"creditcard_holder": "MARIA SOUZA",
"creditcard_number": "4111111111111111",
"creditcard_cvv": "123",
"creditcard_month": 12,
"creditcard_year": 2030,
"creditcard_brand": "Visa",
}
headers = {"Authorization": f"Bearer {TOKEN}"}
headers["Idempotency-Key"] = os.environ.get("IDEMPOTENCY_KEY", str(uuid.uuid4())) # reutilize a MESMA chave ao repetir
res = requests.post(BASE + "/api/creditcard/create", headers=headers, json=body, timeout=30)
try:
data = res.json()
except ValueError:
data = {}
print(res.status_code, data)
sys.exit(0 if res.ok else 1)
Consultar cobrança (registro bruto) pela referência · getPixInvoiceBearer
Parâmetros
Nome
Em
Tipo
Descrição
refobrigatório
path
string
Respostas
HTTP
Descrição
200
Registro da cobrança.
401
Token ausente/inválido/expirado, ou credenciais incorretas.
404
Não encontrado (ou pertence a outra conta).
Campos da resposta de sucesso
Campo
Tipo
Descrição
invoice
object
GET
/api/pix/txid/{txid}
Consultar cobrança (registro bruto) pelo txid do Pix · getPixByTxidBearer
Parâmetros
Nome
Em
Tipo
Descrição
txidobrigatório
path
string
Respostas
HTTP
Descrição
200
Registro da cobrança.
401
Token ausente/inválido/expirado, ou credenciais incorretas.
404
Não encontrado (ou pertence a outra conta).
Campos da resposta de sucesso
Campo
Tipo
Descrição
invoice
object
Saques Pix
POST
/api/pixout/create
Solicitar saque Pix · createPixoutBearer
Reserva o saldo (valor + tarifa) de forma atômica e envia ao banco. Idempotency-Key é obrigatório.
Se o banco recusar, o valor é estornado e o saque fica CANCELED.
Parâmetros
Nome
Em
Tipo
Descrição
Idempotency-Keyobrigatório
header
string (mín. 8, máx. 100)
Corpo (JSON)
Campo
Tipo
Descrição
amountobrigatório
number (> 0)
pixkeyobrigatório
string (máx. 140)
keytypeobrigatório
string (CPF, CNPJ, EMAIL, PHONE, EVP)
clientopcional
string
documentopcional
string
emailopcional
string (email)
descriptionopcional
string (máx. 140)
Respostas
HTTP
Descrição
200
Saque registrado.
400
Requisição inválida ou regra de negócio violada.
401
Token ausente/inválido/expirado, ou credenciais incorretas.
409
A mesma Idempotency-Key ainda está em processamento.
422
Campos inválidos.
500
Falha inesperada. Seguro repetir com a mesma Idempotency-Key.
Id numérico do cliente (o nome do parâmetro mantém a grafia original da rota).
Respostas
HTTP
Descrição
200
Cliente.
400
Requisição inválida ou regra de negócio violada.
401
Token ausente/inválido/expirado, ou credenciais incorretas.
404
Não encontrado (ou pertence a outra conta).
Campos da resposta de sucesso
Campo
Tipo
Descrição
customer
object
customer.id
integer
customer.name
string
customer.document
string
customer.document_type
string
customer.zipcode
string
customer.country
object
customer.country.id
integer
customer.country.iso
string
customer.country.name
string
customer.country.nicename
string
customer.country.iso3
string | null
customer.country.numcode
integer | null
customer.country.phonecode
integer | null
customer.state
object
customer.state.name
string
customer.state.uf
string
customer.state.ibge
string | integer | null
customer.state.ddd
string | integer | null
customer.city
string
customer.district
string
customer.street
string
customer.number
string
customer.email
string
customer.phone
string
customer.mobilephone
string
GET
/api/customers
Listar/buscar clientes · listCustomersBearer
Parâmetros
Nome
Em
Tipo
Descrição
page
query
integer (≥ 1)
limit
query
integer (≥ 1, ≤ 50)
document
query
string
name
query
string
email
query
string
phone
query
string
mobilephone
query
string
Respostas
HTTP
Descrição
200
Clientes.
401
Token ausente/inválido/expirado, ou credenciais incorretas.
Campos da resposta de sucesso
Campo
Tipo
Descrição
customers
array<object>
customers[].id
integer
customers[].name
string
customers[].document
string
customers[].document_type
string
customers[].zipcode
string
customers[].country
object
customers[].country.id
integer
customers[].country.iso
string
customers[].country.name
string
customers[].country.nicename
string
customers[].country.iso3
string | null
customers[].country.numcode
integer | null
customers[].country.phonecode
integer | null
customers[].state
object
customers[].state.name
string
customers[].state.uf
string
customers[].state.ibge
string | integer | null
customers[].state.ddd
string | integer | null
customers[].city
string
customers[].district
string
customers[].street
string
customers[].number
string
customers[].email
string
customers[].phone
string
customers[].mobilephone
string
pagination
object
pagination.page
integer
pagination.limit
integer
Checkout hospedado
GET
/api/checkout/{tx_ref}
Consultar o resultado de um checkout hospedado · getCheckoutBearer
Use o tx_ref que você enviou no formulário POST /ext_transfer. Sempre confirme o pagamento por esta
consulta no seu servidor antes de liberar o pedido — o redirecionamento do cliente a callback_url não prova pagamento.
Parâmetros
Nome
Em
Tipo
Descrição
tx_refobrigatório
path
string
Respostas
HTTP
Descrição
200
Transação.
401
Token ausente/inválido/expirado, ou credenciais incorretas.
404
Não encontrado (ou pertence a outra conta).
Campos da resposta de sucesso
Campo
Tipo
Descrição
checkout
object
checkout.tx_ref
string
checkout.reference
string
checkout.status
string (PENDING, PAID, ABANDONED, UNKNOWN)
checkout.title
string
checkout.quantity
integer
checkout.amount
string
checkout.total
string
checkout.email
string
checkout.first_name
string
checkout.last_name
string
checkout.payment_type
string | null
checkout.created_at
string
Exemplo · Consultar o resultado de um checkout hospedado
#!/usr/bin/env bash
# Confirmar pagamento do checkout hospedado
set -euo pipefail
: "${SHARKPAY_BASE_URL:?defina a URL base, ex.: https://pay.exemplo.com}"
: "${SHARKPAY_TOKEN:?obtenha o token com o exemplo "auth"}"
curl -sS --fail-with-body -X GET "$SHARKPAY_BASE_URL/api/checkout/$SHARKPAY_TX_REF" \
-H "Authorization: Bearer $SHARKPAY_TOKEN"
echo
// Confirmar pagamento do checkout hospedado — Node.js 18+ (fetch nativo, sem dependências)
import { randomUUID } from 'node:crypto';
const BASE = process.env.SHARKPAY_BASE_URL;
const TOKEN = process.env.SHARKPAY_TOKEN;
const headers = { Authorization: `Bearer ${TOKEN}` };
const res = await fetch(`${BASE}/api/checkout/${process.env.SHARKPAY_TX_REF}`, {
method: 'GET',
headers,
signal: AbortSignal.timeout(30_000), // sempre defina um timeout
});
const data = await res.json().catch(() => ({}));
console.log(res.status, JSON.stringify(data, null, 2));
if (!res.ok) process.exit(1);
# Confirmar pagamento do checkout hospedado — Python 3.9+ (pip install requests)
import os, sys, uuid
import requests
BASE = os.environ["SHARKPAY_BASE_URL"]
TOKEN = os.environ["SHARKPAY_TOKEN"]
headers = {"Authorization": f"Bearer {TOKEN}"}
res = requests.get(BASE + "/api/checkout/" + os.environ["SHARKPAY_TX_REF"] + "", headers=headers, timeout=30)
try:
data = res.json()
except ValueError:
data = {}
print(res.status_code, data)
sys.exit(0 if res.ok else 1)
Token ausente/inválido/expirado, ou credenciais incorretas.
Campos da resposta de sucesso
Campo
Tipo
Descrição
webhook
object
webhook.url
string | null
webhook.secret_configured
boolean
webhook.events
array<string>
PUT
/api/webhook
Definir a URL do webhook · setWebhookBearer
A URL deve ser https, sem credenciais, porta 443/8443 e não pode resolver para IP privado/reservado.
Na primeira configuração é gerado o segredo de assinatura (whsec_...), mostrado uma única vez.
Corpo (JSON)
Campo
Tipo
Descrição
urlobrigatório
string (máx. 255, uri)
Respostas
HTTP
Descrição
200
URL salva.
401
Token ausente/inválido/expirado, ou credenciais incorretas.
422
Requisição inválida ou regra de negócio violada.
Campos da resposta de sucesso
Campo
Tipo
Descrição
webhook
object
webhook.url
string
webhook.secret
string
Somente na primeira configuração.
webhook.secret_notice
string
Exemplo · Definir a URL do webhook
#!/usr/bin/env bash
# Configurar a URL do webhook
set -euo pipefail
: "${SHARKPAY_BASE_URL:?defina a URL base, ex.: https://pay.exemplo.com}"
: "${SHARKPAY_TOKEN:?obtenha o token com o exemplo "auth"}"
curl -sS --fail-with-body -X PUT "$SHARKPAY_BASE_URL/api/webhook" \
-H "Authorization: Bearer $SHARKPAY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"url": "'"$WEBHOOK_URL"'"
}'
echo
// Configurar a URL do webhook — Node.js 18+ (fetch nativo, sem dependências)
import { randomUUID } from 'node:crypto';
const BASE = process.env.SHARKPAY_BASE_URL;
const TOKEN = process.env.SHARKPAY_TOKEN;
const body = {
url: process.env.WEBHOOK_URL,
};
const headers = { Authorization: `Bearer ${TOKEN}` };
headers['Content-Type'] = 'application/json';
const res = await fetch(`${BASE}/api/webhook`, {
method: 'PUT',
headers,
body: JSON.stringify(body),
signal: AbortSignal.timeout(30_000), // sempre defina um timeout
});
const data = await res.json().catch(() => ({}));
console.log(res.status, JSON.stringify(data, null, 2));
if (!res.ok) process.exit(1);
# Configurar a URL do webhook — Python 3.9+ (pip install requests)
import os, sys, uuid
import requests
BASE = os.environ["SHARKPAY_BASE_URL"]
TOKEN = os.environ["SHARKPAY_TOKEN"]
body = {
"url": os.environ["WEBHOOK_URL"],
}
headers = {"Authorization": f"Bearer {TOKEN}"}
res = requests.put(BASE + "/api/webhook", headers=headers, json=body, timeout=30)
try:
data = res.json()
except ValueError:
data = {}
print(res.status_code, data)
sys.exit(0 if res.ok else 1)
Gerar novo segredo de assinatura · rotateWebhookSecretBearer
O segredo anterior deixa de valer imediatamente. O novo é mostrado uma única vez.
Respostas
HTTP
Descrição
200
Novo segredo.
401
Token ausente/inválido/expirado, ou credenciais incorretas.
Campos da resposta de sucesso
Campo
Tipo
Descrição
webhook
object
webhook.secret
string
webhook.secret_notice
string
POST
/api/webhook/test
Enfileirar um evento `ping` · testWebhookBearer
Respostas
HTTP
Descrição
202
Evento na fila.
401
Token ausente/inválido/expirado, ou credenciais incorretas.
409
Requisição inválida ou regra de negócio violada.
Campos da resposta de sucesso
Campo
Tipo
Descrição
event_id
string
status
string
Exemplo · Enfileirar um evento `ping`
#!/usr/bin/env bash
# Enviar evento de teste
set -euo pipefail
: "${SHARKPAY_BASE_URL:?defina a URL base, ex.: https://pay.exemplo.com}"
: "${SHARKPAY_TOKEN:?obtenha o token com o exemplo "auth"}"
curl -sS --fail-with-body -X POST "$SHARKPAY_BASE_URL/api/webhook/test" \
-H "Authorization: Bearer $SHARKPAY_TOKEN"
echo
// Enviar evento de teste — Node.js 18+ (fetch nativo, sem dependências)
import { randomUUID } from 'node:crypto';
const BASE = process.env.SHARKPAY_BASE_URL;
const TOKEN = process.env.SHARKPAY_TOKEN;
const headers = { Authorization: `Bearer ${TOKEN}` };
const res = await fetch(`${BASE}/api/webhook/test`, {
method: 'POST',
headers,
signal: AbortSignal.timeout(30_000), // sempre defina um timeout
});
const data = await res.json().catch(() => ({}));
console.log(res.status, JSON.stringify(data, null, 2));
if (!res.ok) process.exit(1);
# Enviar evento de teste — Python 3.9+ (pip install requests)
import os, sys, uuid
import requests
BASE = os.environ["SHARKPAY_BASE_URL"]
TOKEN = os.environ["SHARKPAY_TOKEN"]
headers = {"Authorization": f"Bearer {TOKEN}"}
res = requests.post(BASE + "/api/webhook/test", headers=headers, timeout=30)
try:
data = res.json()
except ValueError:
data = {}
print(res.status_code, data)
sys.exit(0 if res.ok else 1)