Excluir um cartão
Remove permanentemente um cartão tokenizado da conta, identificado pelo seu cardId. Use quando o cliente pedir para apagar um meio de pagamento, quando um cartão estiver comprometido ou ao limpar cart
Remove permanentemente um cartão tokenizado da conta, identificado pelo seu cardId. Use quando o cliente pedir para apagar um meio de pagamento, quando um cartão estiver comprometido ou ao limpar cartões obsoletos. A operação é irreversível e invalida o token para novas cobranças.
DELETE /v1/cards/{cardId}
Como funciona
A Selectwin nunca armazena o número completo do cartão (o PAN). No cadastro, os dados sensíveis são trocados por um token — uma referência opaca (card_…) usada nas cobranças. "Excluir um cartão" significa invalidar esse token: depois da exclusão ele deixa de existir para a conta e não pode mais ser usado para novas transações.
Pontos importantes sobre o mecanismo:
- É irreversível. Não há "lixeira" nem restauração. Para usar o mesmo cartão de novo, é preciso cadastrá-lo outra vez via Criar cartão — o que gera um novo
card_…. - Não afeta cobranças passadas. Transações já criadas com esse cartão continuam existindo e seguem seu próprio ciclo de vida (captura, estorno, disputa). Excluir o cartão não cancela nem estorna nada que já foi cobrado.
- Síncrona. A resposta já confirma o resultado; não há processamento assíncrono nem evento de webhook obrigatório para concluir a operação.
- Idempotente por natureza. O efeito é "este cartão não existe mais". Repetir o
DELETEno mesmocardIdjá removido não cria efeitos adicionais — a segunda chamada apenas não encontra o cartão e responde com erro de não encontrado (veja Erros).
Atenção
A exclusão é permanente. Confirme o cardId correto antes de chamar — não há como desfazer. Se o cartão for o principal do cliente, defina outro como principal antes de excluí-lo (via Criar cartão com primary: true), para que cobranças futuras continuem tendo um meio padrão.
Quando usar (e quando não)
Use o DELETE quando o objetivo for realmente remover o meio de pagamento:
- O cliente pediu para apagar o cartão.
- O cartão foi comprometido (suspeita de fraude) e deve ser invalidado.
- Limpeza de cartões expirados ou não utilizados após o cliente cadastrar um novo.
Quando não usar:
- Só quer consultar antes de decidir? Use Consultar cartão ou Listar cartões — eles não alteram nada.
- Quer apenas trocar o cartão padrão? Você não precisa excluir o antigo: cadastre o novo com
primary: trueem Criar cartão. - Precisa do cartão novamente depois? Lembre-se de que a exclusão é definitiva — reativar exige um novo cadastro e gera um novo ID.
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. |
Não há corpo de requisição, então Content-Type é dispensável aqui. Veja Autenticação para detalhes da SelectKey.
Como é uma operação destrutiva e idempotente, o cabeçalho
X-Idempotency-Keyé opcional — o efeito final ("cartão removido") não muda ao repetir a chamada. Veja Idempotência.
Parâmetros de caminho
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
cardId | string | Sim | Identificador opaco do cartão a excluir, no formato card_… (ex.: card_01hqzvabc). Trate como string opaca — não tente fazer parsing. |
Exemplo de requisição
curl -X DELETE "https://api.selectwin.io/v1/cards/card_01hqzvabc" \
-H "SelectKey: sl_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ"Resposta
Em caso de sucesso, a API retorna 200 OK com um objeto de confirmação. O campo deleted: true é a sinalização canônica de que o token foi invalidado; o bloco _links (HATEOAS) traz os próximos passos possíveis (criar outro cartão, listar os cartões restantes).
{
"id": "card_01hqzvabc",
"resource": "card",
"deleted": true,
"merchant": {
"name": "Seller Name",
"merchantId": "bus_1234567890",
"isSubAccount": false
},
"_links": {
"self": {
"href": "https://api.selectwin.io/v1/cards/card_01hqzvabc",
"method": "DELETE",
"description": "Delete the card."
},
"create": {
"href": "https://api.selectwin.io/v1/cards",
"method": "POST",
"description": "Create a new card."
},
"list": {
"href": "https://api.selectwin.io/v1/cards",
"method": "GET",
"description": "List all cards."
}
}
}Campos da resposta
| Campo | Tipo | Descrição |
|---|---|---|
id | string | ID do cartão removido (card_…). |
resource | string | Sempre "card". Identifica o tipo do objeto. |
deleted | boolean | true quando o cartão foi efetivamente removido. |
merchant | object | Dados do estabelecimento dono do cartão. |
merchant.name | string | Nome do estabelecimento. |
merchant.merchantId | string | ID do estabelecimento (bus_…). |
merchant.isSubAccount | boolean | Indica se é uma subconta. |
_links | object | Links HATEOAS com as próximas ações (self, create, list). |
Nota
Diferente do cadastro e da consulta, a resposta de exclusão é um objeto de confirmação enxuto (id, resource, deleted). Ela não traz os atributos do cartão (brand, lastDigits, expirationMonth, etc.), pois o token já não existe mais. Se precisar desses dados, consulte o cartão com Read antes de excluí-lo.
Erros
Em caso de falha, a API retorna o envelope de erro padrão com um error.code estável (faça o tratamento pelo code, nunca pela message). Veja Tratamento de Erros e o Catálogo de Códigos de Erro.
error.code | HTTP | Quando ocorre |
|---|---|---|
cardIdIsInvalid | 400 | O cardId informado está malformado (não segue o formato card_…). |
unauthorized | 401 | SelectKey ausente, inválida ou revogada. |
forbidden | 403 | Autenticado, mas sem permissão para excluir este cartão. |
cardNotFound / cardIdNotFound | 404 | Não existe cartão com esse ID nesta conta (ou ele já foi excluído). |
unprocessableEntity | 422 | O cartão não pode ser removido por uma regra de negócio. |
tooManyRequests | 429 | Limite de requisições excedido — respeite error.retryAfterMinutes e repita com backoff. |
serverError | 500 | Erro interno inesperado — tente novamente; se persistir, contate o suporte. |
Exemplo de resposta 404 (cartão inexistente ou já excluído):
{
"error": {
"code": "cardNotFound",
"statusCode": 404,
"category": "client",
"message": "Card not found"
}
}Dica
Trate cardNotFound como sucesso "suave" em rotinas de limpeza: se a meta é garantir que o cartão não exista, um 404 na exclusão significa que o objetivo já foi atingido.
Boas práticas
- Confirme com o usuário. Por ser irreversível, peça confirmação explícita antes de disparar o
DELETE. - Cheque o cartão principal. Antes de excluir, verifique se o cartão é o principal — o campo varia conforme o endpoint: em List é
isPrimary(emdata[]) e em Read éprimary. Se for o principal, defina outro comoprimary(via Criar cartão comprimary: true) para não deixar o cliente sem meio padrão. - Guarde os dados que precisar antes. Como a resposta de exclusão é enxuta, leia o cartão antes se você registra
brand/lastDigitspara auditoria ou exibição. - Registre a exclusão. Mantenha um log (quem, quando, qual
cardId) para auditoria e suporte. - Trate o erro pelo
error.code. UsecardNotFound/cardIdIsInvalidpara mensagens claras ao usuário; reserve retry com backoff para429e5xx. - Não confie em estado em cache. Após excluir, invalide qualquer referência local ao
cardId; cobranças futuras com ele falharão.
Veja também
- Visão geral de Cartões — o objeto, o ciclo de vida e todas as operações.
- Criar cartão — cadastrar/tokenizar um novo cartão (e definir o principal).
- Consultar cartão — ver os detalhes antes de excluir.
- Listar cartões — encontrar todos os cartões de um cliente.
- Convenções da API e Autenticação.
How is this guide?