SelectwinDOCS
Cartões

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 DELETE no mesmo cardId já 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: true em 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çalhoObrigatórioValor
SelectKeySimSua 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âmetroTipoObrigatórioDescrição
cardIdstringSimIdentificador 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

CampoTipoDescrição
idstringID do cartão removido (card_…).
resourcestringSempre "card". Identifica o tipo do objeto.
deletedbooleantrue quando o cartão foi efetivamente removido.
merchantobjectDados do estabelecimento dono do cartão.
merchant.namestringNome do estabelecimento.
merchant.merchantIdstringID do estabelecimento (bus_…).
merchant.isSubAccountbooleanIndica se é uma subconta.
_linksobjectLinks 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.codeHTTPQuando ocorre
cardIdIsInvalid400O cardId informado está malformado (não segue o formato card_…).
unauthorized401SelectKey ausente, inválida ou revogada.
forbidden403Autenticado, mas sem permissão para excluir este cartão.
cardNotFound / cardIdNotFound404Não existe cartão com esse ID nesta conta (ou ele já foi excluído).
unprocessableEntity422O cartão não pode ser removido por uma regra de negócio.
tooManyRequests429Limite de requisições excedido — respeite error.retryAfterMinutes e repita com backoff.
serverError500Erro 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 (em data[]) e em Read é primary. Se for o principal, defina outro como primary (via Criar cartão com primary: 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/lastDigits para 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. Use cardNotFound/cardIdIsInvalid para mensagens claras ao usuário; reserve retry com backoff para 429 e 5xx.
  • 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

How is this guide?

On this page