---
title: "Withdraw BRL balance as crypto to a self-custodial wallet"
method: POST
path: "/saldo/sacar-cripto"
tags: ["Conta"]
---

# Withdraw BRL balance as crypto to a self-custodial wallet

`POST /saldo/sacar-cripto`

## Request

- Base URL: `https://api.luniumpay.com`
- URL: `https://api.luniumpay.com/saldo/sacar-cripto`
- Auth: API key in header `X-API-Key`

Converte saldo BRL disponível em cripto. Escolha uma rota entregavel=true de GET /cashin/catalog e informe carteira/memo por saque; carteira fixa não é necessária. Liquid/DePix não são suportados. Debita amount_cents mais a taxa da casa antes da entrega; conversão e custos da rota afetam a quantidade final. Acompanha pelo cashin_id em GET /cashin/{cashin_id}/status. Compartilha o espaço de external_id com cobranças. Não há endpoint público de prévia de saque.

## Request body

- object
  - `amount_cents` integer, required: Valor BRL em centavos inteiros. Mínimo efetivo depende da chave, taxas e rota. Consulte GET /keys/me e min_brl_cents/limits retornados; não fixe o mínimo do exemplo.
  - `chain` string: Network (aliases accepted: sol, trc20, erc20, bep20, arbitrum, base…).
  - `asset` string: Asset code in lowercase (usdt, usdc, btc, eth, sol…), as listed by GET /cashin/catalog.
  - `payout_address` string, required: Destination wallet, validated for the network.
  - `tax_number` string, required: CPF (11 digits) or CNPJ (14) of the customer who owns the balance.
  - `customer_ref` string: Sub-account to debit. Omit for the key's main balance.
  - `external_id` string: Identificador idempotente de até 64 caracteres. Mantenha o mesmo identificador e todos os parâmetros nos retries. A comparação de divergência varia por rota; não use o replay para alterar uma operação. 409 external_id_divergente sinaliza conflito detectado.
  - `payout_tag` string: Memo/tag do destino. OBRIGATORIO nas redes coletivas — XRP, XLM, TON, ATOM, HBAR, ALGO, EOS, KAVA, LUNA — onde a carteira de destino e compartilhada e o memo e quem identifica o dono. Sem ele a API responde 400 `memo_obrigatorio` antes de criar qualquer cobranca. Em XRP e a destination tag: inteiro de 0 a 4294967295. Aliases aceitos: `memo`, `tag`, `destination_tag`. O catalogo marca essas rotas com `memoRequired: true`.
  - `max_debited_cents` integer: Limite opcional do débito BRL (valor + taxa da casa). Excesso retorna 409 taxa_alterada. Não trava câmbio nem quantidade de tokens.
  - `sandbox_scenario` 'success' | 'delayed' | 'held' | 'expired' | 'refunded' | 'failed' | 'payer_mismatch' | 'settlement_failed' | 'settlement_uncertain' | 'route_unavailable' | 'provider_unavailable': Only for a sandbox key. GET /sandbox provides the scenario matrix by flow. Omit in production. All prices, payments and withdrawals remain fictitious.

## Response `200`

Debited and queued for delivery. Same view as POST /cashin/charge (cashin_id, status = `paid` — the balance is the payment —, chain, asset, payout_address, amount_cents, settlement_status, settlement_tx_hash) plus `fee_cents` (house fee debited), `debited_cents` (amount + fee), `fonte: "saldo"`, `destino: "cripto"`, `customer_ref`. Follow `settlement_status` on GET /cashin/{cashin_id}/status until `sent`.

- SaqueCripto: Resposta de criação da cobrança, com QR. Para status/lista/webhook veja StatusCobranca.
  - `cashin_id` string: Identificador da cobrança (ci_…).
  - `status` 'pending' | 'delayed' | 'under_review' | 'paid' | 'expired' | 'refunded' | 'failed': Estado do PIX. paid não comprova sozinho crédito/entrega; leia settlement_status.
  - `amount_cents` integer: Valor do PIX em centavos.
  - `destino` 'cripto' | 'saldo': cripto (entrega on-chain) ou saldo (credita a custódia BRL da chave, usável em POST /payouts e POST /saldo/sacar-cripto).
  - `fonte` 'saldo': Fonte do valor na criação: PIX ou saque do saldo.
  - `customer_ref` string, nullable: Sua referência do cliente final (subconta no saldo).
  - `payout_address` string, nullable: Carteira que recebe a cripto (destino=cripto).
  - `payout_tag` string, nullable: Memo/tag da carteira de destino em redes coletivas (destino=cripto).
  - `chain` string: Rede de entrega (id de GET /cashin/catalog).
  - `asset` string: Ativo entregue (usdt, usdc, btc, …).
  - `lunium_fee_bps` integer: Taxa percentual congelada na cobrança, em bps.
  - `lunium_fee_fixed_cents` integer: Parcela fixa congelada na cobrança, em centavos.
  - `partner_fee_bps` integer: Subfee exclusiva do depósito Pix em saldo BRL, em basis points (100 = 1%). Padrão 0, máximo 1000. Aplicada ao valor recebido após a taxa fixa Lunium, descontada antes do crédito no saldo. Independente de compra, venda e saque. Congelada na criação; comissão creditada somente após liberação e crédito concluído (paid/sent). Para compra direta, este campo congela partner_fee_bps.
  - `qr_copypaste` string, nullable: PIX copia e cola na criação; null no saque custodial.
  - `qr_image_url` string, nullable: Imagem do QR (PNG) — só na resposta da criação.
  - `external_id` string, nullable: Identificador idempotente de até 64 caracteres. Mantenha o mesmo identificador e todos os parâmetros nos retries. A comparação de divergência varia por rota; não use o replay para alterar uma operação. 409 external_id_divergente sinaliza conflito detectado.
  - `created_at` string, date-time, nullable
  - `expires_at` string, date-time, nullable: Validade da própria cobrança; leia este timestamp, inclusive para validade estendida pelo bot.
  - `delay_until` string, date-time, nullable: Instante de liberação informado para retenção do provedor, quando disponível.
  - `liberar_em` string, date-time, nullable: Quando o crédito no saldo sai da carência. null quando já entra disponível (padrão desde 16/09/2026).
  - `hold_hours` integer: Retenção local da cobrança em horas. Não é alias de held_hours nem da carência geral do saldo.
  - `held_hours` integer: Retenção solicitada ao provedor. Pode ser zero enquanto existe retenção local (hold_hours/liberar_em).
  - `held` boolean: true quando held_hours > 0. Isoladamente não revela retenção local.
  - `sandbox` boolean: True for fictitious sandbox operations.
  - `simulation` object
  - `sandbox_payment` object
    - `method` 'POST'
    - `path` string
  - `timeline` object[]
  - `delivery_mode` 'full' | 'split': Só em chain="liquid": como o DePix foi entregue. Ausente nas outras redes.
  - `net_cents` integer: Só em chain="liquid" com delivery_mode="split": quanto o destinatário recebe em DePix, já sem a taxa. É este valor que a Lunium envia on-chain.
  - `fee_total_cents` integer: Só em chain="liquid" com delivery_mode="split": tudo que saiu do bruto (taxa fixa + percentual). net_cents + fee_total_cents == amount_cents.
  - `lunium_fee_cents` integer: Parte da taxa em centavos para depósito Pix em saldo BRL; calculada com os valores congelados da cobrança.
  - `partner_fee_cents` integer: Sub fee do parceiro debitada do saldo por cima da taxa da Lunium (24/09/2026).
  - `settlement_status` 'pending' | 'sending' | 'entregando' | 'sent' | 'incerto' | 'failed' | 'null', nullable: Estado do crédito/entrega: sent concluiu; incerto exige conciliação. PIX pago e entrega são estados distintos.
  - `settlement_tx_hash` string, nullable: Hash on-chain da entrega (ou id interno quando a entrega é pela corretora).
  - `fee_cents` integer: Taxa da Lunium debitada do saldo.
  - `debited_cents` integer: amount_cents + fee_cents + partner_fee_cents.

## Other responses

- `400`: rede_indisponivel | asset_invalido | payout_address_invalido | documento_invalido | valor_abaixo_do_minimo · `memo_obrigatorio` — a rede exige memo/tag e ele nao veio (ou veio invalido).
- `402`: saldo_insuficiente — available < amount + fee. Body carries `saldo` and `fee_cents`.
- `409`: external_id_divergente
- `423`: carencia_primeiro_deposito — first-deposit hold (only keys with a contractual holding period); `libera_em` says when.
- `503`: entrega_indisponivel — no stock/route to deliver right now; nothing was debited.

## Changes

- **2026-10-19** `fc06c3b824b1`: 2 info
  - added the optional property `allOf[#/components/schemas/Cobranca]/lunium_fee_cents` to the response with the `200` status
  - added the optional property `allOf[#/components/schemas/Cobranca]/partner_fee_cents` to the response with the `200` status

[Operation history](https://skmtc.dev/luniumpay/apis/lunium-crypto-pix-settlement-brazil/changes/saldo/sacar-cripto/post.md)

---

[API](https://skmtc.dev/luniumpay/apis/lunium-crypto-pix-settlement-brazil.md) · [All operations](https://skmtc.dev/luniumpay/apis/lunium-crypto-pix-settlement-brazil/llms.txt) · [OpenAPI document](https://skmtc.dev/luniumpay/apis/lunium-crypto-pix-settlement-brazil/revisions/0b5a340fa9dd?raw)
