Skip to main content

🇪🇺 Berlin Group v1.3 - Payment initiation request

POST https://open-banking-api.paysera.com/xs2a/berlin/1.3/v1/payments/{payment-product}

This method is used to initiate a payment at the ASPSP.

Variants of payment initiation requests​

This method to initiate a payment initiation at the ASPSP can be sent with either a JSON body.

There are the following payment products:

  • Payment products with payment information in JSON format:
    • sepa-credit-transfers
    • instant-sepa-credit-transfers
    • target-2-payments
    • domestic-ron-transfers

Furthermore the request body depends on the payment-service:

  • payments: A single payment initiation request.

Single and multilevel SCA Processes​

The payment initiation requests are independent from the need of one or multilevel SCA processing, i.e. independent from the number of authorisations needed for the execution of payments.

But the response messages are specific to either one SCA processing or multilevel SCA processing.

For payment initiation with multilevel SCA, this specification requires an explicit start of the authorisation, i.e. links directly associated with SCA processing like 'scaRedirect' or 'scaOAuth' cannot be contained in the response message of a Payment Initiation Request for a payment, where multiple authorisations are needed. Also if any data is needed for the next action, like selecting an SCA method is not supported in the response, since all starts of the multiple authorisations are fully equal. In these cases, first an authorisation sub-resource has to be generated following the 'startAuthorisation' link.

Authorization​

This endpoint requires mTLS (Mutual TLS) authentication using a valid QWAC certificate. Consent and payment endpoints authenticate on the certificate alone: no access token or Consent-ID header is needed.

Requirements:

  • Valid QWAC certificate issued by a qualified trust service provider (QTSP)
  • Certificate must be registered with Paysera
  • Certificate organization identifier must match your TPP registration in the EBA register
  • X-Request-ID header with a UUID on every request

Request signing: not used. This API does not read the Digest, x-jws-signature or TPP-Signature-Certificate headers — see Security.

Example (cURL):

curl -X POST https://open-banking-api.paysera.com/xs2a/berlin/1.3/v1/payments/sepa-credit-transfers \
--cert qwac-cert.pem \
--key qwac-key.pem \
-H "X-Request-ID: $(uuidgen)" \
-H "Content-Type: application/json" \
-d @request.json

For detailed authentication guide, see Authentication.

Parameters​

Path Parameters​

NameTypeRequiredDescription
payment-productstring✓The addressed payment product. Supported values: sepa-credit-transfers, instant-sepa-credit-transfers, target-2-payments, domestic-ron-transfers.

Request Body​

JSON request body for a payment initiation request message.

There are the following payment-products supported:

  • "sepa-credit-transfers" with JSON-Body
  • "instant-sepa-credit-transfers" with JSON-Body
  • "target-2-payments" with JSON-Body
  • "domestic-ron-transfers" with JSON-Body

There are the following payment-services supported:

  • "payments"

All optional, conditional and predefined but not yet used fields are defined.

Errors​

This endpoint may return the following errors. The list is shared by every endpoint of this API, so not every code applies to every endpoint.

Every error listed below is returned with a tppMessages array. Each message has a category and a code, and may add a path (the header or field at fault) and a text.

400 - Bad Request​

The request could not be understood by the server due to malformed syntax or invalid parameters.

Common error codes:

  • CONSENT_UNKNOWN - The consent in the Consent-ID header is unknown or cannot be used by this TPP
  • FORMAT_ERROR - Invalid request format or syntax, for example a malformed body field or an X-Request-ID that is not a UUID
  • FORMAT_INVALID - The mandatory Consent-ID header is missing
  • PARAMETER_NOT_SUPPORTED - Request contains unsupported parameters
  • PERIOD_INVALID - The requested consent validity period is outside the allowed range
  • SERVICE_INVALID - The addressed service is not valid for the addressed resources
  • SESSIONS_NOT_SUPPORTED - Combined AIS and PIS sessions (combinedServiceIndicator) are not supported

Example response:

{
"tppMessages": [
{
"category": "ERROR",
"code": "FORMAT_ERROR",
"path": "X-Request-ID",
"text": "Request ID must be a valid UUID string."
}
]
}

401 - Unauthorized​

The certificate, the access token or the consent could not be used to authenticate the request.

Common error codes:

  • CERTIFICATE_INVALID - The TPP certificate is not valid or is not registered with Paysera
  • CERTIFICATE_MISSING - The TPP certificate is missing in the request
  • CONSENT_EXPIRED - The consent has expired and can no longer be used
  • CONSENT_INVALID - The consent is invalid for this operation
  • ROLE_INVALID - The TPP certificate does not have the role this endpoint requires (AIS or PIS)
  • TOKEN_INVALID - The access token does not carry the scope this endpoint requires
  • TOKEN_EXPIRED - The access token has expired, has been revoked or could not be verified
  • TOKEN_UNKNOWN - The access token is unknown or invalid

Example response:

{
"tppMessages": [
{
"category": "ERROR",
"code": "CERTIFICATE_INVALID"
}
]
}

403 - Forbidden​

The TPP does not have the necessary permissions or the resource access is forbidden.

Common error codes:

  • CONSENT_UNKNOWN - The addressed consent is unknown to this TPP, or the TPP may not perform this consent operation
  • RESOURCE_UNKNOWN - The addressed resource is unknown to this TPP

Example response:

{
"tppMessages": [
{
"category": "ERROR",
"code": "CONSENT_UNKNOWN"
}
]
}

404 - Not Found​

The requested resource could not be found.

Common error codes:

  • RESOURCE_UNKNOWN - The addressed resource is not found or does not exist
  • SERVICE_INVALID - The request path does not match any endpoint of this API

Example response:

{
"tppMessages": [
{
"category": "ERROR",
"code": "RESOURCE_UNKNOWN"
}
]
}

405 - Method Not Allowed​

The HTTP method used is not allowed for this endpoint.

Common error codes:

  • SERVICE_INVALID - The HTTP method is not supported for this service

Example response:

{
"tppMessages": [
{
"category": "ERROR",
"code": "SERVICE_INVALID"
}
]
}

429 - Too Many Requests​

The TPP has used up the account data accesses its consent allows.

Each consent allows its agreed frequencyPerDay accesses (4 by default, or a higher value agreed with Paysera) to each account data resource per 24 hours. Requests sent with the PSU-IP-Address header under a recurring consent do not count towards the limit.

Common error codes:

  • ACCESS_EXCEEDED - The consent's frequencyPerDay limit for this resource has been reached

Example response:

{
"tppMessages": [
{
"category": "ERROR",
"code": "ACCESS_EXCEEDED"
}
]
}

500 - Internal Server Error​

An unexpected error occurred on the server side. This indicates a problem with the ASPSP's system. Please try again later or contact Paysera support if the issue persists.

Common error codes:

  • INTERNAL_SERVER_ERROR - The request could not be completed; try again later
  • INVALID_TPP_CONFIGURATION - The TPP's configuration at Paysera is invalid; contact Paysera support

Example response:

{
"tppMessages": [
{
"category": "ERROR",
"code": "INTERNAL_SERVER_ERROR"
}
]
}

Example​

Request​

POST https://open-banking-api.paysera.com/xs2a/berlin/1.3/v1/payments/{payment-product}
X-Request-ID: 99391c7e-ad88-49ec-a2ad-99ddcb1f7721
Content-Type: application/json
# plus the QWAC certificate presented during the TLS handshake

Response​

{
"transactionStatus": "RCVD",
"paymentId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"_links": {
"scaOAuth": {
"href": "/.well-known/oauth-authorization-server"
},
"self": {
"href": "/xs2a/berlin/1.3/v1/payments/sepa-credit-transfers/7c9e6679-7425-40de-944b-e07fc1f90ae7"
},
"status": {
"href": "/xs2a/berlin/1.3/v1/payments/sepa-credit-transfers/7c9e6679-7425-40de-944b-e07fc1f90ae7/status"
},
"scaStatus": {
"href": "/xs2a/berlin/1.3/v1/payments/sepa-credit-transfers/7c9e6679-7425-40de-944b-e07fc1f90ae7/authorisations/123auth456"
}
}
}

The scaOAuth link points at the OAuth 2.0 authorisation server metadata document. Read it, then send the PSU through its authorization_endpoint. Paysera does not return a scaRedirect link.

AUTHORIZATION: HTTP

REQUEST

Base URL
https://open-banking-api.paysera.com
Body REQUIRED
{
"instructedAmount": {
"currency": "EUR",
"amount": "123.50"
},
"debtorAccount": {
"iban": "DE40100100103307118608"
},
"creditorName": "Merchant123",
"creditorAccount": {
"iban": "DE02100100109307118603"
},
"remittanceInformationUnstructured": "Ref Number Merchant"
}

RESPONSE

CREATED
{
"transactionStatus": "RCVD",
"paymentId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"_links": {
"scaOAuth": {
"href": "/.well-known/oauth-authorization-server"
},
"self": {
"href": "/xs2a/berlin/1.3/v1/payments/sepa-credit-transfers/7c9e6679-7425-40de-944b-e07fc1f90ae7"
},
"status": {
"href": "/xs2a/berlin/1.3/v1/payments/sepa-credit-transfers/7c9e6679-7425-40de-944b-e07fc1f90ae7/status"
},
"scaStatus": {
"href": "/xs2a/berlin/1.3/v1/payments/sepa-credit-transfers/7c9e6679-7425-40de-944b-e07fc1f90ae7/authorisations/123auth456"
}
}
}