Dom Docs
Dom Pagamentos
Guias

PIX Out

Transfira saldo disponível por Pix para terceiros em lote, com segurança via assinatura RSA.

Atualizado em

Recente

O PIX Out permite transferir o saldo disponível na sua conta Dom para terceiros via Pix — individualmente ou em lote de até 1.000 transferências.

[!WARNING] O PIX Out requer assinatura RSA em todos os endpoints POST e PUT, além do token de autenticação padrão. Veja como configurar em Autenticação com assinatura RSA.

Regras importantes

  • Limite de R$ 100.000 por lote
  • Máximo de 1.000 transferências por lote
  • Processamento em dias úteis, das 08h às 16h30
  • O saldo é reservado para todas as transferências do lote ao criá-lo — inclusive as que retornem erro
  • A taxa de PIX Out é descontada do saldo disponível
1

Gere e configure sua chave RSA

Gere um par de chaves RSA, envie a chave pública ao seu gerente de contas Dom, e use a chave privada para assinar os payloads.

2

Assine o payload

Antes de cada requisição POST/PUT, assine o body JSON com sua chave privada e envie a assinatura no header `Signature`.

3

Crie o lote de transferências

Envie as transferências para `POST /pixout/transfer` com o body assinado.

4

Acompanhe o status

Consulte o status do lote ou de cada transferência individualmente.

Passo 1 — Gerar e configurar a chave RSA

No terminal, gere o par de chaves:

# Gerar chave privada
openssl genrsa -out private-dom.pem 2048

# Gerar chave pública a partir da privada
openssl rsa -in private-dom.pem -outform PEM -pubout -out public-dom.pem

Envie o arquivo public-dom.pem ao seu gerente de contas Dom. A chave privada (private-dom.pem) fica somente no seu servidor.

Passo 2 — Assinar o payload

import crypto from 'crypto';
import fs from 'fs';

function assinarPayload(payload: string): string {
  const privateKey = fs.readFileSync('./private-dom.pem', 'utf-8');
  const sign = crypto.createSign('SHA256');
  sign.update(payload);
  sign.end();
  return sign.sign(privateKey, 'base64');
}

async function pixOutRequest(url: string, body: object) {
  const payload = JSON.stringify(body);
  const signature = assinarPayload(payload);

  return fetch(url, {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer {token}',
      'Signature': signature,
      'Content-Type': 'application/json',
    },
    body: payload,
  });
}

Passo 3 — Criar lote de transferências

curl --request POST \
  --url "{apiUrl}/pixout/transfer" \
  --header "Authorization: Bearer {token}" \
  --header "Signature: ASSINATURA_RSA_BASE64" \
  --header "Content-Type: application/json" \
  --data '{
    "transfers": [
      {
        "key": "joao@exemplo.com",
        "key_type": "EMAIL",
        "value": 150.00,
        "document": "11111111111",
        "name": "João da Silva",
        "description": "Pagamento #001"
      },
      {
        "key": "11999990000",
        "key_type": "PHONE",
        "value": 75.50,
        "document": "22222222222",
        "name": "Maria Oliveira",
        "description": "Pagamento #002"
      }
    ]
  }'

Tipos de chave Pix (key_type)

ValorDescrição
CPFCPF do destinatário
CNPJCNPJ do destinatário
EMAILE-mail cadastrado como chave
PHONETelefone (formato: 11999990000)
EVPChave aleatória (UUID)

Passo 4 — Consultar o lote

curl --request GET \
  --url "{apiUrl}/pixout/batch/{batch_id}" \
  --header "Authorization: Bearer {token}"

Status possíveis

StatusDescrição
pendingAguardando processamento
paidTransferência concluída com sucesso
returnedDevolução recebida
erroFalha na transferência (saldo ainda reservado)

[!WARNING] Transferências com status erro ainda consomem saldo reservado do lote. Consulte o erro específico de cada transferência para entender a causa antes de criar um novo lote.

Próximos passos

Esta página foi útil?