intake

Como fazer um saque

Guia completo para realizar saques e consultar saldo de forma segura.

Este guia mostra como realizar saques para chaves PIX e consultar o saldo disponível em sua conta. Todas as operações de saque devem ser realizadas exclusivamente no backend por questões de segurança.

IMPORTANTE: A Chave de Cash-Out nunca deve ser exposta no client-side. Sempre use-a apenas em seu backend para garantir a segurança das operações financeiras.

Pré-requisitos

Antes de realizar um saque, certifique-se de ter:

  • ✅ Chave de Cash-Out configurada (obtida na plataforma)
  • ✅ Saldo disponível na conta
  • ✅ Chave PIX válida para receber o saque
  • ✅ Ambiente backend seguro para processar a requisição

Consultar Saldo

Antes de realizar um saque, consulte o saldo disponível:

Endpoint de Consulta de Saldo

curl -X GET https://api.intake.finance/v1/balances/summary \
  -H "Authorization: Bearer SUA_CHAVE_DE_CASH_OUT"

Resposta

{
  "available_summary": "105.00",
  "pending_summary": "25.00"
}

Campos da resposta:

  • available_summary: Saldo disponível para saque (em reais)
  • pending_summary: Saldo pendente de liberação (em reais)

O saldo é atualizado em tempo real. Sempre consulte antes de realizar saques para garantir que há saldo suficiente.

Realizar um Saque

Preparar a Requisição

Use o endpoint POST /withdraws com a Chave de Cash-Out. Os campos external_id, amount, pix_key e pix_key_type são obrigatórios:

curl -X POST https://api.intake.finance/v1/withdraws \
  -H "Authorization: Bearer SUA_CHAVE_DE_CASH_OUT" \
  -H "Content-Type: application/json" \
  -d '{
    "external_id": "saque-12345",
    "amount": 5000,
    "pix_key": "usuario@exemplo.com",
    "pix_key_type": "email"
  }'

Tipos de chave PIX (pix_key_type): cpf, cnpj, email, phone, random.

Processar a Resposta

A resposta conterá as informações do saque criado:

{
  "id": "wt_123456789",
  "status": "created",
  "total_amount": "50.00",
  "net_amount": "49.00",
  "fixed_fee": "1.00",
  "variable_fee": "0.00"
}

Status possíveis:

  • created: Saque criado e aguardando processamento
  • paid: Saque em processamento
  • confirmed: Saque concluído e confirmado
  • failed: Saque falhou
  • blocked: Saque bloqueado

Listar Saques

Consulte todos os saques realizados com suporte a paginação:

curl -X GET "https://api.intake.finance/v1/withdraws?page=1&page_size=20" \
  -H "Authorization: Bearer SUA_CHAVE_DE_CASH_OUT"

Segurança

Boas Práticas

  1. Nunca exponha a Chave de Cash-Out

    • Não use em código JavaScript
    • Não inclua em aplicações mobile
    • Não compartilhe em repositórios públicos
  2. Use variáveis de ambiente

    # .env
    CASH_OUT_KEY=sua_chave_aqui
  3. Valide sempre o saldo antes de sacar

    const { available_summary } = await getBalanceSummary();
    const availableCents = Math.round(parseFloat(available_summary) * 100);
    if (availableCents < requestedAmount) {
      throw new Error('Saldo insuficiente');
    }
  4. Registre todas as operações

    • Mantenha logs de todas as requisições de saque
    • Monitore tentativas de saque falhadas

Se você suspeitar que sua Chave de Cash-Out foi comprometida, revogue-a imediatamente na plataforma e gere uma nova.

Exemplos Completos

Node.js/TypeScript

async function checkBalanceAndWithdraw(
  externalId: string,
  amount: number,
  pixKey: string,
  pixKeyType: 'cpf' | 'cnpj' | 'email' | 'phone' | 'random'
) {
  const headers = {
    Authorization: `Bearer ${process.env.CASH_OUT_KEY}`,
    'Content-Type': 'application/json',
  };

  // 1. Consultar saldo
  const balanceRes = await fetch(
    'https://api.intake.finance/v1/balances/summary',
    { headers }
  );
  const { available_summary } = await balanceRes.json();
  const availableCents = Math.round(parseFloat(available_summary) * 100);

  // 2. Validar saldo
  if (availableCents < amount) {
    throw new Error('Saldo insuficiente');
  }

  // 3. Realizar saque
  const withdrawRes = await fetch('https://api.intake.finance/v1/withdraws', {
    method: 'POST',
    headers,
    body: JSON.stringify({
      external_id: externalId,
      amount,
      pix_key: pixKey,
      pix_key_type: pixKeyType,
    }),
  });

  return withdrawRes.json();
}

Python

import os
import requests

def check_balance_and_withdraw(external_id, amount, pix_key, pix_key_type):
    token = os.getenv('CASH_OUT_KEY')
    headers = {
        'Authorization': f'Bearer {token}',
        'Content-Type': 'application/json'
    }

    # 1. Consultar saldo
    balance_res = requests.get(
        'https://api.intake.finance/v1/balances/summary',
        headers=headers
    )
    balance_res.raise_for_status()
    summary = balance_res.json()
    available_cents = round(float(summary['available_summary']) * 100)

    # 2. Validar saldo
    if available_cents < amount:
        raise ValueError('Saldo insuficiente')

    # 3. Realizar saque
    withdrawal_res = requests.post(
        'https://api.intake.finance/v1/withdraws',
        headers=headers,
        json={
            'external_id': external_id,
            'amount': amount,
            'pix_key': pix_key,
            'pix_key_type': pix_key_type,
        }
    )
    withdrawal_res.raise_for_status()
    return withdrawal_res.json()

Próximos Passos

On this page