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:
- Valida o código do banco (
bankCode) contra a lista de instituições suportadas. Códigos não reconhecidos são recusados combankCodeNotSupported. - Valida os dados bancários (
accountNumber,routingNumber,name). Dados inconsistentes resultam eminvalidWallet/invalidWalletData. - Cria a carteira e, em caso de sucesso, devolve
201 Createdcom o objeto completo — incluindo oidgerado (prefixowall_), obankNameresolvido a partir dobankCode, 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çalho | Obrigatório | Valor |
|---|---|---|
SelectKey | Sim | Sua chave de API (sl_live_... em produção; sl_test_... em sandbox). Nunca use Authorization: Bearer/Basic. |
Content-Type | Sim | application/json |
X-Idempotency-Key | Recomendado | Garante 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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
bankCode | string | Sim | Código do banco (COMPE/ISPB). Ex.: "001" (Banco do Brasil), "260" (Nubank). Deve estar entre os bancos suportados. |
accountNumber | string | Sim | Número da conta, com dígito verificador. Ex.: "12345-6". |
routingNumber | string | Sim | Número da agência (branch/routing number). Ex.: "0001". |
name | string | Sim | Nome do titular da conta bancária. Aparece como holderName na resposta. |
primary | boolean | Não | Define 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
| Campo | Tipo | Descrição |
|---|---|---|
id | string | Identificador da carteira (wall_...). Trate como opaco; guarde para ler ou excluir depois. |
name | string | Rótulo da carteira. |
bankName | string | Nome do banco, resolvido a partir do bankCode. |
bankCode | string | Código do banco enviado. |
holderName | string | Nome do titular (o name que você enviou). |
routingNumber | string | Agência. |
accountNumber | string | Número da conta. |
accountType | string | Tipo de conta (ex.: checking). Presente na resposta; não é enviado no corpo. |
primary | boolean | Indica se é a carteira principal. |
enabled | boolean | Indica se a carteira está habilitada para uso. |
createdAt / updatedAt | string (date-time) | Timestamps em ISO 8601 UTC. |
merchant | object | Conta à qual a carteira pertence (name, merchantId, isSubAccount). |
_links | object | Links HATEOAS (self, create, delete, list) com href, method e description. |
Os campos
accountType,merchante_links.delete/_links.listaparecem no objeto individual (create/read), mas são omitidos nas projeções leves de listagem — veja ListWallets.
Erros
error.code | HTTP | Quando ocorre |
|---|---|---|
bankCodeNotSupported | 400 | O bankCode informado não está entre os bancos suportados. |
walletIdIsInvalid | 400 | ID de carteira em formato inválido (em operações que recebem ID). |
invalidWallet | 400 | Dados da carteira inválidos. |
invalidWalletData | 422 | Dados bancários não passam na validação de negócio. |
bankAccountCreateNotProcessable | 422 | A conta bancária não pôde ser processada/criada. |
invalidParameters | 400 | Falha de validação de campos (veja error.params para os campos com problema). |
unauthorized | 401 | SelectKey ausente, inválida ou revogada. |
forbidden | 403 | Autenticado, mas sem permissão para a operação. |
unprocessableEntity | 422 | Entidade não processável por regra de negócio. |
tooManyRequests | 429 | Limite de requisições excedido — respeite error.retryAfterMinutes. |
serverError | 500 | Erro 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
- Envie
X-Idempotency-Keyem cada criação. Se a resposta se perder na rede, o reenvio com a mesma chave não cria uma carteira duplicada. - Valide o
bankCodeantes de enviar. Use o código COMPE/ISPB correto; um banco não suportado retornabankCodeNotSupported— confirme o código antes de tentar de novo. - Confira
accountNumbercom 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. - Preencha
namecom o titular real da conta. Esse valor viraholderNamee precisa bater com o cadastro do banco para o saque ser liquidado. - Use
primarycom intenção. Definaprimary: trueapenas na conta que deve ser o destino padrão; lembre que isso desloca a carteira principal anterior. - Guarde o
id(wall_...) da resposta. Você vai precisar dele para ler, listar ou excluir a carteira, e para indicar o destino de saques. - 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?