Cancelamento de consentimento
Visão Geral
A API permite o cancelamento de consentimentos de sweeping accounts. O cancelamento pode ser realizado tanto para consentimentos que ainda estão aguardando autorização quanto para consentimentos já autorizados.
Endpoint
PATCH /open-keys/itp/api/v2/sweeping-accounts/v2/payment-initiation/{id}
Onde {id} é o identificador único do payment initiation retornado na criação do consentimento.
Autenticação
A API requer autenticação OAuth2 com uma das seguintes permissões:
journey: Para fluxos que utilizam redirecionamento à detentora de contaapp: Para integrações diretas via API
O token de acesso deve ser enviado no header:
Authorization: Bearer {access_token}
Estrutura da Requisição
Payload Completo
{
"data": {
"status": "CANC",
"cancellation": {
"cancelledBy": {
"document": {
"identification": "12345678909",
"rel": "CPF"
}
}
}
}
}Campos da Requisição
Nível Raiz
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
data | Object | Sim | Objeto contendo os dados de cancelamento |
Objeto data
data| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
status | Enum | Sim | Status para o qual o consentimento deve ir. Valor único: "CANC" |
cancellation | Object | Sim | Objeto contendo informações sobre quem solicitou o cancelamento |
Objeto cancellation
cancellation| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
cancelledBy | Object | Sim | Informações do usuário pagador que solicitou o cancelamento |
Objeto cancelledBy
cancelledBy| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
document | Object | Sim | Documento de identificação do usuário que solicitou cancelamento |
Objeto document
document| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
identification | String | Sim | Número do documento (CPF: 11 dígitos). Exemplo: "12345678909" |
rel | String | Sim | Tipo do documento. Exemplo: "CPF" |
Validações Importantes
- Status: O campo
statusdeve ser exatamente"CANC" - Documento: O CPF informado em
cancellation.cancelledBy.document.identificationdeve corresponder ao CPF do usuário logado (quando usando escopojourney) - Estado do Consentimento: O consentimento deve estar em um estado cancelável:
AWAITING_AUTHORISATIONAUTHORISEDPARTIALLY_ACCEPTED
- Payment Initiation ID: O
idinformado na URL deve existir e pertencer à aplicação autenticada
Implementação
Fluxo de Cancelamento
O cancelamento pode ocorrer de duas formas, dependendo do escopo de autenticação:
1. Fluxo com journey (Redirecionamento)
journey (Redirecionamento)Quando o token possui o escopo journey:
- O sistema valida o
opaqueTokenIddo usuário - Busca o CPF do usuário na sessão de jornada
- Valida que o CPF informado corresponde ao usuário logado
- Verifica o estado atual do consentimento na detentora de conta
- Se o consentimento estiver autorizado, cancela todos os pagamentos pendentes
- Cancela o consentimento na detentora de conta
- Atualiza o status da sessão de jornada
- Retorna o payment initiation atualizado
Uso: Quando o cancelamento é realizado pelo usuário através do fluxo de jornada.
2. Fluxo com app (API Direta)
app (API Direta)Quando o token possui o escopo app:
- O sistema valida a aplicação autenticada
- Verifica o estado atual do consentimento na detentora de conta
- Se o consentimento estiver autorizado, cancela todos os pagamentos pendentes
- Cancela o consentimento na detentora de conta
- Atualiza o status da sessão de jornada
- Retorna o payment initiation atualizado
Uso: Para cancelamentos realizados diretamente via API pela aplicação.
Comportamento do Cancelamento
Consentimentos Aguardando Autorização
Quando um consentimento está em AWAITING_AUTHORISATION ou PARTIALLY_ACCEPTED:
- O consentimento é cancelado diretamente na detentora de conta
- O status da sessão de jornada é atualizado para
CANCELLED - Nenhum pagamento precisa ser cancelado (pois ainda não foram criados)
Consentimentos Autorizados
Quando um consentimento está em AUTHORISED:
- Cancelamento do Consentimento: Após cancelar os pagamentos, o consentimento é cancelado na detentora de conta
- Atualização de Status: O status da sessão de jornada é atualizado para
CANCELLED
Exemplo de Requisição (cURL)
curl -X PATCH \
https://api.exemplo.com/open-keys/itp/api/v2/sweeping-accounts/v1/payment-initiation/{id} \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"data": {
"status": "CANC",
"cancellation": {
"cancelledBy": {
"document": {
"identification": "12345678909",
"rel": "CPF"
}
}
}
}
}'import requests
def cancel_sweeping_accounts_consent(payment_initiation_id):
url = f"https://api.exemplo.com/open-keys/itp/api/v2/sweeping-accounts/v1/payment-initiation/{payment_initiation_id}"
headers = {
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
payload = {
"data": {
"status": "CANC",
"cancellation": {
"cancelledBy": {
"document": {
"identification": "12345678909",
"rel": "CPF"
}
}
}
}
}
response = requests.patch(url, json=payload, headers=headers)
response.raise_for_status()
return response.json()
result = cancel_sweeping_accounts_consent("uuid-do-payment-initiation")
print("Consentimento cancelado:", result)Resposta da API
Sucesso (200 OK)
A API retorna um objeto contendo o payment initiation atualizado:
{
"id": "uuid-do-payment-initiation",
"brandId": "6894f1db86d49fedbec6cd13",
"redirectUrl": "http://localhost:8080/callback",
"data": {
// ... dados originais do consentimento
},
"journeySessionId": "uuid-da-journey-session",
"applicationId": "uuid-da-aplicacao",
"paymentInitiationApi": "SWEEPING_ACCOUNTS_V2",
"ofConsentId": "id-do-consentimento-na-detentora",
"ofConsent": {
"status": "REVOKED"
// ... outros dados do consentimento
},
"ofPayments": [
// ... lista de pagamentos (se houver)
],
"status": "CANCELLED",
"createdAt": 1234567890,
"updatedAt": 1234567890
}Campos Importantes da Resposta
| Campo | Tipo | Descrição |
|---|---|---|
id | String | Identificador único do payment initiation |
ofConsent | Object | Objeto contendo o estado atualizado do consentimento |
ofConsent.status | String | Status do consentimento após cancelamento (geralmente REVOKED) |
ofPayments | Array | Lista de pagamentos associados (se houver) |
status | String | Status atual do payment initiation |
Erros Comuns
400 Bad Request
{
"error": "Validation Error",
"message": "Campo 'status' deve ser 'CANC'"
}Causas comuns:
- Campo
statuscom valor diferente de"CANC" - Campos obrigatórios ausentes
- Formato de documento inválido
401 Unauthorized
{
"error": "Unauthorized",
"message": "Token inválido ou expirado"
}Solução: Verifique se o token de acesso é válido e possui as permissões necessárias (journey ou app).
403 Forbidden
{
"error": "Forbidden",
"message": "cpf not found"
}Solução: Quando usando escopo journey, certifique-se de que o CPF informado corresponde ao usuário logado na sessão de jornada.
404 Not Found
{
"error": "Not Found",
"message": "Payment initiation não encontrado"
}Solução: Verifique se o id informado na URL existe e pertence à aplicação autenticada.
422 Unprocessable Entity
{
"error": "Unprocessable Entity",
"message": "cannot cancel consent with status: CONSUMED"
}Solução: O consentimento não pode ser cancelado porque já foi consumido ou está em um estado que não permite cancelamento.
Updated about 5 hours ago