cardTokenId para reutilização segura no seu backend. O endpoint exige o produto tokenization habilitado na conta do merchant.
Pré-requisitos
1
Produto habilitado
O produto Tokenization precisa estar habilitado para o seu merchant. A
ativação é feita pela equipe UvviPay; solicite ao seu contato comercial.
2
Credenciais de API
Use
client-id e client-secret no backend. Nunca exponha o
client-secret no front-end. Veja Autenticação.Como funciona
- Você envia
card+customerparaPOST /v1/vault/tokenize. - A UvviPay resolve o customer pelo
externalCustomerIde, se não encontrar, pelo email na sua conta. Sem correspondência, a API cria o customer. Veja Identidade do customer. - Se já existir um token ativo para o mesmo customer e cartão, a API
devolve o
cardTokenIdexistente com HTTP 201. - Caso contrário, o cartão é guardado no Cofre e a API retorna o novo
cardTokenIdcom HTTP 201.
cardTokenId no seu sistema. Ele identifica o cartão no Cofre e pode ser usado para cobrar via POST /v1/payments sem reenviar PAN/CVV.
Identidade do customer
A API resolve o customer nesta ordem:- Busca o
externalCustomerIdna sua conta. - Se não encontrar, busca o email na sua conta.
- Se não encontrar, cria o customer com os dados do request.
externalCustomerId precisam apontar para o mesmo customer. Se
houver conflito, a API responde HTTP 422 e não guarda o cartão:
NOTA: o segundo conflito também ocorre quando o email pertence a um
customer sem
externalCustomerId — por exemplo, um customer criado
pelo checkout público. A API não vincula o externalCustomerId do request
a esse customer.
Para evitar os conflitos, envie sempre o mesmo par email +
externalCustomerId para a mesma pessoa.
Chamadas concorrentes
Para o mesmo customer e cartão:- Se já houver token ativo, a API reutiliza o
cardTokenIdsem criar outro. - Chamadas concorrentes sem token ativo podem ambas acionar o provedor; a
persistência é serializada. Ao final, as respostas bem-sucedidas convergem
para o mesmo
cardTokenIdativo (HTTP 201).
cardTokenId
salvo no seu sistema sempre que possível.
Exemplo
Resposta (201)
Cobrando com o cardTokenId
Use o token noPOST /v1/payments enviando card.cardTokenId no lugar dos dados abertos do cartão, sem PAN, sem CVV e sem customer:
- Envie
ipcom IPv4 ou IPv6, sem porta e sem colchetes. - A API exige
ip. - Texto vazio em
ipconta como ausente. - O
ipnão muda a cobrança para MIT. card.cardTokenIdnão pode ser combinado comnumber/cvv/holderName/expiração; nome do portador, validade e bandeira vêm do Cofre.customernão pode ser enviado comcard.cardTokenId; a cobrança usa o customer já vinculado ao token no Cofre e a transação fica ligada a esse customer.- A reutilização do token não depende de busca por email. O vínculo do token com o customer é definido na tokenização e não muda.
- A cobrança é sempre CIT (cliente presente). Não envie iniciação MIT neste endpoint.
- Token de outra conta, inativo ou inexistente responde 404.
- Recomendamos enviar
x-idempotency-keypara retry seguro.
Campos importantes
Rate limit
POST /v1/vault/tokenize tem limite de 30 requisições por minuto por IP.
Se exceder, a API responde HTTP 429 Too Many Requests.
Não há headers Retry-After nem X-RateLimit-* neste endpoint.
Retries
Dados sensíveis
Nunca registre em logs, métricas ou traces:- PAN completo (
card.number) - CVV/CVC (
card.securityCode) client-secret- network token completo ou criptogramas
Erros
Próximos passos
Guardar cartão no Cofre
Referência completa do endpoint
Cobrar com o token
POST /v1/payments com card.cardTokenId

