Pular para o conteúdo principal

Exemplos de Uso

Esta página apresenta exemplos práticos de como interagir com a API CorpX usando cURL, na ordem lógica de uma integração típica.

Variáveis de Ambiente

Configure estas variáveis antes de executar os exemplos:

# OAuth Credentials (provided during onboarding)
export CLIENT_ID="your_client_id"
export CLIENT_SECRET="your_client_secret"

# Account identifiers
export TENANT_ID="your-tenant-uuid"
export ACCOUNT_ID="your-account-uuid"

# Environment URLs
export API_URL="https://api.corpxapi.com"
export AUTH_URL="https://auth.corpxapi.com"

1. Autenticação

O primeiro passo é obter um access token OAuth2 utilizando suas credenciais de cliente.

curl -X POST "${AUTH_URL}/oauth2/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials" \
-d "client_id=${CLIENT_ID}" \
-d "client_secret=${CLIENT_SECRET}"

Resposta de sucesso:

{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 3600
}

Armazene o token para uso nas chamadas subsequentes:

export JWT="eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."

2. Consultar Saldo

Consulte o saldo disponível e bloqueado da sua conta em tempo real.

curl -X GET "${API_URL}/v1/accounts/${ACCOUNT_ID}/balance" \
-H "Authorization: Bearer ${JWT}" \
-H "X-Tenant-Id: ${TENANT_ID}"

Resposta:

{
"accountId": "2e6b725b-84a0-400d-8740-22a5ba0f23e6",
"total": 15000.00,
"locked": 500.00,
"available": 14500.00,
"currency": "BRL",
"updatedAt": "2024-01-15T10:30:00Z",
"locks": [
{
"lockId": "lock-abc123",
"amount": 500.00,
"currency": "BRL",
"reason": "MED investigation",
"medId": "med-12345",
"status": "active",
"createdAt": "2024-01-10T14:00:00Z"
}
]
}

3. Gerar QR Code Dinâmico (Recebimento)

Gere um QR Code dinâmico para receber um pagamento PIX de um valor específico.

curl -X POST "${API_URL}/v1/accounts/${ACCOUNT_ID}/pix/qr-code/dynamic" \
-H "Authorization: Bearer ${JWT}" \
-H "X-Tenant-Id: ${TENANT_ID}" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"pixKey": "contact@mycompany.com",
"value": 150.00,
"expirationDate": "2024-12-31T23:59:59Z",
"allowChangeValue": false,
"message": "Payment for order #12345",
"identifier": "order-12345",
}'
ValorDescrição
IMAGERetorna uma imagem Base64 do QR Code
EMVRetorna apenas a string copia e cola

4. Gerar QR Code Estático

QR Codes estáticos não expiram e são ideais para exibição permanente.

curl -X POST "${API_URL}/v1/accounts/${ACCOUNT_ID}/pix/qr-code/static" \
-H "Authorization: Bearer ${JWT}" \
-H "X-Tenant-Id: ${TENANT_ID}" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"pixKey": "contact@mycompany.com",
"value": 50.00,
"message": "Donation to project XYZ",
"identifier": "doacao-xyz-001",
}'

5. Consultar Status do QR Code

Verifique se o QR Code gerado anteriormente foi pago ou ainda está pendente.

curl -X GET "${API_URL}/v1/accounts/${ACCOUNT_ID}/pix/qr-code?identifier=order-12345" \
-H "Authorization: Bearer ${JWT}" \
-H "X-Tenant-Id: ${TENANT_ID}"

6. PIX Out (Transferência via Chave)

Envie um PIX para uma chave de terceiros (transferência de saída).

Precisa enviar PIX sem chave PIX? Se você possui apenas os dados bancários do destinatário (ISPB, agência e conta), utilize o endpoint específico POST /v1/accounts/{accountId}/pix/out/bank-account. Veja o changelog v1.27.0 para detalhes.

6.1 PIX para CPF

curl -X POST "${API_URL}/v1/accounts/${ACCOUNT_ID}/pix/out" \
-H "Authorization: Bearer ${JWT}" \
-H "X-Tenant-Id: ${TENANT_ID}" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"accountId": "'${ACCOUNT_ID}'",
"amount": 150.00,
"currency": "BRL",
"keyType": "CPF",
"key": "12345678900",
"description": "Service payment",
"identifier": "order-456"
}'

6.2 PIX para Email

curl -X POST "${API_URL}/v1/accounts/${ACCOUNT_ID}/pix/out" \
-H "Authorization: Bearer ${JWT}" \
-H "X-Tenant-Id: ${TENANT_ID}" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"accountId": "'${ACCOUNT_ID}'",
"amount": 75.50,
"currency": "BRL",
"keyType": "EMAIL",
"key": "supplier@company.com",
"description": "Pagamento NF 789"
}'

6.3 PIX para Telefone

curl -X POST "${API_URL}/v1/accounts/${ACCOUNT_ID}/pix/out" \
-H "Authorization: Bearer ${JWT}" \
-H "X-Tenant-Id: ${TENANT_ID}" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"accountId": "'${ACCOUNT_ID}'",
"amount": 200.00,
"currency": "BRL",
"keyType": "PHONE",
"key": "+5511999999999",
"description": "Transfer"
}'

6.4 PIX para Chave Aleatória (EVP)

curl -X POST "${API_URL}/v1/accounts/${ACCOUNT_ID}/pix/out" \
-H "Authorization: Bearer ${JWT}" \
-H "X-Tenant-Id: ${TENANT_ID}" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"accountId": "'${ACCOUNT_ID}'",
"amount": 500.00,
"currency": "BRL",
"keyType": "EVP",
"key": "123e4567-e89b-12d3-a456-426614174000",
"description": "Pagamento de fornecedor"
}'

Valores para keyType:

ValorDescriçãoFormato
CPFCPF do destinatário11 dígitos (somente números)
CNPJCNPJ do destinatário14 dígitos (somente números)
EMAILEmail do destinatárioEmail válido
PHONETelefone do destinatário+55 + DDD + número
EVPChave aleatóriaUUID v4

Resposta de sucesso:

{
"transactionId": "txn-abc123-def456",
"status": "APPROVED",
"endToEndId": "E12345678202401151234abcdefghijkl",
"amount": 150.00,
"currency": "BRL"
}

Valores para status:

ValorDescrição
APPROVEDTransferência aprovada e concluída
PENDINGAguardando confirmação do banco
PROCESSINGEm processamento
REJECTEDRejeitada (verifique a mensagem de erro)

6.5 Consultar Status da Transferência

Consulte o status de uma transferência usando o E2E ID:

curl -X GET "${API_URL}/v1/accounts/${ACCOUNT_ID}/pix/transactions?endToEndId=E12345678202401151234abcdefghijkl" \
-H "Authorization: Bearer ${JWT}" \
-H "X-Tenant-Id: ${TENANT_ID}"

Resposta:

{
"transactionId": "txn-abc123-def456",
"endToEndId": "E12345678202401151234abcdefghijkl",
"status": "COMPLETED",
"type": "CASH_OUT",
"amount": -150.00,
"currency": "BRL",
"description": "PIX - MARIA DA SILVA",
"transactionDate": "2024-01-15T12:34:00Z",
"counterparty": {
"name": "MARIA DA SILVA",
"document": "123***01",
"bankCode": "001"
},
"balance": 14350.00
}

Parâmetros de consulta:

ParâmetroDescrição
accountIdID da conta (obrigatório)
endToEndIdID E2E da transação
identifierIdentificador da cobrança ou referência

Nota: Pelo menos um dos parâmetros endToEndId ou identifier é obrigatório.


7. Pagar QR Code (PIX Out via EMV)

Pague um QR Code PIX utilizando a string EMV (copia e cola).

7.1 Pagar QR Code Dinâmico (valor pré-definido)

curl -X POST "${API_URL}/v1/accounts/${ACCOUNT_ID}/pix/out/qr-code" \
-H "Authorization: Bearer ${JWT}" \
-H "X-Tenant-Id: ${TENANT_ID}" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"accountId": "'${ACCOUNT_ID}'",
"emv": "00020126580014br.gov.bcb.pix0136123e4567-e89b-12d3-a456-426614174000520400005303986540510.005802BR5913Loja Exemplo6008Sao Paulo62070503***6304ABCD",
"description": "Pagamento de compra online"
}'

7.2 Pagar QR Code Estático (especificando valor)

Para QR Codes estáticos sem valor definido, o campo amount é obrigatório:

curl -X POST "${API_URL}/v1/accounts/${ACCOUNT_ID}/pix/out/qr-code" \
-H "Authorization: Bearer ${JWT}" \
-H "X-Tenant-Id: ${TENANT_ID}" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"accountId": "'${ACCOUNT_ID}'",
"emv": "00020126580014br.gov.bcb.pix0136123e4567-e89b-12d3-a456-426614174000520400005303986540010.005802BR5913Loja Exemplo6008Sao Paulo62070503***6304EFGH",
"amount": 150.00,
"description": "Service payment"
}'

Resposta de sucesso:

{
"transactionId": "txn-qr-abc123",
"status": "APPROVED",
"endToEndId": "E12345678202401151234mnopqrstuvwx",
"amount": 150.00,
"currency": "BRL"
}

8. Solicitar Devolução

Devolva um PIX recebido anteriormente (total ou parcialmente).

curl -X POST "${API_URL}/v1/accounts/${ACCOUNT_ID}/pix/out/refund" \
-H "Authorization: Bearer ${JWT}" \
-H "X-Tenant-Id: ${TENANT_ID}" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"accountId": "'${ACCOUNT_ID}'",
"originalEndToEnd": "E12345678202401101234abcdefghijkl",
"amount": 150.00,
"currency": "BRL",
"reason": "Product not available in stock"
}'

Resposta:

{
"refundId": "ref-abc123-def456",
"status": "PROCESSING",
"amount": 150.00,
"currency": "BRL"
}

Valores para status da devolução:

ValorDescrição
PROCESSINGDevolução em processamento
COMPLETEDDevolução concluída com sucesso
REJECTEDDevolução rejeitada

9. Listar Transações Recentes (Extrato)

Recupere o histórico recente de transações da conta.

curl -X GET "${API_URL}/v1/accounts/${ACCOUNT_ID}/statement?limit=10&order=desc" \
-H "Authorization: Bearer ${JWT}" \
-H "X-Tenant-Id: ${TENANT_ID}"

Parâmetros de consulta:

ParâmetroTipoDescrição
pageintegerÍndice da página (base 0)
sizeintegerTamanho da página (máx. 500)
startDatedatetimeFiltro de data inicial (ISO 8601)
endDatedatetimeFiltro de data final (ISO 8601)
limitintegerLimite total de registros (máx. 1000)
orderstringOrdem de classificação: asc ou desc

10. Gerenciar Chaves PIX

10.1 Listar Chaves PIX

curl -X GET "${API_URL}/v1/accounts/${ACCOUNT_ID}/pix/keys" \
-H "Authorization: Bearer ${JWT}" \
-H "X-Tenant-Id: ${TENANT_ID}"

10.2 Registrar uma Nova Chave PIX

curl -X POST "${API_URL}/v1/accounts/${ACCOUNT_ID}/pix/keys" \
-H "Authorization: Bearer ${JWT}" \
-H "X-Tenant-Id: ${TENANT_ID}" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"keyType": "email",
"pixKey": "financeiro@minhaempresa.com.br"
}'

Valores para keyType no cadastro:

ValorDescrição
cpfCPF do titular da conta
cnpjCNPJ do titular da conta
phoneNúmero de telefone (+5511999999999)
emailEndereço de email
randomChave aleatória (EVP) - gerada automaticamente pelo sistema

10.3 Registrar uma Chave Aleatória (EVP)

Para chaves aleatórias, omita o campo pixKey:

curl -X POST "${API_URL}/v1/accounts/${ACCOUNT_ID}/pix/keys" \
-H "Authorization: Bearer ${JWT}" \
-H "X-Tenant-Id: ${TENANT_ID}" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"keyType": "random"
}'

10.4 Excluir uma Chave PIX

curl -X DELETE "${API_URL}/v1/accounts/${ACCOUNT_ID}/pix/keys/contact%40mycompany.com" \
-H "Authorization: Bearer ${JWT}" \
-H "X-Tenant-Id: ${TENANT_ID}"

11. Consultar MEDs (Mecanismo Especial de Devolução)

Consulte infrações e disputas abertas via MED.

curl -X GET "${API_URL}/v1/accounts/${ACCOUNT_ID}/pix/med?status=OPEN&limit=20" \
-H "Authorization: Bearer ${JWT}" \
-H "X-Tenant-Id: ${TENANT_ID}"

Parâmetros de filtro:

ParâmetroValoresDescrição
statusOPEN, IN_PROGRESS, CLOSED, CANCELEDStatus do MED
responseStatusPENDING, AGREED, DISAGREEDStatus da resposta
minAmountnumberValor mínimo
maxAmountnumberValor máximo
fromdatetimeData inicial
todatetimeData final
limitintegerLimite de resultados
cursorstringCursor de paginação

11.1 Responder a um MED

curl -X POST "${API_URL}/v1/accounts/${ACCOUNT_ID}/pix/med/med-12345/response" \
-H "Authorization: Bearer ${JWT}" \
-H "X-Tenant-Id: ${TENANT_ID}" \
-H "Content-Type: application/json" \
-d '{
"answer": "DISCORDO",
"message": "Legitimate transaction as per attached receipts",
"evidences": [
{
"order": 1,
"description": "Comprovante de entrega",
"url": "https://storage.exemplo.com/evidencia1.pdf"
}
]
}'

Valores para answer:

ValorDescrição
CONCORDOAceita a devolução solicitada
DISCORDOContesta a solicitação de devolução

12. Transferência Interna

Transfira fundos entre contas do mesmo banco (sem custo, instantânea).

curl -X POST "${API_URL}/v1/accounts/${ACCOUNT_ID}/transfers/internal" \
-H "Authorization: Bearer ${JWT}" \
-H "X-Tenant-Id: ${TENANT_ID}" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"branch": "0001",
"account": "123456-7",
"taxNumber": "12345678900",
"value": 500.00,
"message": "Transfer between accounts",
"identifier": "transf-int-12345"
}'

Tratamento de Erros Comuns

Saldo Insuficiente

{
"errorCode": "insufficient_balance",
"message": "insufficient available balance: 50.00 (total: 100.00, locked: 50.00, requested: 150.00)"
}

Chave PIX Inválida

{
"errorCode": "invalid_payload",
"message": "keyType must be one of: CPF, CNPJ, EMAIL, PHONE, EVP"
}

Conflito de Idempotência

{
"errorCode": "idempotency_conflict",
"message": "Request with same Idempotency-Key but different payload"
}

Boas Práticas

  1. Sempre use Idempotency-Key em operações POST/PUT/PATCH para evitar duplicidades
  2. Armazene o endToEndId das transações para rastreamento e devoluções
  3. Implemente retry com backoff exponencial para erros 5xx
  4. Valide o saldo antes de operações de saída para melhor experiência do usuário
  5. Configure webhooks para receber notificações em tempo real

Para mais detalhes sobre cada endpoint, consulte a Referência da API ou o Guia de Integração.