Authorise Payment Initiation API

Visão Geral

A API de Authorise Payment Initiation permite autorizar um pagamento usando um vínculo (enrollment) autorizado com FIDO (WebAuthn). Este tipo de autorização utiliza autenticação biométrica ou por dispositivo para confirmar a transação.

Características Principais

  • Uso de Vínculo Autorizado: Requer um enrollment previamente autorizado com FIDO
  • Autenticação FIDO: Utiliza assertion WebAuthn para autorização
  • Autorização Final: Após essa etapa, o usuário pode realizar o PIX

Endpoint

POST /open-keys/itp/api/v2/enrollments/v2/payment-initiation/{itp_enrollment_id}/authorise

Nota: O {itp_enrollment_id} nesta requisição é o ID retornado na criação do vínculo de dispositivo.

Autenticação

A API requer autenticação OAuth2 com uma das seguintes permissões:

  • journey: Para fluxos que utilizam redirecionamento à detentora de conta
  • app: 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

{
    "paymentInitiationId": "{payment_v4_id}",
    "data": {
        "state": "{payment_v4_id}",
        "riskSignals": {
            "deviceId": "12345",
            "isRootedDevice": true,
            "screenBrightness": 0,
            "elapsedTimeSinceBoot": 0,
            "osVersion": "string",
            "userTimeZoneOffset": "-03",
            "language": "pt",
            "screenDimensions": {
                "height": 768,
                "width": 1024
            },
            "accountTenure": "2024-09-13",
            "isCallingProgress": true,
            "isDevModeEnabled": true,
            "isMockGPS": true,
            "isEmulated": true,
            "isMonkeyRunner": true,
            "isCharging": true,
            "antennaInformation": "string",
            "isUsbConnected": true,
            "integrity": {
                "appRecognitionVerdict": "string",
                "deviceRecognitionVerdict": "string"
            }
        },
        "fidoAssertion": {
            "id": "...",
            "rawId": "...",
            "type": "public-key",
            "response": {
                "authenticatorData": "...",
                "clientDataJSON": "...",
                "signature": "...",
                "userHandle": "..."
            }
        }
    }
}

Nota: O campo data enviado nessa requisição é a resposta do assertion no WebAuthn que foi feito depois do fido-sign-options.

Campos da Requisição

Nível Raiz

CampoTipoObrigatórioDescrição
paymentInitiationIdStringSimID do payment initiation criado (PAYMENTS_V4)
dataObjectSimObjeto contendo os dados da autorização FIDO

Validações Importantes

  1. Enrollment ID: Deve corresponder a um vínculo autorizado com FIDO
  2. Payment Initiation ID: Deve ser um ID válido de payment initiation criado

Implementação

Fluxo de Autorização

A autorização ocorre após:

  1. Criação do payment initiation v4
  2. Obtenção das opções de assinatura FIDO (fido-sign-options)
  3. Geração da assertion WebAuthn
  4. Envio desta requisição de autorização

Resultado: Após a autorização bem-sucedida, o usuário pode realizar o PIX.

Exemplo de Requisição (cURL)

curl -X POST \
  https://api.exemplo.com/open-keys/itp/api/v2/enrollments/v2/payment-initiation/{itp_enrollment_id}/authorise \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "paymentInitiationId": "{payment_v4_id}",
    "data": {
        "state": "{payment_v4_id}",
        "riskSignals": {
            "deviceId": "12345",
            "isRootedDevice": true,
            "screenBrightness": 0,
            "elapsedTimeSinceBoot": 0,
            "osVersion": "string",
            "userTimeZoneOffset": "-03",
            "language": "pt",
            "screenDimensions": {
                "height": 768,
                "width": 1024
            },
            "accountTenure": "2024-09-13",
            "isCallingProgress": true,
            "isDevModeEnabled": true,
            "isMockGPS": true,
            "isEmulated": true,
            "isMonkeyRunner": true,
            "isCharging": true,
            "antennaInformation": "string",
            "isUsbConnected": true,
            "integrity": {
                "appRecognitionVerdict": "string",
                "deviceRecognitionVerdict": "string"
            }
        },
        "fidoAssertion": {
            "id": "...",
            "rawId": "...",
            "type": "public-key",
            "response": {
                "authenticatorData": "...",
                "clientDataJSON": "...",
                "signature": "...",
                "userHandle": "..."
            }
        }
    }
}'

Resposta da API

Sucesso (200 OK)

A API retorna um objeto confirmando a autorização:

{
    "id": "{payment_v4_id}",
    "paymentInitiationApi": "PAYMENTS_V4",
    "ofConsent": {
        "status": "AUTHORISED"
    }
}

Campos Importantes da Resposta

CampoTipoDescrição
idStringIdentificador único do payment initiation
paymentInitiationApiStringTipo da API (PAYMENTS_V4)
ofConsentObjectStatus do consentimento na detentora

Objeto ofConsent

CampoTipoDescrição
statusStringStatus do consentimento (AUTHORISED após autorização)

Erros Comuns

400 Bad Request

{
    "error": "Validation Error",
    "message": "Campo 'fidoAssertion' é obrigatório"
}

Causas comuns:

  • Campos obrigatórios ausentes
  • Formato inválido da assertion FIDO
  • Assertion expirada ou inválida

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": "Enrollment não autorizado ou inválido"
}

Solução: Certifique-se de que o enrollment está autorizado com FIDO.

404 Not Found

{
    "error": "Not Found",
    "message": "Payment Initiation não encontrado"
}

Solução: Verifique se o paymentInitiationId está correto.

Boas Práticas

  1. Validação de Dados: Valide todos os dados antes de enviar a requisição
  2. Tratamento de Erros: Implemente tratamento adequado para todos os códigos de erro possíveis
  3. Segurança: Nunca exponha tokens de acesso no frontend ou logs
  4. FIDO Assertion: Garanta que a assertion seja gerada recentemente e seja válida

Limites e Restrições

  • Enrollment: Deve estar autorizado com FIDO
  • Payment Initiation: Deve ser um ID válido de PAYMENTS_V4
  • FIDO Assertion: Deve ser válida e não expirada
  • Campos Obrigatórios: Todos os campos marcados como obrigatórios

Notas Adicionais

  • Após essa autorização bem-sucedida, o usuário poderá realizar o PIX
  • A assertion FIDO deve ser obtida através do WebAuthn após o fido-sign-options