Documentação da API VenturePay
Integre pagamentos PIX de forma simples e segura. Nossa API RESTful permite criar cobranças, gerenciar transações e receber notificações em tempo real.
Introdução
A API VenturePay permite que você integre facilmente pagamentos PIX em sua aplicação. Com endpoints simples e seguros, você pode criar cobranças, consultar status de pagamentos e receber notificações em tempo real através de webhooks.
🚀 Principais Recursos
- Pagamentos PIX instantâneos
- QR Code gerado automaticamente
- Webhooks para notificações
- Dashboard com métricas
💡 Casos de Uso
- E-commerce
- Assinaturas recorrentes
- Marketplaces
- Aplicativos mobile
URL Base
Todas as requisições para a API VenturePay devem ser feitas para a seguinte URL base:
https://api.venturepay.com.br/v1/
Ambiente de Testes (Sandbox)
Para testes, utilize tokens com prefixo vp_test_.
As transações em sandbox não movimentam dinheiro real.
Rate Limits
A API possui limites de requisições para garantir a estabilidade do serviço:
| Tipo de Token | Limite Padrão | Janela de Tempo | Header de Resposta |
|---|---|---|---|
| Sandbox | 100 requisições | 1 hora | X-RateLimit-Remaining |
| Produção | 1.000 requisições | 1 hora | X-RateLimit-Reset |
⚠️ Limite Excedido
Quando o limite é excedido, a API retorna status 429 Too Many Requests
Autenticação
Chaves de API
A autenticação é feita através de duas chaves:
🔑 Public Key
Chave pública que identifica sua conta. Deve ser incluída no corpo da requisição.
vp_prod_ce2d9ce1f7c213eaade842738a4e4
🔐 Secret Key
Chave secreta usada para gerar a assinatura. Mantenha em segurança e nunca exponha no frontend.
1de97abb11146a6c5aa3f84f811da866c211720cadb58ccca41398c6ddf4bcd8
Assinatura (venture-signature)
Toda requisição deve incluir o header venture-signature com o secret token
// PHP
$request_body = json_encode([
'public_key' => 'vp_prod_ce2d9ce1f7c213eaade842738a4e4',
'customer' => [
'name' => 'Maria Silva Santos',
'cpf' => '12345678910',
'email' => 'cliente@exemplo.com',
'phone' => '5511987654321'
],
'value' => 100,
'send_email' => true
]);
$secret_key = '1de97abb11146a6c5aa3f84f811da866c211720cadb58ccca41398c6ddf4bcd8';
// Header: venture-signature: 1de97abb11146a6c5aa3f84f811da866c211720cadb58ccca41398c6ddf4bcd8
Importante - Segurança
- • A assinatura deve ser calculada com o corpo exato da requisição (JSON)
- • Use a secret key correspondente à public key enviada
- • Mantenha a secret key segura no backend
- • Requisições sem assinatura válida serão rejeitadas
Ambientes
🧪 Sandbox (Testes)
- Prefixo:
vp_test_ - Sem movimentação real
- PIX simulado
- Rate limit: 100/hora
🚀 Produção
- Prefixo:
vp_prod_ - Transações reais
- PIX instantâneo
- Rate limit: 1.000/hora
Endpoints
Criar Cobrança PIX
/orders/charge/
Cria uma nova cobrança PIX com QR Code gerado automaticamente.
📤 Requisição
Headers
| Header | Valor | Obrigatório |
|---|---|---|
Content-Type |
application/json | Sim |
venture-signature |
SECRET TOKEN | Sim |
Body (JSON)
{
"public_key": "vp_prod_ce2d9ce1f7c213eaade842738a4e4",
"customer": {
"name": "Maria Silva Santos",
"cpf": "12345678910",
"email": "user@venturepay.com.br",
"phone": "5511987654321"
},
"value": 100,
"send_email": true
}
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
public_key |
string | Sim | Sua chave pública de API |
customer.name |
string | Sim | Nome completo do cliente |
customer.cpf |
string | Sim | CPF do cliente (apenas números) |
customer.email |
string | Sim | Email do cliente |
customer.phone |
string | Sim | Telefone do cliente (com DDD) |
value |
number | Sim | Valor da cobrança em centavos |
send_email |
boolean | Não | Enviar email com QR Code para o cliente |
📥 Resposta
{
"success": true,
"data": {
"transaction_id": "VEN97F8E4D3",
"amount": "100",
"net_amount": 94,
"fee": 6,
"pix_code": "00020101021226820014br.gov.bcb.pix...",
"qr_code_url": "https://api.qrserver.com/v1/create-qr-code/...",
"expires_at": "2025-06-24T01:40:53Z",
"customer": {
"name": "Maria Silva Santos",
"document": "12345678910",
"email": "user@venturepay.com.br",
"phone": "5511987654321"
},
"status": "pending"
}
}
| Campo | Tipo | Descrição |
|---|---|---|
transaction_id |
string | ID único da transação |
amount |
string | Valor original da cobrança |
net_amount |
number | Valor líquido que você receberá |
fee |
number | Taxa cobrada pela transação |
pix_code |
string | Código PIX para pagamento |
qr_code_url |
string | URL da imagem do QR Code |
expires_at |
string | Data de expiração (ISO 8601) |
status |
string | Status: pending, paid, cancelled, expired |
📊 Códigos de Status
200
Cobrança criada com sucesso
400
Dados inválidos
401
Assinatura inválida
429
Rate limit excedido
Criar Link de Pagamento
/orders/charge/payment-link/
Cria um link de pagamento completo com suporte a cartão de crédito, PIX, parcelamento e configurações personalizadas.
Parâmetros accept: Se accept_credit e accept_pix não forem enviados, serão tratados como true. O pix_discount é opcional e tem valor padrão 0.
📤 Requisição
Headers
| Header | Valor | Obrigatório |
|---|---|---|
Content-Type |
application/json | Sim |
venture-signature |
1de97abb11146a6c5aa3f84f811da866c211720cadb58ccca41398c6ddf4bcd | Sim |
Body (JSON)
{
"public_key": "vp_prod_ce2d9ce1f7c213eaade842738a4e4",
"custom_name": "Premium Course",
"description": "Access to premium online course",
"amount": 30,
"customer_email": "John@gmail.com",
"customer_name": "John Doe",
"webhook_url": "https://old-piano-01.webhook.cool",
"max_installments": 6,
"expiration_date": "2025-08-30T23:59:59Z",
"accept_credit": true,
"accept_pix": true,
"pix_discount": 5.0,
"fee_payer": "customer",
"send_email": true,
"logo_url": "https://logourl.com/logo.png",
"redirect_url": "https://meusite.com/obrigado"
}
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
public_key |
string | Sim | Sua chave pública de API |
custom_name |
string | Sim | Nome customizado do produto/serviço |
description |
string | Sim | Descrição detalhada do produto/serviço |
amount |
number | Sim | Valor em reais (ex: 30 = R$ 30,00) |
customer_email |
string | Sim | Email do cliente |
customer_name |
string | Sim | Nome completo do cliente |
webhook_url |
string | Não | URL para receber notificações de pagamento |
max_installments |
number | Não | Máximo de parcelas permitidas (1-12) |
expiration_date |
string | Não | Data de expiração (ISO 8601) |
accept_credit |
boolean | Não | Aceitar pagamento com cartão de crédito (padrão: true se não enviado) |
accept_pix |
boolean | Não | Aceitar pagamento via PIX (padrão: true se não enviado) |
pix_discount |
number | Não | Desconto percentual para pagamento PIX (opcional, padrão: 0) |
fee_payer |
string | Não | Quem paga a taxa: "customer" ou "merchant" |
send_email |
boolean | Não | Enviar email com link de pagamento |
logo_url |
string | Não | URL do logo personalizado |
redirect_url |
string | Não | URL para redirecionar o usuário quando o pagamento for aprovado |
📥 Resposta
{
"success": true,
"data": {
"link_id": "2794cfd3-d3e7-41bf-97e2-997c557d276e",
"friendly_id": "RNJ149AZ",
"payment_url": "https://venturepay.com.br/pay/?id=RNJ149AZ",
"custom_name": "Premium Course",
"description": "Access to premium online course",
"amount": 30,
"max_installments": 6,
"expiration_date": "2025-08-30 20:59:59",
"accept_credit": true,
"accept_pix": false,
"pix_discount": 5,
"fee_payer": "customer",
"no_interest_installments": false,
"logo_url": "https://venturepay.com.br/uploads/products/...",
"webhook_url": "https://old-piano-01.webhook.cool",
"webhook_secret": "ce39c8a97c30aa9f889d2a483ad00653c4000aba7b45df2f55648608f5873ebc",
"status": "active",
"customer": {
"name": "John Doe",
"email": "John@gmail.com"
},
"email_sent": true,
"created_at": "2025-07-30 01:11:02",
"metadata": {
"api_version": "1.0",
"request_id": "req_68899b5692066",
"processing_time_ms": 280.46
}
},
"message": "Payment link created successfully"
}
| Campo | Tipo | Descrição |
|---|---|---|
link_id |
string | ID único do link de pagamento |
friendly_id |
string | ID amigável para URLs e referências |
payment_url |
string | URL completa da página de pagamento |
webhook_secret |
string | Chave secreta para validar webhooks (SHA256) |
status |
string | Status do link: active, expired, paid |
email_sent |
boolean | Se o email foi enviado para o cliente |
🧪 Ambiente de Testes (Sandbox)
Para testes, você pode usar o endpoint de sandbox. As mesmas credenciais podem ser utilizadas.
https://venturepay.com.br/api-sandbox/v1/payment-link/
Credenciais
Você pode usar as mesmas credenciais do ambiente de produção.
Cartões de Teste
4111 1111 1111 1111
4000 0000 0000 0002
4000 0000 0000 9995
123
Validade:
qualquer data futura
🔔 Webhook de Confirmação de Pagamento
Quando o pagamento é confirmado, enviamos um webhook para a URL configurada com o header x-venturepay-signature.
Headers do Webhook
| Header | Valor | Descrição |
|---|---|---|
x-venturepay-signature |
fee1afa1bd6cae83f0f7837566d90c20b7131eee6c0d552d1e26c2c3c470e07d | Assinatura HMAC SHA256 do webhook_secret |
Content-Type |
application/json | Tipo de conteúdo |
{
"id": "wh_51GX5GJ3Z3DOODPTXNDLYGGV",
"event": "payment_link.payment_completed",
"api_version": "1.0",
"created_at": "2025-07-30T01:10:02-03:00",
"data": {
"object": "payment_link_payment",
"payment_link": {
"id": 104,
"friendly_id": "0Q3VPO1I",
"custom_name": "Premium Course",
"description": "Access to premium online course",
"amount": 30,
"status": "paid",
"payment_url": "https://venturepay.com.br/pay/?id=0Q3VPO1I",
"created_at": "2025-07-30T01:08:01-03:00",
"expires_at": "2025-08-30T20:59:59-03:00",
"paid_at": "2025-07-30T01:10:02-03:00"
},
"payment": {
"id": "pay_51GX5GJ3Z3DOODPTXNDLYGGV",
"transaction_id": "cb822d24-c5d5-4449-8bca-9963d3ac310f",
"gateway_id": "or_gbEWZE9iLtr80Zax",
"status": "paid",
"amount": 31.91,
"net_amount": 30,
"fee_amount": 0,
"currency": "BRL",
"payment_method": "credit_card",
"paid_at": "2025-07-30T01:10:02-03:00",
"credit_card": {
"brand": "Visa",
"installments": 1,
"masked_number": "477587****1106",
"authorization_code": "0034EG",
"acquirer_tid": "4040072294",
"acquirer_nsu": "4040072294"
}
},
"customer": {
"name": "vitor hugo",
"email": "John@gmail.com",
"document": "11111111111"
},
"company": {
"id": "comp_88b3fd10-4c95-11f0-8ec2-4e191bcb11b5",
"name": "VENTUREPAY PAGAMENTOS",
"document": "53768953000161"
}
}
}
📊 Códigos de Status HTTP
200
Link criado com sucesso
400
Dados inválidos
401
Não autenticado
403
Sem permissão
405
Método HTTP incorreto
413
Payload muito grande
429
Rate limit excedido
500
Erro do servidor
Criar Boleto Bancário
/orders/charge/boleto/
Cria um boleto bancário com código de barras, linha digitável e PDF para download. Permite configurar vencimento, juros e multa.
📤 Requisição
Headers
| Header | Valor | Obrigatório |
|---|---|---|
Content-Type |
application/json | Sim |
venture-signature |
SECRET TOKEN | Sim |
Body (JSON)
{
"public_key": "vp_prod_91705fa6f83f2a5aef33ebc4a7fcd814",
"customer": {
"name": "Vitor Silva Santos",
"document": "99999999965",
"email": "email@provedor.com",
"phone": "5511999887766",
"address": {
"street": "Rua das Flores",
"number": "123",
"complement": "Apt 45",
"district": "Centro",
"city": "São Paulo",
"state": "SP",
"cep": "04689070"
}
},
"value": 1000,
"due_date": "2025-12-25",
"description": "Produto digital premium",
"instructions": "Pagar preferencialmente via PIX. Após vencimento haverá juros e multa.",
"interest_rate": "1.50",
"fine_amount": 300
}
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
public_key |
string | Sim | Sua chave pública de API |
customer.name |
string | Sim | Nome completo do cliente |
customer.document |
string | Sim | CPF ou CNPJ do cliente (apenas números) |
customer.email |
string | Sim | Email do cliente |
customer.phone |
string | Sim | Telefone do cliente (com DDD) |
customer.address |
object | Sim | Endereço completo do cliente |
customer.address.street |
string | Sim | Nome da rua |
customer.address.number |
string | Sim | Número do endereço |
customer.address.complement |
string | Não | Complemento (apartamento, bloco, etc.) |
customer.address.district |
string | Sim | Bairro |
customer.address.city |
string | Sim | Cidade |
customer.address.state |
string | Sim | Estado (sigla: SP, RJ, etc.) |
customer.address.cep |
string | Sim | CEP (apenas números) |
value |
number | Sim | Valor do boleto em centavos (ex: 1000 = R$ 10,00) |
due_date |
string | Sim | Data de vencimento (YYYY-MM-DD) |
description |
string | Não | Descrição do produto/serviço |
instructions |
string | Não | Instruções de pagamento |
interest_rate |
string | Não | Taxa de juros mensal (ex: "1.50" = 1,5%) |
fine_amount |
number | Não | Valor da multa em centavos |
📥 Resposta
{
"success": true,
"data": {
"transaction_id": "VEN2689FA5D",
"boleto_id": "855fee97-8d1a-4661-9c1c-7c9a49e880b0",
"amount": 1000,
"net_amount": 930,
"fee": 70,
"barcode": "https://api.venturepay.com/core/v5/transactions/tran_BWkPXq6TR6fA4KvQ/barcode",
"digitable_line": "10491.10339 88000.100045 15740.747298 2 13060000001000",
"boleto_url": "https://api.venturepay.com/1/boletos/live_cmermf3vh6cf90lm5lqkpa2h3",
"due_date": "2025-12-25",
"customer": {
"name": "Vitor Silva Santos",
"document": "99999999965",
"email": "email@provedor.com",
"phone": "5511999887766"
},
"status": "pending"
}
}
| Campo | Tipo | Descrição |
|---|---|---|
transaction_id |
string | ID único da transação |
boleto_id |
string | ID único do boleto |
amount |
number | Valor original do boleto em centavos |
net_amount |
number | Valor líquido que você receberá |
fee |
number | Taxa cobrada pela transação |
barcode |
string | URL da imagem do código de barras |
digitable_line |
string | Linha digitável do boleto |
boleto_url |
string | URL do PDF do boleto |
due_date |
string | Data de vencimento |
status |
string | Status: pending, paid, cancelled, expired |
📊 Códigos de Status
200
Boleto criado com sucesso
400
Dados inválidos
401
Assinatura inválida
429
Rate limit excedido
🔔 Webhook de Confirmação de Pagamento
Quando o boleto é pago, enviamos um webhook para a URL configurada com as informações da transação.
Headers do Webhook
| Header | Valor | Descrição |
|---|---|---|
venture-signature |
SECRET_TOKEN | Assinatura HMAC SHA256 do secret token |
Content-Type |
application/json | Tipo de conteúdo |
{
"success": true,
"data": {
"transaction_id": "VEN2689FA5D",
"boleto_id": "855fee97-8d1a-4661-9c1c-7c9a49e880b0",
"amount": 1000,
"net_amount": 930,
"fee": 70,
"barcode": "https://api.venturepay.com/core/v5/transactions/tran_BWkPXq6TR6fA4KvQ/barcode",
"digitable_line": "10491.10339 88000.100045 15740.747298 2 13060000001000",
"boleto_url": "https://api.venturepay.com/1/boletos/live_cmermf3vh6cf90lm5lqkpa2h3",
"due_date": "2025-12-25",
"customer": {
"name": "Vitor Silva Santos",
"document": "99999999965",
"email": "email@provedor.com",
"phone": "5511999887766"
},
"status": "paid"
}
}
| Campo | Tipo | Descrição |
|---|---|---|
success |
boolean | Indica se a operação foi bem-sucedida |
data.transaction_id |
string | ID único da transação |
data.boleto_id |
string | ID único do boleto |
data.amount |
number | Valor original do boleto em centavos |
data.status |
string | Status do pagamento: "paid" quando confirmado |
✅ Integração Recomendada
- • Sempre valide a assinatura HMAC antes de processar
- • Implemente lógica idempotente para evitar processamento duplicado
- • Verifique se o status é "paid" antes de liberar o produto/serviço
- • Responda com status 200 para confirmar recebimento
Criar Pagamento com Cartão
/orders/charge/card/
Processa pagamentos com cartão de crédito com suporte a parcelamento e autenticação 3DS. Não envia webhooks - resposta é síncrona.
📤 Requisição
Headers
| Header | Valor | Obrigatório |
|---|---|---|
Content-Type |
application/json | Sim |
venture-signature |
SECRET TOKEN | Sim |
Body (JSON) - Pagamento Simples
{
"public_key": "vp_prod_33ba99c7a95b9ea57e1c1d9f4490f469",
"customer": {
"name": "João Silva Santos",
"document": "12345678901",
"email": "joao@exemplo.com",
"phone": "5511999887766",
"address": {
"street": "Rua das Flores",
"number": "123",
"complement": "Apt 45",
"district": "Centro",
"city": "São Paulo",
"state": "SP",
"cep": "01234567"
}
},
"card": {
"number": "4111111111111111",
"holder_name": "JOAO SILVA SANTOS",
"exp_month": 12,
"exp_year": 2028,
"cvv": "123"
},
"value": 2500,
"installments": 12,
"description": "Produto digital premium"
}
Body (JSON) - Com Autenticação 3DS
{
"public_key": "vp_prod_91705fa6f83f2a5aef33ebc4a7fcd814",
"customer": {
"name": "João Silva Santos",
"document": "11698939965",
"email": "joao@email.com",
"phone": "5511999887766",
"address": {
"street": "Rua das Flores",
"number": "123",
"complement": "Apt 45",
"district": "Centro",
"city": "São Paulo",
"state": "SP",
"cep": "01234567"
}
},
"card": {
"number": "4111111111111111",
"holder_name": "JOAO SILVA SANTOS",
"exp_month": 12,
"exp_year": 2028,
"cvv": "123"
},
"value": 10000,
"installments": 3,
"description": "Produto digital premium",
"threeds_data": {
"cavv": "AAABCZIhcQAAAABZlyFxAAAAAAA=",
"xid": "MDAwMDAwMDAwMDAwMDAwMzIyNzY=",
"eci": "05",
"version": "2",
"referenceId": "3ac7caa7-aa42-2663-791b-2ac05a542c4a",
"card_brand": "visa"
}
}
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
public_key |
string | Sim | Sua chave pública de API |
customer |
object | Sim | Dados completos do cliente (igual ao boleto) |
card.number |
string | Sim | Número do cartão (sem espaços) |
card.holder_name |
string | Sim | Nome do portador (como no cartão) |
card.exp_month |
number | Sim | Mês de validade (1-12) |
card.exp_year |
number | Sim | Ano de validade (4 dígitos) |
card.cvv |
string | Sim | Código de segurança (3-4 dígitos) |
value |
number | Sim | Valor em centavos (ex: 2500 = R$ 25,00) |
installments |
number | Sim | Número de parcelas (1-12) |
description |
string | Não | Descrição da compra |
threeds_data |
object | Não | Dados de autenticação 3DS/VBV |
⚠️ Segurança e 3DS
- • Use sempre HTTPS e seja PCI DSS compliant
- • Para transações sem VBV/3DS é necessária autorização prévia
- • Bandeiras como Visa/Mastercard podem exigir 3DS obrigatório
- • Resposta é síncrona - não há webhook
📥 Exemplos de Resposta
✅ Pagamento Aprovado
{
"success": true,
"data": {
"transaction_id": "VEN240D45E8",
"external_id": "CARD_68ADE96E8F3F1",
"amount": 2500,
"amount_charged": 2500,
"net_amount": 1212,
"fee": 588,
"fixed_fee": 200,
"reserve_amount": 500,
"total_venture_amount": 1288,
"installments": 12,
"status": "approved",
"payment_status": "paid",
"reason_message": "Transação aprovada com sucesso",
"authorization_code": null,
"acquirer_tid": "4074927556",
"acquirer_nsu": "4074927556",
"masked_card": null,
"card_brand": "Elo",
"customer": {
"name": "João Silva Santos",
"document": "12345678901",
"email": "joao@exemplo.com",
"phone": "5511999887766"
},
"is_fraud": false,
"antifraud_score": "very_low",
"created_at": "2025-08-26 14:05:59"
}
}
❌ Cartão Recusado
{
"success": true,
"data": {
"transaction_id": "VENA20813D5",
"external_id": "CARD_68ADE00D6CD1D",
"amount": 1000,
"amount_charged": 1099,
"net_amount": 822,
"fee": 57,
"reserve_amount": 220,
"total_venture_amount": 277,
"installments": 3,
"status": "failed",
"payment_status": "failed",
"reason_message": "Pagamento reprovado oriente a contator o banco/emissor",
"authorization_code": null,
"acquirer_tid": "4074879295",
"acquirer_nsu": "4074879295",
"masked_card": null,
"card_brand": "Visa",
"customer": {
"name": "João Silva Santos",
"document": "12345678901",
"email": "joao@exemplo.com",
"phone": "5511999887766"
},
"is_fraud": false,
"antifraud_score": null,
"created_at": "2025-08-26 13:25:56"
}
}
🛡️ Suspeita de Fraude
{
"success": true,
"data": {
"transaction_id": "VENA20813D5",
"external_id": "CARD_68ADE00D6CD1D",
"amount": 1000,
"amount_charged": 1099,
"net_amount": 822,
"fee": 57,
"reserve_amount": 220,
"total_venture_amount": 277,
"installments": 3,
"status": "fraud",
"payment_status": "failed",
"reason_message": "Pagamento aprovado pelo banco emissor",
"authorization_code": null,
"acquirer_tid": "4074879295",
"acquirer_nsu": "4074879295",
"masked_card": null,
"card_brand": "Visa",
"customer": {
"name": "João Silva Santos",
"document": "12345678901",
"email": "joao@exemplo.com",
"phone": "5511999887766"
},
"is_fraud": true,
"antifraud_score": "moderated",
"created_at": "2025-08-26 13:25:56"
}
}
| Campo | Tipo | Descrição |
|---|---|---|
transaction_id |
string | ID único da transação |
external_id |
string | ID externo da transação |
amount |
number | Valor original em centavos |
amount_charged |
number | Valor cobrado (com juros se parcelado) |
net_amount |
number | Valor líquido que você receberá |
status |
string | Status: approved, failed, fraud |
payment_status |
string | Status do pagamento: paid, failed |
card_brand |
string | Bandeira do cartão |
is_fraud |
boolean | Indica suspeita de fraude |
antifraud_score |
string | Score antifraude: very_low, low, moderate, high |
reserve_amount |
number | Valor da reserva em centavos |
total_venture_amount |
number | Total retido pela Venture |
acquirer_tid |
string | TID da adquirente |
acquirer_nsu |
string | NSU da adquirente |
📊 Códigos de Status
200
Processamento concluído
400
Dados do cartão inválidos
401
Assinatura inválida
429
Rate limit excedido
Consultar Cobrança
/orders/?public_key={public_key}&transaction_id={transaction_id}
Consulta o status atual de uma cobrança específica.
curl -X GET 'https://api.venturepay.com.br/v1/orders/?public_key={public_key}&transaction_id=VEN97F8E4D3' \
-H 'venture-signature: secret_token'
Consultar Saldo
/balance/
Consulta o saldo atual da sua conta VenturePay.
{
"success": true,
"data": {
"available_balance": 1234.56,
"pending_balance": 567.89,
"total_balance": 1802.45,
"currency": "BRL"
}
}
Webhooks
Configuração de Webhooks
Webhooks permitem que você receba notificações automáticas quando eventos ocorrem em suas transações. Configure URLs para receber dados em tempo real.
📡 Como Funciona
- 1Configure uma URL de webhook na sua conta
- 2Quando um evento ocorre, enviamos um POST para sua URL
- 3Seu sistema responde com status 200 para confirmar recebimento
- 4Se não recebermos confirmação, tentamos novamente
Eventos Disponíveis
payment_paid
Enviado quando um pagamento é aprovado e o valor é creditado na sua conta.
payment_created
Enviado quando uma nova cobrança PIX é criada e está aguardando pagamento.
payment_cancelled
Enviado quando um pagamento é cancelado antes de ser processado.
payment_expired
Enviado quando um pagamento expira sem ser processado (após 24 horas).
📦 Estrutura do Payload
{
"success": true,
"data": {
"transaction_id": "VEN9C6FA1E7",
"amount": "100.00",
"net_amount": 94.00,
"fee": 6.00,
"pix_code": "00020101021226820014br.gov.bcb.pix...",
"qr_code_url": "https://api.venturepay.com.br/qrcode/...",
"expires_at": "2025-06-23T23:49:11Z",
"customer": {
"name": "Maria Silva Santos",
"document": "12345678910",
"email": "cliente@exemplo.com",
"phone": "5511987654321"
},
"status": "paid"
},
"event_type": "payment_paid",
"webhook_id": 123,
"timestamp": 1640995200
}
Segurança dos Webhooks
Para garantir que os webhooks são legítimos, validamos cada requisição com assinatura no header X-VenturePay-Signature.
🔐 Headers de Segurança
| Header | Descrição | Exemplo |
|---|---|---|
X-VenturePay-Signature |
Assinatura HMAC SHA256 | sha256=abc123... |
X-VenturePay-Event |
Tipo do evento | payment_paid |
X-VenturePay-Webhook-Id |
ID do webhook | 123 |
X-VenturePay-Timestamp |
Timestamp Unix | 1640995200 |
// PHP - Validação de webhook
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_VENTUREPAY_SIGNATURE'];
$webhook_secret = 'seu-token-de-validacao-aqui';
$expected = 'sha256=' . hash_hmac('sha256', $payload, $webhook_secret);
if (hash_equals($expected, $signature)) {
// Webhook válido - processar dados
$data = json_decode($payload, true);
if ($data['event_type'] === 'payment_paid') {
// Pagamento foi aprovado
$transaction_id = $data['data']['transaction_id'];
// Atualizar status na sua base de dados
}
} else {
// Webhook inválido - rejeitar
http_response_code(401);
exit('Unauthorized');
}
⚠️ Importante sobre Segurança
- • Sempre valide a assinatura HMAC antes de processar
- • Use o token de API como secret key para validação
- • Implemente idempotência para evitar processamento duplicado
- • Configure HTTPS para receber webhooks
- • Responda com status 200 para confirmar recebimento
Tratamento de Erros
Nossa API retorna códigos de status HTTP padronizados e mensagens de erro estruturadas:
Estrutura de Erro
{
"success": false,
"error": {
"code": "INVALID_SIGNATURE",
"message": "Assinatura HMAC inválida",
"details": "Verifique se a secret key está correta e se o body está sendo assinado corretamente"
}
}
Códigos de Status HTTP
200 OK
Requisição processada com sucesso
400 Bad Request
Dados inválidos ou faltando campos obrigatórios
401 Unauthorized
Assinatura HMAC inválida ou token inexistente
404 Not Found
Recurso não encontrado (ex: transaction_id inválido)
429 Too Many Requests
Rate limit excedido
500 Internal Server Error
Erro interno do servidor
Códigos de Erro Comuns
INVALID_SIGNATURE
Assinatura HMAC inválida
MISSING_FIELD
Campo obrigatório não enviado
INVALID_CPF
CPF inválido ou malformado
INVALID_EMAIL
Email inválido
AMOUNT_TOO_LOW
Valor mínimo é R$ 1,00
TRANSACTION_NOT_FOUND
ID de transação não encontrado
💡 Dicas para Depuração
-
Sempre verifique o campo
error.codepara identificar o tipo de erro -
Use
error.detailspara informações específicas sobre como corrigir - Implemente retry exponencial para erros 5xx (temporários)
- Não implemente retry para erros 4xx (problemas na requisição)
Exemplos de Código
PHP
publicKey = $publicKey;
$this->secretKey = $secretKey;
}
public function createCharge($data) {
$data['public_key'] = $this->publicKey;
$body = json_encode($data);
$signature = hash_hmac('sha256', $body, $this->secretKey);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->baseUrl . 'orders/charge/');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'venture-signature: ' . $signature
]);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
}
// Uso
$api = new VenturePayAPI(
'vp_prod_ce2d9ce1f7c213eaade842738a4e4',
'1de97abb11146a6c5aa3f84f811da866c211720cadb58ccca41398c6ddf4bcd8'
);
$charge = $api->createCharge([
'customer' => [
'name' => 'Maria Silva Santos',
'cpf' => '12345678910',
'email' => 'cliente@exemplo.com',
'phone' => '5511987654321'
],
'value' => 100,
'send_email' => true
]);
echo json_encode($charge, JSON_PRETTY_PRINT);
?>
JavaScript (Node.js)
const crypto = require('crypto');
const axios = require('axios');
class VenturePayAPI {
constructor(publicKey, secretKey) {
this.publicKey = publicKey;
this.secretKey = secretKey;
this.baseUrl = 'https://api.venturepay.com.br/v1/';
}
async createCharge(data) {
data.public_key = this.publicKey;
const body = JSON.stringify(data);
const signature = crypto
.createHmac('sha256', this.secretKey)
.update(body)
.digest('hex');
try {
const response = await axios.post(
this.baseUrl + 'orders/charge/',
body,
{
headers: {
'Content-Type': 'application/json',
'venture-signature': signature
}
}
);
return response.data;
} catch (error) {
throw new Error(error.response?.data?.error?.message || 'API Error');
}
}
}
// Uso
const api = new VenturePayAPI(
'vp_prod_ce2d9ce1f7c213eaade842738a4e4',
'1de97abb11146a6c5aa3f84f811da866c211720cadb58ccca41398c6ddf4bcd8'
);
api.createCharge({
customer: {
name: 'Maria Silva Santos',
cpf: '12345678910',
email: 'cliente@exemplo.com',
phone: '5511987654321'
},
value: 100,
send_email: true
}).then(charge => {
console.log('Cobrança criada:', charge);
}).catch(error => {
console.error('Erro:', error.message);
});
Python
import requests
import json
import hmac
import hashlib
class VenturePayAPI:
def __init__(self, public_key, secret_key):
self.public_key = public_key
self.secret_key = secret_key
self.base_url = 'https://api.venturepay.com.br/v1/'
def create_charge(self, data):
data['public_key'] = self.public_key
body = json.dumps(data, separators=(',', ':'))
signature = hmac.new(
self.secret_key.encode(),
body.encode(),
hashlib.sha256
).hexdigest()
headers = {
'Content-Type': 'application/json',
'venture-signature': signature
}
response = requests.post(
self.base_url + 'orders/charge/',
data=body,
headers=headers
)
return response.json()
# Uso
api = VenturePayAPI(
'vp_prod_ce2d9ce1f7c213eaade842738a4e4',
'1de97abb11146a6c5aa3f84f811da866c211720cadb58ccca41398c6ddf4bcd8'
)
charge = api.create_charge({
'customer': {
'name': 'Maria Silva Santos',
'cpf': '12345678910',
'email': 'cliente@exemplo.com',
'phone': '5511987654321'
},
'value': 100,
'send_email': True
})
print(json.dumps(charge, indent=2))
Suporte e Contato
Precisa de Ajuda?
Nossa equipe de desenvolvedores está sempre pronta para ajudar com sua integração.