Skip to main content
Subcontas merchant são carteiras lógicas vinculadas à sua conta GoatPay principal. Servem para separar saldo por produto, parceiro ou unidade de negócio, sem abrir outra conta na GoatPay.

Habilitação

EtapaOndeDetalhe
SolicitarDashboard → Contas → SubcontasInforme WhatsApp; status em access-status
AprovaçãoEquipe GoatPay (admin)Ativa merchantSubaccountsEnabled na conta
PIX em subcontaAdmin, após habilitar subcontasFlag merchantSubaccountsPixEnabled
Sem habilitação, a API retorna 403 em rotas subaccount/* e ao enviar subaccountId no PIX. A solicitação de acesso não existe na API pública hoje — apenas no dashboard.

Permissões na API key

Marque o grupo Subcontas ao criar a chave. Cada rota exige uma permissão:
PermissãoUso
subaccount/createCriar subconta
subaccount/getConsultar por id ou externalReference
subaccount/listListar subcontas
subaccount/updateRenomear ou ACTIVE / DISABLED
subaccount/deleteExcluir (saldo zerado; retorna { id })
subaccount/balanceSaldo da subconta
subaccount/add-balanceConta principal → subconta
subaccount/remove-balanceSubconta → conta principal
subaccount/transferEntre duas subcontas
subaccount/lock / subaccount/unlockBloqueio operacional
subaccount/set-limitsLimites diário/mensal/por transação
subaccount/set-pricingAcréscimo de taxa PIX entrada/saída (somado à taxa principal)
subaccount/getGET /subaccount/pricing — preview das taxas com lines[].label
Para PIX na subconta, use também payment-pix/create e/ou transfer-pix/create na mesma chave.

Conceitos

ConceitoDescrição
Conta principalDono do saldo “global”; movimentações add-balance / remove-balance cruzam main ↔ sub
externalReferenceID do seu sistema (máx. 64). Obrigatório na API pública no create
TrilhoSomente Padrão — movimentações e PIX em subconta usam saldo *White; não há parâmetro pixRail na API
SaldoUse spendableWhite (e campos availableWhite / lockedWhite / pendingWhite)
LimitesValidados por soma de débitos COMPLETED no período (sem contador em tabela)
lockModefull, withdraw_only, deposit_only — afeta PIX e movimentações

Fluxo recomendado

1

1. Habilitar e criar subconta

Após aprovação no dashboard, crie a subconta com cadastro KYC (PF ou PJ): POST /subaccount/create com nome, CPF, data de nascimento, CEP e, para PJ, CNPJ, razão social, site e comprovante em multipart.No app GoatPay, configure taxas globais em Subcontas e use Gerenciar subconta para saldo, transferências, limites, bloqueios e taxas PIX in/out.Criar subconta
2

2. Alocar saldo (opcional)

POST /subaccount/add-balance transfere da conta principal para a subconta.Ou receba PIX direto na subconta (passo 4).
3

3. Configurar limites e bloqueios (opcional)

set-limits, lock / unlock conforme política de risco.
4

4. PIX na subconta

Não há rotas /subaccount/payment-pix. Use as rotas PIX normais com subaccountId no body (veja abaixo).
5

5. Reconciliar

GET /subaccount/balance ou get / list. Extrato filtrado por subconta (API key ou dashboard): GET /v1/account/transactions?subaccountId={id} ou merchantSubaccountId={id}. Cobranças PIX da subconta: GET /v1/payment-pix/list?subaccountId={id}.Extrato da conta · Listar cobranças PIX

Receber PIX (cobrança QR) na subconta

Não existe POST /subaccount/payment-pix/create. Use a rota padrão de cobrança com o ID da subconta:
curl -X POST 'https://api.goatpay.com.br/v1/payment-pix/create' \
  -H 'X-API-Key: gp_live_SUA_CHAVE' \
  -H 'Content-Type: application/json' \
  -d '{
    "amount": 100,
    "description": "Pedido loja A",
    "subaccountId": "clx_subconta",
    "externalReference": "pedido-9001"
  }'
RequisitoDetalhe
Permissãopayment-pix/create
Flag da contamerchantSubaccountsPixEnabled
SubcontaACTIVE obrigatório; DISABLED ou excluída (soft delete) não operam PIX. Não bloqueada para depósito (lockModefull / deposit_only)
TrilhoNão envie subaccountId em PIX Livre — retorna 400
LiquidaçãoO líquido credita o saldo da subconta no trilho da chave
Lucro (pricing)Diferença entre taxa cobrada e taxa da subconta pode ir para a conta principal (SUBACCOUNT_PROFIT)
Consulta e listagem: Consultar cobrança (por id ou externalReference); Listar com ?subaccountId= para filtrar só aquela subconta. A resposta inclui subaccountId quando a cobrança foi criada com subconta. Webhooks payment.created / payment.paid não mudam. Documentação completa de criar cobrança PIX

Enviar PIX (saque) da subconta

Mesmo padrão: rota de saque existente + subaccountId:
curl -X POST 'https://api.goatpay.com.br/v1/transfer-pix/create' \
  -H 'X-API-Key: gp_live_SUA_CHAVE' \
  -H 'Content-Type: application/json' \
  -d '{
    "amount": 50,
    "description": "Repasse fornecedor",
    "pixKey": "12345678909",
    "pixKeyType": "CPF",
    "subaccountId": "clx_subconta",
    "coverFee": true
  }'
RequisitoDetalhe
Permissãotransfer-pix/create (ou alias payouts/create)
Flag da contamerchantSubaccountsPixEnabled
SaldoDébito no saldo spendable da subconta no trilho da operação
Bloqueiowithdraw_only ou full impedem saque
LimitesdailyLimit, monthlyLimit, perTransactionLimit da subconta
Documentação de enviar PIX

Movimentação interna (sem PIX)

OperaçãoRotaEfeito
Principal → subPOST /subaccount/add-balanceDébito na main, crédito na sub
Sub → principalPOST /subaccount/remove-balanceDébito na sub, crédito na main
Sub → subPOST /subaccount/transferEntre duas subcontas da mesma conta
Rotas add-balance, remove-balance e transfer são idempotentes quando você repete o mesmo externalReference (ou payload equivalente derivado internamente).

Saldo da subconta

GET /subaccount/balance?id=... ou ?externalReference=... Exemplo de balance em GET /subaccount/get/:id:
{
  "availableWhite": 500,
  "pendingWhite": 0,
  "lockedWhite": 0,
  "spendableWhite": 500
}
Na API pública, balance expõe apenas campos *White. Use spendableWhite como saldo utilizável para saques e remove-balance. Exclusão (delete) exige saldo White zerado.

Extrato filtrado

GET /v1/account/transactions?subaccountId={id} inclui, entre outros:
TipoOrigem
SUBACCOUNT_ADD_BALANCEadd-balance
SUBACCOUNT_REMOVE_BALANCEremove-balance
SUBACCOUNT_TRANSFERtransfer entre subs
PIX com subaccountIdCobrança/saque/reembolso na subconta
Consultar taxas antes de set-pricing para ver totalPercentFee / totalFixedFee por operação.

Limites e bloqueio

Limites (set-limits): valores em reais ou null para remover. Gasto validado por agregação de transações de débito COMPLETED vinculadas à subconta (fuso America/Sao_Paulo). Bloqueio (lock):
modeDepósito PIX / add-balanceSaque PIX / remove-balance
fullBloqueadoBloqueado
deposit_onlyBloqueadoPermitido
withdraw_onlyPermitidoBloqueado

MED e reembolso

  • MED: quando o depósito PIX estava vinculado à subconta (subaccountId na cobrança), o bloqueio reduz o disponível da subconta e aumenta lockedWhitenão usa blockedAmount da conta principal. MED em PIX da conta principal segue o fluxo normal na main. Veja também o guia de MEDs.
  • Reembolso PIX: a taxa de saída segue o pricing da subconta; o débito reserva saldo na subconta (líquido retido + taxa). Informe subaccountId em POST /refunds/create quando o depósito pertence à subconta. Na conclusão do estorno, lucro de subconta creditado na main pode ser revertido. Solicitar reembolso

Taxas (PIX entrada e PIX saída)

Subcontas pagam: taxa da conta principal + acréscimo configurado.
Operaçãooperation na API
PIX entrada (cobrança)PIX_WHITE_DEPOSIT
PIX saída (transferência)PIX_WHITE_TRANSFER
  • API pública: POST /subaccount/set-pricing define acréscimo por subconta. O valor soma à taxa da conta principal; na liquidação do PIX in, o acréscimo credita a conta principal (SUBACCOUNT_PROFIT).
  • Preview: GET /subaccount/pricing com id ou externalReference retorna simulação antes de cobrar. Definir taxas

Endpoints

Criar

Nova subconta com externalReference.

Consultar

Por id na URL.

Por referência

GET .../get-by-ref/{externalReference}.

Listar

Paginação e filtro status.

Saldo

Query id ou externalReference.

Adicionar saldo

Main → subconta.

Remover saldo

Subconta → main.

Transferir entre subs

fromSubaccountIdtoSubaccountId.

Atualizar

Nome e status ACTIVE / DISABLED.

Excluir

Saldo zerado no Padrão.

Bloquear

full, withdraw_only, deposit_only.

Desbloquear

Volta ao modo normal.

Limites

Diário, mensal e por transação.

Taxas

Acréscimo PIX in/out.
Para excluir uma subconta, zere o saldo (remove-balance ou saques) e use POST /subaccount/delete. A resposta confirma com { "id": "..." }. Subcontas com saldo retornam erro 400.