PAFA — Consentimiento (0.1.0)

Download OpenAPI specification:

URL: https://pafa.ar License: Apache 2.0

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.

Consentimientos

El recurso consentimiento, expuesto por la entidad transmisora.

Crear un consentimiento

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).

Authorizations:
oauth2
header Parameters
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.

Request Body schema: application/json
required
required
object

Responses

Response Headers
x-fapi-interaction-id
string <uuid>

El mismo UUID que mandó el cliente.

Response Schema: application/json
required
object (Consent)
required
object (Links)
required
object (Meta)

Request samples

Content type
application/json
{
  • "data": {
    • "loggedUser": {
      },
    • "businessEntity": {
      },
    • "permissions": [
      ],
    • "purpose": "Consolidar los saldos de todas las cuentas en una sola vista.",
    • "expirationDateTime": "2027-03-16T14:02:10Z"
    }
}

Response samples

Content type
application/json
{
  • "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": {
      },
    • "businessEntity": {
      },
    • "permissions": [
      ],
    • "purpose": "Consolidar los saldos de todas las cuentas en una sola vista.",
    • "expirationDateTime": "2027-03-16T14:02:10Z",
    • "accounts": [
      ],
    • "rejection": {
      },
    • "revocation": {
      }
    },
  • "meta": {
    • "requestDateTime": "2026-09-16T14:02:10Z"
    }
}

Consultar un consentimiento

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).

Authorizations:
oauth2
path Parameters
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.

header Parameters
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.

Responses

Response Headers
x-fapi-interaction-id
string <uuid>

El mismo UUID que mandó el cliente.

Response Schema: application/json
required
object (Consent)
required
object (Links)
required
object (Meta)

Response samples

Content type
application/json
{
  • "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": {
      },
    • "businessEntity": {
      },
    • "permissions": [
      ],
    • "purpose": "Consolidar los saldos de todas las cuentas en una sola vista.",
    • "expirationDateTime": "2027-03-16T14:02:10Z",
    • "accounts": [
      ],
    • "rejection": {
      },
    • "revocation": {
      }
    },
  • "meta": {
    • "requestDateTime": "2026-09-16T14:02:10Z"
    }
}

Revocar un consentimiento desde el receptor

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}.

Authorizations:
oauth2
path Parameters
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.

header Parameters
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.

Request Body schema: application/json
optional

Opcional. Quién revocó y por qué, para que las dos contabilidades registren lo mismo.

object

Responses

Request samples

Content type
application/json
{
  • "data": {
    • "revokedBy": "USER_AT_RECEIVER",
    • "reason": "string"
    }
}

Response samples

Content type
application/json
{
  • "errors": [
    • {
      }
    ],
  • "meta": {
    • "requestDateTime": "2026-09-16T14:02:10Z"
    }
}

Revocaciones

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.

Notificar la revocación de un consentimiento a la otra punta

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).

Authorizations:
oauth2
header Parameters
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.

Request Body schema: application/json
required
required
object

Responses

Request samples

Content type
application/json
{
  • "data": {
    • "consentId": "urn:pafa:consent:0f9c1b26-6a2e-4f0f-9d0a-6f6c2f6f2f11",
    • "status": "REVOKED",
    • "revokedBy": "USER_AT_TRANSMITTER",
    • "revokedAt": "2026-10-01T09:15:00Z"
    }
}

Response samples

Content type
application/json
{
  • "errors": [
    • {
      }
    ],
  • "meta": {
    • "requestDateTime": "2026-09-16T14:02:10Z"
    }
}