Carteiras & Transacoes
Gerencia a carteira financeira de cada motorista, historico de transacoes e saques via Pix.
Fluxo de saque
Driver solicita saque
|
v
POST /wallets/withdraw
|
v
ASAAS processa transferencia Pix
|
sucesso?
/ \
sim nao
| |
v v
TRANSFER_DONE TRANSFER_FAILED
(webhook) (webhook)
| |
v v
withdrawal.status = completed
withdrawal.status = failed
GET /api/v1/wallets/me
Retorna o saldo atual da carteira do motorista autenticado.
Auth: Bearer token — role driver
Response 200 OK
| Campo | Tipo | Descricao |
|---|---|---|
id |
UUID | ID da carteira |
driver_id |
UUID | ID do motorista proprietario |
balance |
string | Saldo disponivel em BRL (formato decimal: "29.00") |
updated_at |
datetime | Ultima atualizacao |
Exemplo de response
{
"id": "wallet-uuid-0001",
"driver_id": "550e8400-e29b-41d4-a716-446655440001",
"balance": "87.50",
"updated_at": "2026-05-19T14:00:00Z"
}
import requests
from decimal import Decimal
BASE_URL = "https://fast-deliv-backend.vercel.app"
headers = {"Authorization": f"Bearer {TOKEN}"}
resp = requests.get(f"{BASE_URL}/api/v1/wallets/me", headers=headers)
resp.raise_for_status()
wallet = resp.json()
balance = Decimal(wallet["balance"])
print(f"Saldo atual: R$ {balance:.2f}")
GET /api/v1/wallets/me/transactions
Lista o historico de transacoes da carteira do motorista.
Auth: Bearer token — role driver
Response 200 OK
Array de objetos Transaction:
| Campo | Tipo | Descricao |
|---|---|---|
id |
UUID | ID da transacao |
wallet_id |
UUID | ID da carteira |
delivery_id |
UUID ou null | Entrega relacionada (se for credito de entrega) |
type |
string | credit (entrega concluida) ou debit (saque) |
amount |
string | Valor em BRL (sempre positivo) |
description |
string | Descricao da transacao |
created_at |
datetime | Data da transacao |
const resp = await fetch(
`${BASE_URL}/api/v1/wallets/me/transactions`,
{ headers }
);
const transactions = await resp.json();
const totalCredits = transactions
.filter((t) => t.type === "credit")
.reduce((sum, t) => sum + parseFloat(t.amount), 0);
console.log(`Total de creditos: R$ ${totalCredits.toFixed(2)}`);
uri = URI("#{BASE_URL}/api/v1/wallets/me/transactions")
req = Net::HTTP::Get.new(uri)
req['Authorization'] = "Bearer #{TOKEN}"
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
transactions = JSON.parse(http.request(req).body)
total = transactions
.select { |t| t['type'] == 'credit' }
.sum { |t| t['amount'].to_f }
puts "Total de creditos: R$ #{'%.2f' % total}"
POST /api/v1/wallets/withdraw
Solicita um saque Pix para a conta do motorista. A transferencia e processada via ASAAS.
Auth: Bearer token — role driver
Request body
| Campo | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
amount |
string | sim | Valor a sacar em BRL (ex: "50.00") |
pix_key |
string | sim | Chave Pix de destino |
pix_key_type |
string | sim | Tipo da chave: cpf, phone, email, random |
Tipos de chave Pix aceitos
| Tipo | Formato | Exemplo |
|---|---|---|
cpf |
11 digitos numericos | "12345678901" |
phone |
+55 + DDD + numero | "+5562999990001" |
email |
Email valido | "motorista@email.com" |
random |
UUID gerado pelo banco | "550e8400-e29b-41d4..." |
Response 202 Accepted
{
"id": "withdrawal-uuid-0001",
"wallet_id": "wallet-uuid-0001",
"amount": "50.00",
"pix_key": "motorista@email.com",
"pix_key_type": "email",
"status": "pending",
"asaas_transfer_id": "tra_xxxxxxxxxxxx",
"created_at": "2026-05-19T15:00:00Z"
}
Erros
| Codigo | Causa |
|---|---|
422 |
Saldo insuficiente |
422 |
Tipo de chave Pix invalido |
502 |
ASAAS indisponivel |
const resp = await fetch(`${BASE_URL}/api/v1/wallets/withdraw`, {
method: "POST",
headers: { ...headers, "Content-Type": "application/json" },
body: JSON.stringify({
amount: "50.00",
pix_key: "motorista@email.com",
pix_key_type: "email",
}),
});
const withdrawal = await resp.json();
console.log(`Saque solicitado: ${withdrawal.id} — ${withdrawal.status}`);
uri = URI("#{BASE_URL}/api/v1/wallets/withdraw")
req = Net::HTTP::Post.new(uri)
req['Authorization'] = "Bearer #{TOKEN}"
req['Content-Type'] = 'application/json'
req.body = JSON.dump(
amount: '50.00',
pix_key: 'motorista@email.com',
pix_key_type: 'email'
)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
withdrawal = JSON.parse(http.request(req).body)
puts "Saque: #{withdrawal['id']} — #{withdrawal['status']}"
Status do saque
O saque inicia com status pending. A confirmacao chega via webhook ASAAS quando a transferencia Pix e processada.