Criar Iniciação de Pagamento - v5
Create Payment Initiation V5 API
Visão Geral
A API de Create Payment Initiation V5 permite a criação de iniciações de pagamento usando um vínculo (enrollment) já autorizado. Este tipo de consentimento permite que uma instituição iniciadora de pagamento realize pagamentos utilizando autenticação FIDO (WebAuthn) para autorização.
Características Principais
- Uso de Vínculo Autorizado: Requer um enrollment previamente autorizado com FIDO
- Controle de Validade: Define data de vencimento do consentimento
Endpoint
POST /open-keys/itp/api/v2/payments/v5/payment-initiation
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
{
"brandId": "{enrollment_brand_id}",
"redirectUrl": "{redirect_url}",
"directoryCallback": false,
"enrollment": {
"rp": "{fido_rp}",
"platform": "{fido_platform}",
"enrollmentId": "{itp_enrollment_id}"
},
"data": {
"loggedUser": {
"document": {
"identification": "{enrollment_cpf}",
"rel": "CPF"
}
},
"creditor": {
"cpfCnpj": "{cpf_recebedor}",
"personType": "{tipo_pessoa_recebedor}",
"name": "{nome_recebedor}"
},
"payment": {
"type": "PIX",
"date": "{payment_date}",
"currency": "BRL",
"amount": "{valor}",
"purpose": "{purpose}",
"details": {
"localInstrument": "{payment_local_instrument}",
"proxy": "{payment_proxy}",
"creditorAccount": {
"accountType": "{account_type}",
"ispb": "{ispb}",
"issuer": "{issuer}",
"number": "{account_number}"
}
}
},
"remittanceInformation": "{descricao}"
}
}Campos da Requisição
Nível Raiz
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
brandId | String | Sim | Identificador único da brand (máximo 36 caracteres) |
redirectUrl | URL | Sim | URL de redirecionamento autorizada pela aplicação |
directoryCallback | Boolean | Não | Indica se o redirecionamento é direto do diretório |
enrollment | Object | Sim | Dados do vínculo FIDO autorizado |
data | Object | Sim | Objeto contendo os dados do pagamento |
Objeto enrollment
enrollment| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
rp | String | Sim | Relying Party ID do FIDO |
platform | String | Sim | Plataforma do dispositivo FIDO |
enrollmentId | String | Sim | ID do vínculo autorizado |
Objeto data
data| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
loggedUser | Object | Sim | Dados do usuário logado na instituição iniciadora |
creditor | Object | Sim | Dados do recebedor |
payment | Object | Sim | Detalhes do pagamento |
remittanceInformation | String | Não | Informações adicionais do pagamento |
Objeto loggedUser
loggedUser| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
document | Object | Sim | Documento de identificação do usuário |
Objeto document
document| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
identification | String | Sim | Número do documento (CPF: 11 dígitos) |
rel | String | Sim | Tipo do documento (ex: "CPF") |
Objeto creditor
creditor| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | String | Sim | Nome completo do recebedor |
cpfCnpj | String | Sim | CPF (11 dígitos) ou CNPJ (14 dígitos) sem formatação |
personType | Enum | Sim | Tipo de pessoa: PESSOA_NATURAL ou PESSOA_JURIDICA |
Objeto payment
payment| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
type | String | Sim | Tipo de pagamento (ex: "PIX") |
date | String | Sim | Data do pagamento (AAAA-MM-DD) |
currency | String | Sim | Moeda (ex: "BRL") |
amount | String | Sim | Valor do pagamento (formato: "XXXXX.XX") |
details | Object | Sim | Detalhes específicos do pagamento |
purpose | String | Quando type = "PIX" | Representa qual a finalidade da transação recebida. (enum: "IMMEDIATE", "SINGLE_SCHEDULED", "RECURRENT_SCHEDULED", "WITHDRAW", "CHANGE") |
Objeto details
details| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
localInstrument | String | Sim | Instrumento local (ex: "DICT", "MANU", "APDN", "QRDN", "APES", "QRES", "INIC") |
proxy | String | Não | Proxy do recebedor (ex: chave PIX) |
creditorAccount | Object | Sim | Conta do recebedor |
payloadJWS | String | Não | Representa o payloadJWS obtido pela ITP na leitura do QR dinâmico. Deve ser enviado quando o localInstrument for "APDN" ou "QRDN". Quando localInstrument = QRDN, o payloadJWS é usado para validar valor, chave Pix, recebedor, status e prazos da cobrança. Um payloadJWS inválido é rejeitado com HTTP 422. |
Objeto creditorAccount
creditorAccount| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
accountType | String | Sim | Tipo da conta (ex: "CACC", "TRAN") |
ispb | String | Sim | ISPB da instituição |
issuer | String | Sim | Emissor da conta |
number | String | Sim | Número da conta |
Formato de Valores Monetários
Todos os valores monetários devem seguir o formato:
- Padrão:
^((\d{1,16}.\d{2}))$ - Exemplo:
"10000.00","150.50","25.00" - Mínimo: 4 caracteres (ex:
"0.01") - Máximo: 19 caracteres
Validações Importantes
- Enrollment: O vínculo deve estar autorizado e válido
- Redirect URL: Deve estar cadastrada e autorizada para a aplicação
- Brand ID: Deve existir no sistema
- Payment Date: Deve ser futura ou atual
- Creditor Account: Deve ser válida para o tipo de pagamento
QuandoValidações de QR Code Dinâmico (QRDN)localInstrument = QRDN, os dados da cobrança são obtidos dopayloadJWSenviado na requisição. Eles são comparados com os dados do pagamento antes da criação do consentimento. Se alguma validação falhar, a requisição é rejeitada com HTTP 422 e o consentimento não é criado.Validação Regra typedo errodata.fieldpayloadJWS Deve ser um payloadJWS válido, obtido na leitura do QR Code dinâmico a definir payloadJWSValor payment.amountdeve ser igual ao valor da cobrança (ver "Regra de valor")QRDN_AMOUNT_MISMATCHpayment.amountChave Pix payment.details.proxydeve ser igual à chave Pix da cobrançaQRDN_PROXY_MISMATCHpayment.details.proxyRecebedor creditor.cpfCnpjdeve ser igual ao CPF/CNPJ do recebedor da cobrançaQRDN_CREDITOR_MISMATCHcreditor.cpfCnpjStatus A cobrança deve estar ACTIVEouATIVA. Qualquer outro status é rejeitadoa definir — Expiração Quando a cobrança tiver expiração, ela não pode estar expirada a definir — Vencimento Quando houver vencimento e validade após vencimento, o pagamento deve estar dentro do prazo a definir — Regra de valor – COB x COBV- COB (cobrança imediata): vale
valor.original. Sevalor.modalidadeAlteracao = 1, o pagador pode alterar o valor. - COBV (cobrança com vencimento): vale obrigatoriamente
valor.final, sem alteração. Sevalor.finalnão existir nopayloadJWS, a requisição é rejeitada.
As validações se aplicam somente a
QRDN. As modalidadesDICT,MANU,QRES,APDN,APESeINICnão mudam. - COB (cobrança imediata): vale
Implementação
Fluxo de Criação de Payment Initiation
A criação de payment initiation 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 cria uma sessão de jornada (
journey-session) - Cria o registro de payment initiation
- Cria o consentimento na detentora de conta
- Retorna a URL de autorização para redirecionamento
Uso: Quando o usuário precisa ser redirecionado para autorizar o pagamento na detentora de conta.
2. Fluxo com app (API Direta)
app (API Direta)Quando o token possui o escopo app:
- O sistema valida o
redirectUrlda aplicação - Cria uma sessão de jornada automaticamente
- Cria o registro de payment initiation
- Cria o consentimento na detentora de conta
- Retorna a URL de autorização
Uso: Para integrações diretas via API sem necessidade de redirecionamento imediato.
Exemplo de Requisição (cURL)
curl -X POST \
https://api.exemplo.com/open-keys/itp/api/v2/payments/v5/payment-initiation \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"brandId": "{enrollment_brand_id}",
"redirectUrl": "{redirect_url}",
"directoryCallback": false,
"enrollment": {
"rp": "{fido_rp}",
"platform": "{fido_platform}",
"enrollmentId": "{itp_enrollment_id}"
},
"data": {
"loggedUser": {
"document": {
"identification": "{enrollment_cpf}",
"rel": "CPF"
}
},
"creditor": {
"cpfCnpj": "{cpf_recebedor}",
"personType": "{tipo_pessoa_recebedor}",
"name": "{nome_recebedor}"
},
"payment": {
"type": "PIX",
"date": "{payment_date}",
"currency": "BRL",
"amount": "{valor}",
"details": {
"localInstrument": "{payment_local_instrument}",
"proxy": "{payment_proxy}",
"creditorAccount": {
"accountType": "{account_type}",
"ispb": "{ispb}",
"issuer": "{issuer}",
"number": "{account_number}"
}
}
},
"remittanceInformation": "{descricao}"
}
}'Resposta da API
Sucesso (200 OK)
A API retorna um objeto contendo:
{
"id": "{payment_v5_id}",
"brandId": "{enrollment_brand_id}",
"redirectUrl": "{redirect_url}",
"data": {
// ... dados enviados na requisição
},
"journeySessionId": "...",
"applicationId": "...",
"paymentInitiationApi": "PAYMENTS_V5",
"ofConsentId": "...",
"authorizationUrl": "..."
}Campos Importantes da Resposta
| Campo | Tipo | Descrição |
|---|---|---|
id | String | Identificador único do payment initiation |
journeySessionId | String | ID da sessão de jornada criada |
ofConsentId | String | ID do consentimento na detentora de conta |
Erros Comuns
400 Bad Request
{
"error": "Validation Error",
"message": "Campo 'enrollmentId' é obrigatório"
}Causas comuns:
- Campos obrigatórios ausentes
- Formato de dados inválido (datas, valores monetários)
- Enrollment não autorizado ou 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": "this redirectUrl is not allowed for this application"
}Solução: Certifique-se de que o redirectUrl está cadastrado e autorizado para a aplicação.
404 Not Found
{
"error": "Not Found",
"message": "Brand não encontrada"
}Solução: Verifique se o brandId informado existe no sistema.
422 Unprocessable Entity – dados do pagamento divergentes da cobrança do QR Code dinâmico (QRDN_*) ou payloadJWS inválido.
Boas Práticas
- Validação de Dados: Valide todos os dados antes de enviar a requisição
- Tratamento de Erros: Implemente tratamento adequado para todos os códigos de erro possíveis
- Segurança: Nunca exponha tokens de acesso no frontend ou logs
- URLs de Redirecionamento: Use HTTPS em produção para
redirectUrl - Enrollment: Garanta que o vínculo está autorizado antes de usar
- Valores Monetários: Valide o formato antes de enviar
Limites e Restrições
- Enrollment: Deve estar autorizado com FIDO
- Valores Monetários: Formato
XXXXX.XX - Redirect URL: Deve estar autorizada para a aplicação
Notas Adicionais
- O campo
remittanceInformationé opcional e pode conter informações adicionais sobre o pagamento
Updated 1 day ago