🇬🇪 Georgia v0.8 - Read transaction list of an account
GET https://open-banking-api.paysera.com/xs2a/georgia/0.8/v1/accounts/{account-id}/transactions
Read transaction reports or transaction lists of a given account ddressed by "account-id", depending on the steering parameter "bookingStatus" together with balances.
For a given account, additional parameters are e.g. the attributes "dateFrom" and "dateTo". The ASPSP might add balance information, if transaction lists without balances are not supported.
Remark: Each transaction may carry bankTransactionCode, the ISO 20022
"Domain-Family-SubFamily" code, and proprietaryBankTransactionCode, Paysera's own classification.
Either key is omitted when Paysera cannot determine it — neither is ever returned as null, so treat
both as optional.
The two collections are read from different sources, and the proprietary value reflects that. Booked
transactions report the transfer type, for example transfer:internal. Pending transactions and the
transaction-details endpoint report the payment rail instead, for example transfer:ge_nbg_rtgs. An
ISO 20022 bankTransactionCode is only present where that value maps onto one, and the Georgian rails
currently map onto none — so expect proprietaryBankTransactionCode alone, and use it as the
categorisation signal.
Authorization​
This endpoint requires mTLS (Mutual TLS) authentication using a valid QWAC certificate.
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
Example (cURL):
curl https://open-banking-api.paysera.com/xs2a/georgia/0.8/v1/endpoint \
--cert qwac-cert.pem \
--key qwac-key.pem \
-H "Content-Type: application/json" \
-H "X-Request-ID: $(uuidgen)"
For detailed authentication guide, see Authentication.
Parameters​
Path Parameters​
| Name | Type | Required | Description |
|---|---|---|---|
account-id | string | ✓ | This identification is denoting the addressed (card) account. |
| The account-id is retrieved by using a "Read Account List" or "Read Card Account list" call. | |||
| The account-id is the "resourceId" attribute of the account structure. | |||
| Its value is constant at least throughout the lifecycle of a given consent. | |||
Query Parameters​
| Name | Type | Required | Description |
|---|---|---|---|
dateFrom | string | Conditional: Starting date (inclusive the date dateFrom) of the transaction list, mandated if no delta access is required | |
| and if bookingStatus does not equal "information". |
For booked transactions, the relevant date is the booking date.
For pending transactions, the relevant date is the entry date, which may not be transparent
neither in this API nor other channels of the ASPSP.
|
| dateTo | string | | End date (inclusive the data dateTo) of the transaction list, default is "now" if not given.
Might be ignored if a delta function is used.
For booked transactions, the relevant date is the booking date.
For pending transactions, the relevant date is the entry date, which may not be transparent
neither in this API nor other channels of the ASPSP.
|
| entryReferenceFrom | string | | This data attribute is indicating that the AISP is in favour to get all transactions after
the transaction with identification entryReferenceFrom alternatively to the above defined period.
This is a implementation of a delta access.
Not supported by Paysera — see the note below the table.
|
| bookingStatus | string | ✓ | Permitted codes are
- "booked",
- "pending" and
- "both" "both" means to request transaction reports of transactions of bookingStatus either "pending" or "booked".
The Berlin Group standard additionally defines "information" and "all". Neither is supported: a request using one of them is rejected with 400 PARAMETER_NOT_SUPPORTED.
|
| deltaList | boolean | | This data attribute is indicating that the AISP is in favour to get all transactions after the last report access for this PSU on the addressed account. This is another implementation of a delta access-report.
Not supported by Paysera — see the note below the table. |
| withBalance | boolean | | If contained, this function reads the list of accessible payment accounts including the booking balance,
if granted by the PSU in the related consent and available by the ASPSP.
Not supported by Paysera — see the note below the table.
|
| offset | integer | | Number of transactions to skip before the returned page. Default 0.
Paysera uses this parameter for pagination: the next link in the response increments it by the page size, which is fixed at 50. Follow the next link as given rather than setting this parameter yourself.
|
entryReferenceFrom, deltaList and withBalance are defined by the Berlin Group standard but
are not supported. A request containing any of them is rejected with 400
PARAMETER_NOT_SUPPORTED.
Response format​
Transaction collections​
A collection is present only when it holds at least one transaction. booked and
pending are omitted — not returned as empty arrays — when the account has no
transactions of that kind in the requested period:
bookingStatus | Collections that may be returned |
|---|---|
booked | booked |
pending | pending |
both | booked, pending, or both |
Pagination​
Transactions are returned in pages of up to 50. The page size is fixed — no parameter changes it.
When further transactions exist in the requested period, the response carries a _links.next entry
pointing at the following page:
"_links": {
"first": { "href": "/xs2a/georgia/0.8/v1/accounts/{account-id}/transactions?dateFrom=2026-03-01&bookingStatus=both" },
"next": { "href": "/xs2a/georgia/0.8/v1/accounts/{account-id}/transactions?dateFrom=2026-03-01&bookingStatus=both&offset=50" }
}
These links sit at the root of the response, next to account and transactions — not
inside transactions._links, which carries only the account link.
Follow _links.next until it is no longer present. A response without it is the last page.
_links.first is present on every transaction list response, including a single-page one. Reading
only the first response returns an incomplete list — this is normal paginated behaviour, not an
error. Both hrefs are paths on the host you called, so treat each as opaque and request it as given
rather than constructing it yourself.
The Berlin Group standard also admits a download link alongside them, for reports of a huge size.
Paysera does not return one.
Errors​
This endpoint may return the following errors:
400 - Bad Request​
The request could not be understood by the server due to malformed syntax or invalid parameters.
Common error codes:
FORMAT_ERROR- Invalid request format or syntaxPARAMETER_NOT_CONSISTENT- Request parameters are inconsistent with each otherPARAMETER_NOT_SUPPORTED- Request contains unsupported parametersSERVICE_INVALID- The addressed service is not valid for the addressed resourcesRESOURCE_UNKNOWN- The addressed resource is unknown relative to the TPPRESOURCE_EXPIRED- The addressed resource has expiredRESOURCE_BLOCKED- The addressed resource is blockedTIMESTAMP_INVALID- The provided timestamp is invalid or malformedPERIOD_INVALID- The provided time period is invalidSCA_METHOD_UNKNOWN- The requested SCA method is not supportedSCA_INVALID- The SCA authentication data is invalidCONSENT_UNKNOWN- The consent ID is unknown or invalidCONSENT_INVALID- The consent is invalid or cannot be usedPAYMENT_FAILED- The payment initiation has failedEXECUTION_DATE_INVALID- The execution date is invalid (e.g., in the past or too far in the future)REQUIRED_KYC_MISSING- Required KYC information is missingSESSIONS_NOT_SUPPORTED- Sessions are not supported by this ASPSPACCESS_EXCEEDED- The access frequency limit has been exceededREQUESTED_FORMATS_INVALID- The requested formats are not supportedBENEFICIARY_WHITELISTING_REQUIRED- This operation requires beneficiary whitelisting
Example response:
{
"title": "Bad Request",
"detail": "Invalid request format or syntax",
"code": "FORMAT_ERROR"
}
401 - Unauthorized​
Certificate authentication failed or is missing.
Common error codes:
CERTIFICATE_INVALID- The TPP certificate is not validCERTIFICATE_EXPIRED- The TPP certificate has expiredCERTIFICATE_BLOCKED- The TPP certificate has been blocked by the ASPSPCERTIFICATE_REVOKED- The TPP certificate has been revokedCERTIFICATE_MISSING- The TPP certificate is missing in the requestROLE_INVALID- The TPP certificate does not have the required role (PIS, AIS, PIIS, etc.)SIGNATURE_INVALID- The request signature is invalid or verification failedSIGNATURE_MISSING- The required signature is missing from the requestCORPORATE_ID_INVALID- The corporate ID in the certificate does not match the registrationPSU_CREDENTIALS_INVALID- The PSU credentials provided are invalidCONSENT_INVALID- The consent token is invalid or has been revoked
Example response:
{
"title": "Unauthorized",
"detail": "The TPP certificate is not valid",
"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 consent ID is unknown or invalidCONSENT_EXPIRED- The consent has expired and can no longer be usedCONSENT_INVALID- The consent is invalid for this operationSERVICE_BLOCKED- The TPP has been blocked from accessing this serviceRESOURCE_UNKNOWN- The requested resource is unknown or does not existRESOURCE_EXPIRED- The requested resource has expiredPRODUCT_INVALID- The payment product is not supported by the ASPSPPRODUCT_UNKNOWN- The addressed payment product is unknownTOKEN_UNKNOWN- The OAuth2 token is unknown or invalidTOKEN_INVALID- The OAuth2 token is invalid or has been revokedTOKEN_EXPIRED- The OAuth2 token has expiredACCESS_EXCEEDED- The number of accesses has exceeded the limit
Example response:
{
"title": "Forbidden",
"detail": "The consent ID is unknown or invalid",
"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 existPRODUCT_UNKNOWN- The addressed payment product is not supported or unknown
Example response:
{
"title": "Not Found",
"detail": "The addressed resource is not found or does not exist",
"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:
{
"title": "Method Not Allowed",
"detail": "The HTTP method is not supported for this service",
"code": "SERVICE_INVALID"
}
406 - Not Acceptable​
The Accept header in the request is not supported. The API requires application/json.
Common error codes:
REQUESTED_FORMATS_INVALID- None of the requested formats are supported
Example response:
{
"title": "Not Acceptable",
"detail": "None of the requested formats are supported",
"code": "REQUESTED_FORMATS_INVALID"
}
408 - Request Timeout​
The request took too long to process and timed out. This may occur if the PSU takes too long to authorize or if external systems are slow to respond.
Example response:
{
"title": "Request Timeout",
"detail": "The request took too long to process and timed out. This may occur if the PSU takes too long to authorize or if external systems are slow to respond."
}
409 - Conflict​
The request conflicts with the current state of the resource.
Common error codes:
STATUS_INVALID- The resource is in a status that does not allow this operation (e.g., trying to cancel an already executed payment)CONSENT_CONFLICT- The consent request conflicts with an existing consentACCESS_EXCEEDED- The access has been attempted too many times
Example response:
{
"title": "Conflict",
"detail": "The resource is in a status that does not allow this operation (e.g., trying to cancel an already executed payment)",
"code": "STATUS_INVALID"
}
415 - Unsupported Media Type​
The Content-Type header in the request is not supported. The API requires application/json.
Example response:
{
"title": "Unsupported Media Type",
"detail": "The Content-Type header in the request is not supported. The API requires `application/json`."
}
429 - Too Many Requests​
The TPP has exceeded the rate limit. Paysera Open Banking API applies the following rate limits:
10 requests per second - Maximum request rate 1000 requests per hour - Hourly quota 20 concurrent requests - Maximum parallel requests
Common error codes:
ACCESS_EXCEEDED- The TPP has sent too many requests in a given timeframe
Example response:
{
"title": "Too Many Requests",
"detail": "The TPP has sent too many requests in a given timeframe",
"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.
Example response:
{
"title": "Internal Server Error",
"detail": "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."
}
503 - Service Unavailable​
The service is temporarily unavailable due to maintenance or overload. The request can be retried after a short delay. Check the Retry-After header if present.
Example response:
{
"title": "Service Unavailable",
"detail": "The service is temporarily unavailable due to maintenance or overload. The request can be retried after a short delay. Check the `Retry-After` header if present."
}
Example​
Request​
GET https://open-banking-api.paysera.com/xs2a/georgia/0.8/v1/accounts/{account-id}/transactions?dateFrom=value&dateTo=value&bookingStatus=value&offset=value
# Certificate authentication via mTLS
Response​
{
"account": {
"iban": "GE00BG0000000000000000"
},
"transactions": {
"booked": [
{
"transactionId": "1234567",
"creditorName": "John Miles",
"creditorAccount": {
"iban": "GE00BG0000000000000000"
},
"transactionAmount": {
"currency": "GEL",
"amount": "-256.67"
},
"bookingDate": "2017-10-25",
"valueDate": "2017-10-26",
"remittanceInformationUnstructured": "Example 1",
"bankTransactionCode": "PMNT-ICDT-BOOK",
"proprietaryBankTransactionCode": "transfer:internal"
},
{
"transactionId": "1234568",
"debtorName": "Paul Simpson",
"debtorAccount": {
"iban": "GE00BG000000000000001"
},
"transactionAmount": {
"currency": "GEL",
"amount": "343.01"
},
"bookingDate": "2017-10-25",
"valueDate": "2017-10-26",
"remittanceInformationUnstructured": "Example 2",
"bankTransactionCode": "PMNT-RCDT-BOOK",
"proprietaryBankTransactionCode": "transfer:internal"
}
],
"pending": [
{
"transactionId": "1234569",
"creditorName": "Claude Renault",
"creditorAccount": {
"iban": "GE00BG0000000000000000"
},
"transactionAmount": {
"currency": "GEL",
"amount": "100.03"
},
"valueDate": "2017-10-26",
"remittanceInformationUnstructured": "Example 3",
"proprietaryBankTransactionCode": "transfer:ge_nbg_rtgs"
}
],
"_links": {
"account": {
"href": "/xs2a/georgia/0.8/v1/accounts/3dc3d5b3-7023-4848-9853-f5400a64e80f"
}
}
},
"_links": {
"first": {
"href": "/xs2a/georgia/0.8/v1/accounts/3dc3d5b3-7023-4848-9853-f5400a64e80f/transactions?dateFrom=2026-03-01&bookingStatus=both"
},
"next": {
"href": "/xs2a/georgia/0.8/v1/accounts/3dc3d5b3-7023-4848-9853-f5400a64e80f/transactions?dateFrom=2026-03-01&bookingStatus=both&offset=50"
}
}
}
AUTHORIZATION: HTTP
REQUEST
RESPONSE
{
"account": {
"iban": "GE00BG0000000000000000"
},
"transactions": {
"booked": [
{
"transactionId": "1234567",
"creditorName": "John Miles",
"creditorAccount": {
"iban": "GE00BG0000000000000000"
},
"transactionAmount": {
"currency": "GEL",
"amount": "-256.67"
},
"bookingDate": "2017-10-25",
"valueDate": "2017-10-26",
"remittanceInformationUnstructured": "Example 1",
"bankTransactionCode": "PMNT-ICDT-BOOK",
"proprietaryBankTransactionCode": "transfer:internal"
},
{
"transactionId": "1234568",
"debtorName": "Paul Simpson",
"debtorAccount": {
"iban": "GE00BG000000000000001"
},
"transactionAmount": {
"currency": "GEL",
"amount": "343.01"
},
"bookingDate": "2017-10-25",
"valueDate": "2017-10-26",
"remittanceInformationUnstructured": "Example 2",
"bankTransactionCode": "PMNT-RCDT-BOOK",
"proprietaryBankTransactionCode": "transfer:internal"
}
],
"pending": [
{
"transactionId": "1234569",
"creditorName": "Claude Renault",
"creditorAccount": {
"iban": "GE00BG0000000000000000"
},
"transactionAmount": {
"currency": "GEL",
"amount": "100.03"
},
"valueDate": "2017-10-26",
"remittanceInformationUnstructured": "Example 3",
"proprietaryBankTransactionCode": "transfer:ge_nbg_rtgs"
}
],
"_links": {
"account": {
"href": "/xs2a/georgia/0.8/v1/accounts/3dc3d5b3-7023-4848-9853-f5400a64e80f"
}
}
},
"_links": {
"first": {
"href": "/xs2a/georgia/0.8/v1/accounts/3dc3d5b3-7023-4848-9853-f5400a64e80f/transactions?dateFrom=2026-03-01&bookingStatus=both"
},
"next": {
"href": "/xs2a/georgia/0.8/v1/accounts/3dc3d5b3-7023-4848-9853-f5400a64e80f/transactions?dateFrom=2026-03-01&bookingStatus=both&offset=50"
}
}
}