Criar Iniciação de Pagamento
Create Payment Initiation V4 API
Visão Geral
A API de Create Payment Initiation V4 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/v4/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}",
"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 |
Objeto details
details| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
localInstrument | String | Sim | Instrumento local (ex: "DICT", "MANU") |
proxy | String | Não | Proxy do recebedor (ex: chave PIX) |
creditorAccount | Object | Sim | Conta do recebedor |
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
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/v4/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_v4_id}",
"brandId": "{enrollment_brand_id}",
"redirectUrl": "{redirect_url}",
"data": {
// ... dados enviados na requisição
},
"journeySessionId": "...",
"applicationId": "...",
"paymentInitiationApi": "PAYMENTS_V4",
"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.
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 about 2 hours ago