SelectwinDOCS
Carteiras

Criar uma carteira

Cadastra uma nova carteira (conta bancária) para a sua conta de recebimento, informando os dados bancários para onde os saques serão enviados. Use este endpoint quando precisar registrar uma conta de

Cadastra uma nova carteira (conta bancária) para a sua conta de recebimento, informando os dados bancários para onde os saques serão enviados. Use este endpoint quando precisar registrar uma conta de destino antes de solicitar saques, ou para manter mais de uma conta cadastrada.

POST /v1/wallets

Como funciona

Uma carteira (do inglês wallet) é o registro de uma conta bancária vinculada à sua conta na Selectwin. Ela serve como destino dos seus saques (withdrawals): o saldo disponível na sua conta é transferido para a conta bancária de uma carteira cadastrada.

Quando você envia este POST, o servidor:

  1. Valida o código do banco (bankCode) contra a lista de instituições suportadas. Códigos não reconhecidos são recusados com bankCodeNotSupported.
  2. Valida os dados bancários (accountNumber, routingNumber, name). Dados inconsistentes resultam em invalidWallet / invalidWalletData.
  3. Cria a carteira e, em caso de sucesso, devolve 201 Created com o objeto completo — incluindo o id gerado (prefixo wall_), o bankName resolvido a partir do bankCode, e os links HATEOAS (_links) para ler, listar e excluir a carteira.

A carteira pertence à conta autenticada pela sua SelectKey — ela é associada ao seu merchant, retornado no objeto de resposta. Não há campo de "vendedor" ou cliente no corpo: a vinculação é automática pela chave de API.

Nota

O campo name que você envia é o nome do titular da conta (account holder name). Na resposta ele aparece refletido como holderName, e o campo name passa a guardar um rótulo da própria carteira. Preencha name com o nome de quem é titular da conta bancária.

A carteira principal (primary)

Cada conta pode ter várias carteiras, mas apenas uma é a principal (primary: true). A carteira principal é a conta usada por padrão nos saques. Ao criar uma carteira com primary: true, ela passa a ser a principal; trate qualquer carteira marcada anteriormente como principal como tendo perdido esse status.

Quando usar

  • Antes do primeiro saque, para registrar a conta bancária de destino.
  • Para cadastrar contas adicionais (por exemplo, alternar entre bancos).
  • Para definir uma nova conta principal ao criar a carteira já com primary: true.

Não use este endpoint para alterar uma carteira existente — não há operação de atualização. Para trocar dados bancários, crie uma nova carteira e exclua a antiga (veja DeleteWallet).

Requisição

Headers

CabeçalhoObrigatórioValor
SelectKeySimSua chave de API (sl_live_... em produção; sl_test_... em sandbox). Nunca use Authorization: Bearer/Basic.
Content-TypeSimapplication/json
X-Idempotency-KeyRecomendadoGarante que reenvios não criem carteiras duplicadas. Veja Idempotência.

Detalhes de autenticação em Autenticação; convenções gerais (camelCase, IDs opacos, datas UTC) em Convenções.

Corpo

CampoTipoObrigatórioDescrição
bankCodestringSimCódigo do banco (COMPE/ISPB). Ex.: "001" (Banco do Brasil), "260" (Nubank). Deve estar entre os bancos suportados.
accountNumberstringSimNúmero da conta, com dígito verificador. Ex.: "12345-6".
routingNumberstringSimNúmero da agência (branch/routing number). Ex.: "0001".
namestringSimNome do titular da conta bancária. Aparece como holderName na resposta.
primarybooleanNãoDefine esta carteira como principal (conta padrão para saques). Padrão: tratado como não-principal quando ausente.

Atenção

Diferente do que possa parecer, não existe um campo customerId neste endpoint. A carteira é vinculada automaticamente à conta da sua SelectKey. Enviar campos não previstos pode resultar em invalidParameters.

Exemplo curl

curl -X POST https://api.selectwin.io/v1/wallets \
  -H "SelectKey: sl_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ" \
  -H "Content-Type: application/json" \
  -H "X-Idempotency-Key: 9f1c2b3a-..." \
  -d '{
    "bankCode": "001",
    "accountNumber": "12345-6",
    "routingNumber": "0001",
    "name": "João Silva",
    "primary": true
  }'

Exemplo de corpo JSON

{
  "bankCode": "001",
  "accountNumber": "12345-6",
  "routingNumber": "0001",
  "name": "João Silva",
  "primary": true
}

Resposta

Sucesso (201 Created)

{
  "id": "wall_01hqzvabc",
  "name": "Conta principal",
  "bankName": "Nubank",
  "bankCode": "260",
  "holderName": "João Santos",
  "routingNumber": "0001",
  "accountNumber": "12345678",
  "accountType": "checking",
  "primary": true,
  "enabled": true,
  "updatedAt": "2026-04-12T17:56:33.000Z",
  "createdAt": "2026-04-12T17:56:33.000Z",
  "merchant": {
    "name": "Seller Name",
    "merchantId": "bus_1234567890",
    "isSubAccount": false
  },
  "_links": {
    "self": {
      "href": "https://api.selectwin.io/v1/wallets/wall_01hqzvabc",
      "method": "GET",
      "description": "Read a wallet."
    },
    "create": {
      "href": "https://api.selectwin.io/v1/wallets",
      "method": "POST",
      "description": "Create a new wallet."
    },
    "delete": {
      "href": "https://api.selectwin.io/v1/wallets/wall_01hqzvabc",
      "method": "DELETE",
      "description": "Delete the wallet."
    },
    "list": {
      "href": "https://api.selectwin.io/v1/wallets",
      "method": "GET",
      "description": "List all wallets."
    }
  }
}

Campos da resposta

CampoTipoDescrição
idstringIdentificador da carteira (wall_...). Trate como opaco; guarde para ler ou excluir depois.
namestringRótulo da carteira.
bankNamestringNome do banco, resolvido a partir do bankCode.
bankCodestringCódigo do banco enviado.
holderNamestringNome do titular (o name que você enviou).
routingNumberstringAgência.
accountNumberstringNúmero da conta.
accountTypestringTipo de conta (ex.: checking). Presente na resposta; não é enviado no corpo.
primarybooleanIndica se é a carteira principal.
enabledbooleanIndica se a carteira está habilitada para uso.
createdAt / updatedAtstring (date-time)Timestamps em ISO 8601 UTC.
merchantobjectConta à qual a carteira pertence (name, merchantId, isSubAccount).
_linksobjectLinks HATEOAS (self, create, delete, list) com href, method e description.

Os campos accountType, merchant e _links.delete/_links.list aparecem no objeto individual (create/read), mas são omitidos nas projeções leves de listagem — veja ListWallets.

Erros

error.codeHTTPQuando ocorre
bankCodeNotSupported400O bankCode informado não está entre os bancos suportados.
walletIdIsInvalid400ID de carteira em formato inválido (em operações que recebem ID).
invalidWallet400Dados da carteira inválidos.
invalidWalletData422Dados bancários não passam na validação de negócio.
bankAccountCreateNotProcessable422A conta bancária não pôde ser processada/criada.
invalidParameters400Falha de validação de campos (veja error.params para os campos com problema).
unauthorized401SelectKey ausente, inválida ou revogada.
forbidden403Autenticado, mas sem permissão para a operação.
unprocessableEntity422Entidade não processável por regra de negócio.
tooManyRequests429Limite de requisições excedido — respeite error.retryAfterMinutes.
serverError500Erro interno — repita com backoff.

Trate sempre pelo error.code, nunca pela message. Catálogo completo em Códigos de Erro; estrutura do envelope em Tratamento de Erros.

Boas práticas

  1. Envie X-Idempotency-Key em cada criação. Se a resposta se perder na rede, o reenvio com a mesma chave não cria uma carteira duplicada.
  2. Valide o bankCode antes de enviar. Use o código COMPE/ISPB correto; um banco não suportado retorna bankCodeNotSupported — confirme o código antes de tentar de novo.
  3. Confira accountNumber com o dígito verificador. Dados bancários incorretos passam na criação mas fazem o saque falhar depois; revise agência e conta com cuidado.
  4. Preencha name com o titular real da conta. Esse valor vira holderName e precisa bater com o cadastro do banco para o saque ser liquidado.
  5. Use primary com intenção. Defina primary: true apenas na conta que deve ser o destino padrão; lembre que isso desloca a carteira principal anterior.
  6. Guarde o id (wall_...) da resposta. Você vai precisar dele para ler, listar ou excluir a carteira, e para indicar o destino de saques.
  7. Não tente "atualizar" uma carteira. Não há PUT/PATCH: para corrigir dados, crie uma nova e exclua a antiga.

Veja também

How is this guide?

On this page