Download OpenAPI specification:
El consentimiento como recurso con estado propio: crearlo, consultarlo y revocarlo, y la notificación de una revocación a la otra punta. Es el contrato mínimo que hace implementables las decisiones de la capa. El motivo de cada campo está en el escrito.
El receptor crea el consentimiento antes de mandar a la persona a autorizarlo. Nace en
AWAITING_AUTHORISATION; pasa a AUTHORISED cuando la persona autoriza en la pantalla del
transmisor, o a REJECTED si rechaza o si vence la ventana de autorización.
Lo que el receptor pide: quién es la persona (y, si actúa por una persona jurídica, cuál), qué permisos, con qué finalidad y hasta cuándo. Las cuentas no se piden acá: las elige la persona al autorizar, y el recurso las registra en ese momento.
Se llama con un access token de client_credentials con scope consents, atado al
cliente por mTLS o DPoP (el escrito, decisión 3). El vínculo entre este recurso y el
token que después lo representa se hace en el pedido de autorización, con
authorization_details de tipo pafa:consent (el escrito, decisión 5).
| x-fapi-interaction-id required | string <uuid> Example: 6f0a0c2e-3b1d-4d6c-9a4e-2c1f9e4a7b10 UUID de correlación de la interacción. Lo genera el cliente y el servidor lo devuelve en la respuesta; es lo que une lo que cada punta registró de la misma llamada. |
| x-fapi-auth-date | string Example: Wed, 16 Sep 2026 14:02:10 GMT Fecha y hora en que la persona se autenticó por última vez en el receptor, en formato RFC 7231. Se manda cuando la llamada la origina una persona presente. |
| x-customer-user-agent | string <= 255 characters User agent de la persona en el receptor, cuando la llamada la origina una persona presente. |
required | object |
| x-fapi-interaction-id | string <uuid> El mismo UUID que mandó el cliente. |
required | object (Consent) |
required | object (Links) |
required | object (Meta) |
{- "data": {
- "loggedUser": {
- "document": {
- "type": "CUIL",
- "number": "20123456786"
}
}, - "businessEntity": {
- "document": {
- "type": "CUIT",
- "number": "30712345678"
}
}, - "permissions": [
- "ACCOUNTS_READ",
- "ACCOUNTS_BALANCES_READ",
- "RESOURCES_READ"
], - "purpose": "Consolidar los saldos de todas las cuentas en una sola vista.",
- "expirationDateTime": "2027-03-16T14:02:10Z"
}
}{- "data": {
- "consentId": "urn:pafa:consent:0f9c1b26-6a2e-4f0f-9d0a-6f6c2f6f2f11",
- "status": "AWAITING_AUTHORISATION",
- "creationDateTime": "2026-09-16T14:02:10Z",
- "statusUpdateDateTime": "2026-09-16T14:05:42Z",
- "loggedUser": {
- "document": {
- "type": "CUIL",
- "number": "20123456786"
}
}, - "businessEntity": {
- "document": {
- "type": "CUIT",
- "number": "30712345678"
}
}, - "permissions": [
- "ACCOUNTS_READ"
], - "purpose": "Consolidar los saldos de todas las cuentas en una sola vista.",
- "expirationDateTime": "2027-03-16T14:02:10Z",
- "accounts": [
- "acc-8f1e2c7a-3b4d-4e5f-9a6b-7c8d9e0f1a2b"
], - "rejection": {
- "reason": "USER_REJECTED",
- "rejectedAt": "2026-09-16T15:02:10Z"
}, - "revocation": {
- "revokedBy": "USER_AT_TRANSMITTER",
- "revokedAt": "2026-10-01T09:15:00Z",
- "reason": "string"
}
}, - "meta": {
- "requestDateTime": "2026-09-16T14:02:10Z"
}
}Devuelve el recurso con su estado actual. Es lo que alimenta el panel del titular en las dos puntas (el escrito, decisión 7) y la alternativa a la notificación para enterarse de una revocación: un receptor que consulta antes de leer datos ve el estado que el transmisor hace cumplir.
Sólo el cliente que creó el consentimiento puede consultarlo; para otro cliente el recurso
no existe (404, no 403: un 403 admitiría que existe y quién lo tiene).
| consentId required | string (ConsentId) <= 53 characters ^urn:pafa:consent:[0-9a-f]{8}-[0-9a-f]{4}-[0-... Example: urn:pafa:consent:0f9c1b26-6a2e-4f0f-9d0a-6f6c2f6f2f11 Identificador del consentimiento, único en el ecosistema. |
| x-fapi-interaction-id required | string <uuid> Example: 6f0a0c2e-3b1d-4d6c-9a4e-2c1f9e4a7b10 UUID de correlación de la interacción. Lo genera el cliente y el servidor lo devuelve en la respuesta; es lo que une lo que cada punta registró de la misma llamada. |
| x-fapi-auth-date | string Example: Wed, 16 Sep 2026 14:02:10 GMT Fecha y hora en que la persona se autenticó por última vez en el receptor, en formato RFC 7231. Se manda cuando la llamada la origina una persona presente. |
| x-customer-user-agent | string <= 255 characters User agent de la persona en el receptor, cuando la llamada la origina una persona presente. |
| x-fapi-interaction-id | string <uuid> El mismo UUID que mandó el cliente. |
required | object (Consent) |
required | object (Links) |
required | object (Meta) |
{- "data": {
- "consentId": "urn:pafa:consent:0f9c1b26-6a2e-4f0f-9d0a-6f6c2f6f2f11",
- "status": "AWAITING_AUTHORISATION",
- "creationDateTime": "2026-09-16T14:02:10Z",
- "statusUpdateDateTime": "2026-09-16T14:05:42Z",
- "loggedUser": {
- "document": {
- "type": "CUIL",
- "number": "20123456786"
}
}, - "businessEntity": {
- "document": {
- "type": "CUIT",
- "number": "30712345678"
}
}, - "permissions": [
- "ACCOUNTS_READ"
], - "purpose": "Consolidar los saldos de todas las cuentas en una sola vista.",
- "expirationDateTime": "2027-03-16T14:02:10Z",
- "accounts": [
- "acc-8f1e2c7a-3b4d-4e5f-9a6b-7c8d9e0f1a2b"
], - "rejection": {
- "reason": "USER_REJECTED",
- "rejectedAt": "2026-09-16T15:02:10Z"
}, - "revocation": {
- "revokedBy": "USER_AT_TRANSMITTER",
- "revokedAt": "2026-10-01T09:15:00Z",
- "reason": "string"
}
}, - "meta": {
- "requestDateTime": "2026-09-16T14:02:10Z"
}
}El titular revocó en el receptor, o el receptor deja de necesitar el acceso. El transmisor
pasa el recurso a REVOKED, registra desde dónde y por qué, y dispara la cascada: el dato
deja de salir en el acto y los tokens asociados dejan de servir (el escrito,
decisión 6).
Revocar un consentimiento que ya está en un estado terminal es idempotente: responde 204
y no cambia nada. Revocar uno en AWAITING_AUTHORISATION lo pasa a REJECTED, porque nunca
hubo grant que revocar.
La revocación desde el transmisor —en su propio panel— no pasa por este endpoint: es una
operación interna, y su consecuencia visible es la notificación al receptor
(POST /revocations) y el estado que devuelve GET /consents/{consentId}.
| consentId required | string (ConsentId) <= 53 characters ^urn:pafa:consent:[0-9a-f]{8}-[0-9a-f]{4}-[0-... Example: urn:pafa:consent:0f9c1b26-6a2e-4f0f-9d0a-6f6c2f6f2f11 Identificador del consentimiento, único en el ecosistema. |
| x-fapi-interaction-id required | string <uuid> Example: 6f0a0c2e-3b1d-4d6c-9a4e-2c1f9e4a7b10 UUID de correlación de la interacción. Lo genera el cliente y el servidor lo devuelve en la respuesta; es lo que une lo que cada punta registró de la misma llamada. |
| x-fapi-auth-date | string Example: Wed, 16 Sep 2026 14:02:10 GMT Fecha y hora en que la persona se autenticó por última vez en el receptor, en formato RFC 7231. Se manda cuando la llamada la origina una persona presente. |
| x-customer-user-agent | string <= 255 characters User agent de la persona en el receptor, cuando la llamada la origina una persona presente. |
Opcional. Quién revocó y por qué, para que las dos contabilidades registren lo mismo.
object |
{- "data": {
- "revokedBy": "USER_AT_RECEIVER",
- "reason": "string"
}
}{- "errors": [
- {
- "code": "INVALID_PERMISSION_SET",
- "title": "string",
- "detail": "string"
}
], - "meta": {
- "requestDateTime": "2026-09-16T14:02:10Z"
}
}La notificación que la punta donde el titular revocó le manda a la otra. La obligación de notificar es simétrica (el escrito, decisión 5); el mecanismo es una pregunta abierta, y este endpoint es el mínimo que la hace implementable.
La punta donde el titular revocó le avisa a la otra. Quien notifica lo dice su certificado de transporte o su autenticación de cliente, no el cuerpo: por eso el cuerpo no tiene un campo «quién manda». El receptor de la notificación debe reflejar el estado en su panel y dejar de usar los tokens que tuviera vivos.
La notificación es idempotente por consentId: recibir dos veces la misma no cambia nada y
responde 202 igual. El perfil fija la obligación de notificar y no fija plazo; el plazo y
si este mecanismo es obligatorio son preguntas abiertas (el escrito, § Lo que el
perfil todavía no fija).
| x-fapi-interaction-id required | string <uuid> Example: 6f0a0c2e-3b1d-4d6c-9a4e-2c1f9e4a7b10 UUID de correlación de la interacción. Lo genera el cliente y el servidor lo devuelve en la respuesta; es lo que une lo que cada punta registró de la misma llamada. |
required | object |
{- "data": {
- "consentId": "urn:pafa:consent:0f9c1b26-6a2e-4f0f-9d0a-6f6c2f6f2f11",
- "status": "REVOKED",
- "revokedBy": "USER_AT_TRANSMITTER",
- "revokedAt": "2026-10-01T09:15:00Z"
}
}{- "errors": [
- {
- "code": "INVALID_PERMISSION_SET",
- "title": "string",
- "detail": "string"
}
], - "meta": {
- "requestDateTime": "2026-09-16T14:02:10Z"
}
}