# Consent & Account Information

The Account Information Service (AIS) allows you to retrieve various information on accounts that the PSU has granted access to via an active consent. A consent is an object that holds information about what permissions a PSU has given you to fetch its account information from a particular bank. This guide shows the steps for creating a consent, and for using it to make requests to the AIS. 

> Requests to the Consent Service and AIS APIs require an [access token](get_access_token.md) with scope `accountinformation` `corporate`.

:::lock

Always include `PSU-ID` in all requests to ensure proper consent tracking per user and maintain a seamless user experience.

:::

##

### 1. Create Consent

The first step is to create a consent, where we define the the access permissions that the PSU agrees to grant. 
                                                          
#### Endpoint
```http
POST /psd2/consent/v1/consents
```

#### Request Headers

| Name                     | Type         | Description                                                                                                           |
| ------------------------ | ------------ | --------------------------------------------------------------------------------------------------------------------- |
| `X-Request-ID`           | string(uuid) | The ID of the request, unique to the call, as determined by the initiating party.                                     |
| `X-BicFi`                | string       | The BIC of the bank to which the request is addressed.                                                                |
| `PSU-ID`                 | string       | The ID used to identify the PSU at the bank. Typically a local social security number or another unique login ID.     |
| `PSU-Corporate-ID`       | string       | The Corporate ID of the PSU when acting on behalf of an organisation, e.g. Org. nummer for SE, KVK for NL.            |
| `TPP-Redirect-Preferred` | boolean      | Indicates a preference for redirect-based SCA over decoupled when set to `true`. The bank may not support both types. |
| `PSU-IP-Address`         | string(ipv4) | The IP address of the PSU from the HTTP request between the PSU and the TPP.                                          |
| `PSU-User-Agent`         | string       | The Agent header from the HTTP request between the PSU and the TPP, identifying the browser used by the PSU.          |

#### Request Body

| Name                       | Type         | Description                                                                                                                                                                                                                            |
| -------------------------- | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `access`                   | object       | Requested access services for a consent. This can be left empty to access all available accounts, or it can be populated with IBANs to limit consent to specific accounts.                                                             |
| `combinedServiceIndicator` | boolean      | Indicates that the Payment Initiation Service (PIS) will be addressed in the same session.                                                                                                                                             |
| `frequencyPerDay`          | integer      | The number of times per day the TPP may access the account data without PSU interaction. For one-off access, this attribute is set to “1”. If not otherwise agreed bilaterally between TPP and bank, the frequency is less equal to 4. |
| `recurringIndicator`       | boolean      | Indicates that access to the data should be recurring when set to `true`.                                                                                                                                                              |
| `validUntil`               | string(date) | The end date of the consent in ISO 8601 format, e.g. 2025-10-31.                                                                                                                                                                       |

```bash
curl -X POST "https://api.openbankingplatform.com/psd2/consent/v1/consents" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -H "X-Request-ID: 8ef6348b-3f9f-4e1c-a768-fc586af7badf" \
  -H "X-BicFi: ESSESESS" \
  -H "PSU-ID: 199002092386" \
  -H "PSU-Corporate-ID: 5560160680" \
  -H "TPP-Redirect-Preferred: false" \
  -H "PSU-IP-Address: 152.120.171.187" \
  -H "PSU-User-Agent: mozilla/5.0" \
  -d '{
        "access": {},
        "combinedServiceIndicator": false,
        "frequencyPerDay": 4,
        "recurringIndicator": true,
        "validUntil": "2099-12-31"
      }'
```

#### Response
```json
{
  "consentStatus": "received",
  "consentId": "70c6d203-e1d1-43ff-9e42-07e5dda640ba",
  "scaMethods": [
    {
      "authenticationType": "PUSH_OTP",
      "authenticationMethodId": "mbid",
      "name": "Mobilt BankID"
    },
    {
      "authenticationType": "CHIP_OTP",
      "authenticationMethodId": "mbid_same_device",
      "name": "Mobile BankID on this device"
    },
    {
      "authenticationType": "PHOTO_OTP",
      "authenticationMethodId": "mbid_animated_qr_token",
      "name": "Mobile BankID on another device"
    }
  ],
  "_links": {
    "self": {
      "href": "/psd2/consent/v1/consents/70c6d203-e1d1-43ff-9e42-07e5dda640ba"
    },
    "status": {
      "href": "/psd2/consent/v1/consents/70c6d203-e1d1-43ff-9e42-07e5dda640ba/status"
    },
    "startAuthorisation": {
      "href": "/psd2/consent/v1/consents/70c6d203-e1d1-43ff-9e42-07e5dda640ba/authorisations"
    }
  }
}
```

### 2. Authorise Consent 

After creating the consent, it must be authorised by the PSU before it can be used. See the [Authorisations](authorisations.md) guide for instructions on how to complete the authorisation process. 

### 3. Get Consent Status 

Once you complete the authorisation flow, check the status of the consent by polling the Get Consent Status endpoint. 

#### Endpoint

```http
GET /psd2/consent/v1/consents/{consentId}/status
```

#### Path Parameters

| Name        | Type         | Description                             |
| ----------- | ------------ | --------------------------------------- |
| `consentId` | string(uuid) | The ID of the consent that was created. |

#### Request Headers

| Name                     | Type         | Description                                                                                                           |
| ------------------------ | ------------ | --------------------------------------------------------------------------------------------------------------------- |
| `X-Request-ID`           | string(uuid) | The ID of the request, unique to the call, as determined by the initiating party.                                     |
| `X-BicFi`                | string       | The BIC of the bank to which the request is addressed.                                                                |
| `PSU-ID`                 | string       | The ID used to identify the PSU at the bank. Typically a local social security number or another unique login ID.     |
| `PSU-Corporate-ID`       | string       | The Corporate ID of the PSU when acting on behalf of an organisation, e.g. Org. nummer for SE, KVK for NL.            |
| `TPP-Redirect-Preferred` | boolean      | Indicates a preference for redirect-based SCA over decoupled when set to `true`. The bank may not support both types. |
| `PSU-IP-Address`         | string(ipv4) | The IP address of the PSU from the HTTP request between the PSU and the TPP.                                          |
| `PSU-User-Agent`         | string       | The Agent header from the HTTP request between the PSU and the TPP, identifying the browser used by the PSU.          |

```bash
curl -X GET "https://api.openbankingplatform.com/psd2/consent/v1/consents/70c6d203-e1d1-43ff-9e42-07e5dda640ba/status" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "X-Request-ID: 5a441866-935b-41e9-ba3a-2952a351b706" \
  -H "X-BicFi: ESSESESS" \
  -H "PSU-ID: 199002092386" \
  -H "PSU-Corporate-ID: 5560160680" \
  -H "TPP-Redirect-Preferred: false" \
  -H "PSU-IP-Address: 152.120.171.187" \
  -H "PSU-User-Agent: mozilla/5.0"
```

#### Response

```json
{
  "consentStatus": "valid"
}
```

Consents can have a number of different [statuses](enums.md#consentstatus). Here, you want to check if the consent was rejected, in which case `consentStatus` would have the value `rejected`. If not, then you are done. 

### 4. Get Account List

After obtaining a valid consent, you can start making requests to the AIS. The first step to fetch a list of accounts for the PSU, which can optionally be queried to include balances via the `withBalance` parameter. 

#### Endpoint

```http
GET /psd2/accountinformation/v1/accounts
```

#### Query Parameters

| Name          | Type    | Description                                                                       |
| ------------- | ------- | --------------------------------------------------------------------------------- |
| `withBalance` | boolean | Includes balance information for each account in the response when set to `true`. |

#### Request Headers

| Name                     | Type         | Description                                                                                                           |
| ------------------------ | ------------ | --------------------------------------------------------------------------------------------------------------------- |
| `X-Request-ID`           | string(uuid) | The ID of the request, unique to the call, as determined by the initiating party.                                     |
| `X-BicFi`                | string       | The BIC of the bank to which the request is addressed.                                                                |
| `Consent-ID`             | string       | The ID of the related consent.                                                                                        |
| `PSU-ID`                 | string       | The ID used to identify the PSU at the bank. Typically a local social security number or another unique login ID.     |
| `PSU-Corporate-ID`       | string       | The Corporate ID of the PSU when acting on behalf of an organisation, e.g. Org. nummer for SE, KVK for NL.            |
| `TPP-Redirect-Preferred` | boolean      | Indicates a preference for redirect-based SCA over decoupled when set to `true`. The bank may not support both types. |
| `PSU-IP-Address`         | string(ipv4) | The IP address of the PSU from the HTTP request between the PSU and the TPP.                                          |
| `PSU-User-Agent`         | string       | The Agent header from the HTTP request between the PSU and the TPP, identifying the browser used by the PSU.          |

:::sparkles

Include an [`X-Feature-Flags`](api.md#X-Feature-Flags) header set to `new-balances` to get our harmonised balance types.

:::

```bash
curl -X GET "https://api.openbankingplatform.com/psd2/accountinformation/v1/accounts?withBalance=true" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "X-Request-ID: 034315f0-702d-46af-ac4d-186f877f603e" \
  -H "X-BicFi: ESSESESS" \
  -H "Consent-ID: 70c6d203-e1d1-43ff-9e42-07e5dda640ba" \
  -H "PSU-ID: 199002092386" \
  -H "PSU-Corporate-ID: 5560160680" \
  -H "TPP-Redirect-Preferred: false" \
  -H "PSU-IP-Address: 152.120.171.187" \
  -H "PSU-User-Agent: mozilla/5.0"
```

#### Response

```json
{
  "accounts": [
    {
      "resourceId": "ab82e294-b01d-4c21-b53e-9a39df7507d1",
      "iban": "SE4550000000058398257466",
      "bban": "58398257466",
      "currency": "SEK",
      "product": "Business Account",
      "cashAccountType": "OTHR",
      "status": "enabled",
      "bic": "ESSESESS",
      "usage": "ORGA",
      "balances": [
        {
          "balanceAmount": {
            "currency": "SEK",
            "amount": "18959.990"
          },
          "balanceType": "interimAvailable",
          "creditLimitIncluded": true
        },
        {
          "balanceAmount": {
            "currency": "SEK",
            "amount": "16550.990"
          },
          "balanceType": "interimBooked",
          "creditLimitIncluded": false
        },
        {
          "balanceAmount": {
            "currency": "SEK",
            "amount": "18000.990"
          },
          "balanceType": "valueDated",
          "creditLimitIncluded": false
        }
      ],
      "ownerName": "Acme AB",
      "creditLimit": {
        "currency": "SEK",
        "amount": "0.000"
      }
    },
    {
      "resourceId": "d8d010fa-93c1-41c8-a352-bc0f6e788ab4",
      "iban": "SE1412000000000012345678",
      "bban": "12345678",
      "currency": "SEK",
      "product": "Savings account",
      "cashAccountType": "OTHR",
      "status": "enabled",
      "bic": "ESSESESS",
      "usage": "ORGA",
      "balances": [
        {
          "balanceAmount": {
            "currency": "SEK",
            "amount": "5062.090"
          },
          "balanceType": "interimAvailable",
          "creditLimitIncluded": true
        },
        {
          "balanceAmount": {
            "currency": "SEK",
            "amount": "3062.090"
          },
          "balanceType": "interimBooked",
          "creditLimitIncluded": false
        },
        {
          "balanceAmount": {
            "currency": "SEK", 
            "amount": "5000.090"
          }, 
          "balanceType": "valueDated", 
          "creditLimitIncluded": false
        }
      ],
      "ownerName": "Acme AB",
      "creditLimit": {
        "currency": "SEK",
        "amount": "0.000"
      }
    }
  ]
}
```

### 5. Get Account Details

Once you have a list of accounts, the Get Account Details request allows you to retrieve more detailed information about a specific account. For this request, you need to specify the account for which to fetch details by providing an `accountId`. This ID is equivalent to the `resourceId` of an account listed in the previous step. 

#### Endpoint

```http
GET /psd2/accountinformation/v1/accounts/{accountId}
```

#### Path Parameters

| Name        | Type   | Description                      |
| ----------- | ------ | -------------------------------- |
| `accountId` | string | The ID of the specified account. |

#### Query Parameters

| Name          | Type    | Description                                                                       |
| ------------- | ------- | --------------------------------------------------------------------------------- |
| `withBalance` | boolean | Includes balance information for each account in the response when set to `true`. |

#### Request Headers

| Name                     | Type         | Description                                                                                                           |
| ------------------------ | ------------ | --------------------------------------------------------------------------------------------------------------------- |
| `X-Request-ID`           | string(uuid) | The ID of the request, unique to the call, as determined by the initiating party.                                     |
| `X-BicFi`                | string       | The BIC of the bank to which the request is addressed.                                                                |
| `Consent-ID`             | string       | The ID of the related consent.                                                                                        |
| `PSU-ID`                 | string       | The ID used to identify the PSU at the bank. Typically a local social security number or another unique login ID.     |
| `PSU-Corporate-ID`       | string       | The Corporate ID of the PSU when acting on behalf of an organisation, e.g. Org. nummer for SE, KVK for NL.            |
| `TPP-Redirect-Preferred` | boolean      | Indicates a preference for redirect-based SCA over decoupled when set to `true`. The bank may not support both types. |
| `PSU-IP-Address`         | string(ipv4) | The IP address of the PSU from the HTTP request between the PSU and the TPP.                                          |
| `PSU-User-Agent`         | string       | The Agent header from the HTTP request between the PSU and the TPP, identifying the browser used by the PSU.          |

```bash
curl -X GET "https://api.openbankingplatform.com/psd2/accountinformation/v1/accounts/ab82e294-b01d-4c21-b53e-9a39df7507d1?withBalance=true" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "X-Request-ID: c57b0341-b4c3-4cfc-a6d8-6c1e6e534b2e" \
  -H "X-BicFi: ESSESESS" \
  -H "Consent-ID: 70c6d203-e1d1-43ff-9e42-07e5dda640ba" \
  -H "PSU-ID: 199002092386" \
  -H "PSU-Corporate-ID: 5560160680" \
  -H "TPP-Redirect-Preferred: false" \
  -H "PSU-IP-Address: 152.120.171.187" \
  -H "PSU-User-Agent: mozilla/5.0"
```

#### Response

```json
{
  "resourceId": "ab82e294-b01d-4c21-b53e-9a39df7507d1",
  "iban": "SE4550000000058398257466",
  "bban": "58398257466",
  "bankgiroNumber": "12345678",
  "currency": "SEK",
  "product": "Business Account",
  "cashAccountType": "OTHR",
  "status": "enabled",
  "bic": "ESSESESS",
  "usage": "ORGA",
  "balances": [
    {
      "balanceAmount": {
        "currency": "SEK",
        "amount": "18959.990"
      },
      "balanceType": "interimAvailable",
      "creditLimitIncluded": true
    },
    {
      "balanceAmount": {
        "currency": "SEK",
        "amount": "16550.990"
      },
      "balanceType": "interimBooked",
      "creditLimitIncluded": false
    },
    {
      "balanceAmount": {
        "currency": "SEK",
        "amount": "18000.990"
      },
      "balanceType": "valueDated",
      "creditLimitIncluded": false
    }
  ],
  "ownerName": "Company AB",
  "creditLimit": {
    "currency": "SEK",
    "amount": "0.000"
  },
  "paymentsEnabled": true,
  "lastTransactionEnrichmentDateTime": "2025-04-23T20:51:16.803+00:00",
  "lastTransactionEnrichmentDateTimeUtc": "2025-04-23T20:51:16.803Z"
}
```

### 6. Get Balances

This request allows you to retrieve the balances for a specific account in the account list. For this request, you need to specify the account for which to fetch balances by providing an `accountId`, as you did in the previous request. 

#### Endpoint

```http
GET /psd2/accountinformation/v1/accounts/{accountId}/balances
```

#### Path Parameters

| Name        | Type   | Description                      |
| ----------- | ------ | -------------------------------- |
| `accountId` | string | The ID of the specified account. |

#### Request Headers

| Name                     | Type         | Description                                                                                                           |
| ------------------------ | ------------ | --------------------------------------------------------------------------------------------------------------------- |
| `X-Request-ID`           | string(uuid) | The ID of the request, unique to the call, as determined by the initiating party.                                     |
| `X-BicFi`                | string       | The BIC of the bank to which the request is addressed.                                                                |
| `Consent-ID`             | string       | The ID of the related consent.                                                                                        |
| `PSU-ID`                 | string       | The ID used to identify the PSU at the bank. Typically a local social security number or another unique login ID.     |
| `PSU-Corporate-ID`       | string       | The Corporate ID of the PSU when acting on behalf of an organisation, e.g. Org. nummer for SE, KVK for NL.            |
| `TPP-Redirect-Preferred` | boolean      | Indicates a preference for redirect-based SCA over decoupled when set to `true`. The bank may not support both types. |
| `PSU-IP-Address`         | string(ipv4) | The IP address of the PSU from the HTTP request between the PSU and the TPP.                                          |
| `PSU-User-Agent`         | string       | The Agent header from the HTTP request between the PSU and the TPP, identifying the browser used by the PSU.          |

```bash
curl -X GET "https://api.openbankingplatform.com/psd2/accountinformation/v1/accounts/ab82e294-b01d-4c21-b53e-9a39df7507d1/balances" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "X-Request-ID: 685d5dc0-f03c-45a1-aeec-42e1e6505164" \
  -H "X-BicFi: ESSESESS" \
  -H "Consent-ID: 70c6d203-e1d1-43ff-9e42-07e5dda640ba" \
  -H "PSU-ID: 199002092386" \
  -H "PSU-Corporate-ID: 5560160680" \
  -H "TPP-Redirect-Preferred: false" \
  -H "PSU-IP-Address: 152.120.171.187" \
  -H "PSU-User-Agent: mozilla/5.0" 
```

#### Response

```json 
{
  "balances": [
    {
      "balanceAmount": {
        "currency": "SEK",
        "amount": "18959.990"
      },
      "balanceType": "interimAvailable",
      "creditLimitIncluded": true
    },
    {
      "balanceAmount": {
        "currency": "SEK",
        "amount": "16550.990"
      },
        "balanceType": "interimBooked",
        "creditLimitIncluded": false
    },
    {
      "balanceAmount": {
        "currency": "SEK",
        "amount": "18000.990"
      },
      "balanceType": "valueDated",
      "creditLimitIncluded": false
    }
  ]
}
```

:::note 

Alternatively to this request, include balances in the Get Account List and Get Account Details responses by using the `withBalance` query parameter, as shown in step 4-5. 

:::

### 7. Get Transaction List

The next request allows you to retrieve a paginated list of booked and pending transactions for a specific account. This request also requires us to specify the account for which to fetch a list of transactions by providing an `accountId`. You then also need to define whether to fetch booked, pending or both types of transactions by querying the `bookingStatus` parameter. In this guide, we will request a list of booked transactions on the account. 

:::zap

ISO-enriched transactions should be fetched once per day. Check `lastTransactionEnrichmentDateTime` in the Get Account Details response to determine if today's enrichment has been applied yet.

:::

#### Endpoint

```http
GET /psd2/accountinformation/v1/accounts/{accountId}/transactions
```
#### Path Parameters

| Name        | Type   | Description                      |
| ----------- | ------ | -------------------------------- |
| `accountId` | string | The ID of the specified account. |

#### Query Parameters

| Name            | Type         | Description                                                                  |
| --------------- | ------------ | ---------------------------------------------------------------------------- |
| `bookingStatus` | string(enum) | Specifies which transactions to retrieve: `booked`, `pending` or `both`.     |
| `dateFrom`      | string(date) | The start date for the transaction list in ISO 8601 format, e.g. 2025-10-31. |
| `dateTo`        | string(date) | The end date for the transaction list in ISO 8601 format, e.g. 2025-10-31.   |

#### Request Headers

| Name                     | Type         | Description                                                                                                           |
| ------------------------ | ------------ | --------------------------------------------------------------------------------------------------------------------- |
| `X-Request-ID`           | string(uuid) | The ID of the request, unique to the call, as determined by the initiating party.                                     |
| `X-BicFi`                | string       | The BIC of the bank to which the request is addressed.                                                                |
| `Consent-ID`             | string       | The ID of the related consent.                                                                                        |
| `PSU-ID`                 | string       | The ID used to identify the PSU at the bank. Typically a local social security number or another unique login ID.     |
| `PSU-Corporate-ID`       | string       | The Corporate ID of the PSU when acting on behalf of an organisation, e.g. Org. nummer for SE, KVK for NL.            |
| `TPP-Redirect-Preferred` | boolean      | Indicates a preference for redirect-based SCA over decoupled when set to `true`. The bank may not support both types. |
| `PSU-IP-Address`         | string(ipv4) | The IP address of the PSU from the HTTP request between the PSU and the TPP.                                          |
| `PSU-User-Agent`         | string       | The Agent header from the HTTP request between the PSU and the TPP, identifying the browser used by the PSU.          |

:::warning

Some banks grant access to an extended transaction history only for a short period after consent creation (1 hour or less). After this window, the range may be reduced or additional SCA may be required. 

:::

```bash
curl -X GET "https://api.openbankingplatform.com/psd2/accountinformation/v1/accounts/ab82e294-b01d-4c21-b53e-9a39df7507d1/transactions?bookingStatus=booked&dateFrom=2025-04-21&dateTo=2025-04-22" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "X-Request-ID: 49880132-d0a7-4ab8-8b8d-3614bda92c25" \
  -H "X-BicFi: ESSESESS" \
  -H "Consent-ID: 70c6d203-e1d1-43ff-9e42-07e5dda640ba" \
  -H "PSU-ID: 199002092386" \
  -H "PSU-Corporate-ID: 5560160680" \
  -H "TPP-Redirect-Preferred: false" \
  -H "PSU-IP-Address: 152.120.171.187" \
  -H "PSU-User-Agent: mozilla/5.0" 
```

#### Response

:::warning 

The `transactionId` is issued by the bank and may change until the transaction reaches its final state. Some banks do not provide a `transactionId` for pending transactions. 

:::

```json
{
  "account": {
    "iban": "SE4550000000058398257466"
  },
  "transactions": {
    "booked": [
      {
        "transactionId": "ecc47512-ea64-4844-92d4-82d0a5968753", 
        "bookingDate": "2025-04-22", 
        "valueDate": "2025-04-22", 
        "transactionAmount": {
            "currency": "SEK", 
            "amount": "4165.00"
        }, 
        "creditorAccount": {},
        "debtorAccount": {},
        "remittanceInformationUnstructured": "Example 3",  
        "balanceAfterTransaction": {
          "balanceAmount": {
            "currency": "SEK", 
            "amount": "13227.090"
          },
          "balanceType": "interimBooked"
        },
        "_links": {
          "transactionDetails": {
            "href": "/psd2/accountinformation/v1/accounts/ab82e294-b01d-4c21-b53e-9a39df7507d1/transactions/ecc47512-ea64-4844-92d4-82d0a5968753"
          }
        },
        "proprietaryBankTransactionCodeText": "Transfer",
        "additionalInformation": "Payment for invoice",
        "transactionFees": []
      },
      {
        "transactionId": "0b1b498d-3951-4a48-8c71-3ca7bc9bf988",
        "entryReference": "LBE1234-5678-0000001",
        "bookingDate": "2025-04-22", 
        "valueDate": "2025-04-22",
        "transactionAmount": {
          "currency": "SEK", 
          "amount": "-1250.00"
        },
        "creditorName": "Merchant AB", 
        "creditorAccount": {
          "bankgiroNumber": "1234-5678"
        },
        "debtorName": "Acme AB", 
        "debtorAccount": {
          "bankgiroNumber": "1234-5679"
        },
        "remittanceInformationUnstructured": "Example 2", 
        "remittanceInformationStructured": "INV-12345", 
        "remittanceInformationStructuredArray": [
          {
            "referredDocumentInformation": [
              {
                "typeCode": "CINV", 
                "number": "INV-12345"
              }
            ],
            "referredDocumentAmount": {
              "remittedAmount": {
                "currency": "SEK", 
                "amount": "1250.00"
              }
            }
          }
        ],
        "proprietaryBankTransactionCodeText": "TRF", 
        "balanceAfterTransaction": {
          "balanceAmount": {
            "currency": "SEK", 
            "amount": "9062.090"
          },
          "balanceType": "interimBooked"
        },
        "aggregateTransactionId": "d8lTg5nRk2qWzXgA7cNf3LhVYujXK9_E",
        "aggregateAmount": "-1250.00", 
        "aggregateRemittanceInformationUnstructured": "LBE1234-5678", 
        "isAliasPayout": true, 
        "isEnriched": true, 
        "paymentId": "b9c91da5-e78b-484a-acca-693120d75ab3",
        "transactionFees": []
      },
      {
        "transactionId": "700ed360-25e1-446a-94eb-775530c1adc0",
        "entryReference": "EX02-0005678", 
        "bookingDate": "2025-04-22", 
        "valueDate": "2025-04-22", 
        "transactionAmount": {
          "currency": "SEK", 
          "amount": "-2578.090"
        }, 
        "creditorAccount": {}, 
        "debtorAccount": {},
        "remittanceInformationUnstructured": "Example 1", 
        "balanceAfterTransaction": {
          "balanceAmount": {
            "currency": "SEK", 
            "amount": "10312.090"
          },
          "balanceType": "interimBooked"
        },
        "_links": {
          "transactionDetails": {
            "href": "/psd2/accountinformation/v1/accounts/ab82e294-b01d-4c21-b53e-9a39df7507d1/transactions/700ed360-25e1-446a-94eb-775530c1adc0"
          }
        },
        "proprietaryBankTransactionCodeText": "Transfer", 
        "transactionFees": []
      }
    ],
    "pending": [],
    "bankgiro": [],
    "_links": {
      "next": {
        "href": "/psd2/accountinformation/v1/accounts/ab82e294-b01d-4c21-b53e-9a39df7507d1/transactions?bookingStatus=booked&dateFrom=2025-04-21&dateTo=2025-04-22&continuationKey=0jrZlU66guCSgkTDQr8cuA"
      },
      "account": {
        "href": "/psd2/accountinformation/v1/accounts/ab82e294-b01d-4c21-b53e-9a39df7507d1"
      }
    }
  }
}
```

:::tip{title="Reference handling"}

For basic reference capture, track `remittanceInformationUnstructured` and `additionalInformation`. 

For accurate invoice matching, credit note handling, and advanced reconciliation, use the enriched `remittanceInformationStructuredArray` and `remittanceInformationUnstructuredArray` to extract full metadata.

:::

### 8. Get Transaction Details

Once you have a list of transactions, the next request allows you to retrieve further detailed information about a specific transaction in the list. For this request, you need to specify the transaction for which to fetch details by providing a `transactionId`. This is an ID of each entry in the transaction list. 

:::info

This endpoint is only needed for banks that do not include full transaction data in the Get Transaction List response. Transactions that support detailed view will include a `transactionDetails` link in the Get Transaction List response. 

:::

:::tip 

Check transaction details one-by-one and overwrite any data found in the Get Transaction List response with that found in the Get Transaction Details response.

:::

#### Endpoint

```http
GET /psd2/accountinformation/v1/accounts/{accountId}/transactions/{transactionId}
```

#### Path Parameters

| Name            | Type   | Description                      |
| --------------- | ------ | -------------------------------- |
| `accountId`     | string | The ID of the specified account. |
| `transactionId` | string | The ID of the specified account. |

#### Request Headers

| Name                     | Type         | Description                                                                                                           |
| ------------------------ | ------------ | --------------------------------------------------------------------------------------------------------------------- |
| `X-Request-ID`           | string(uuid) | The ID of the request, unique to the call, as determined by the initiating party.                                     |
| `X-BicFi`                | string       | The BIC of the bank to which the request is addressed.                                                                |
| `Consent-ID`             | string       | The ID of the related consent.                                                                                        |
| `PSU-ID`                 | string       | The ID to identify the PSU at the bank. Typically a local social security number or another unique login ID.          |
| `PSU-Corporate-ID`       | string       | The Corporate ID of the PSU when acting on behalf of an organisation, e.g. Org. nummer for SE, KVK for NL.            |
| `TPP-Redirect-Preferred` | boolean      | Indicates a preference for redirect-based SCA over decoupled when set to `true`. The bank may not support both types. |
| `PSU-IP-Address`         | string(ipv4) | The IP address of the PSU from the HTTP request between the PSU and the TPP.                                          |
| `PSU-User-Agent`         | string       | The Agent header from the HTTP request between the PSU and the TPP, identifying the browser used by the PSU.          |

```bash
curl -X GET "https://api.openbankingplatform.com/psd2/accountinformation/v1/accounts/ab82e294-b01d-4c21-b53e-9a39df7507d1/transactions/700ed360-25e1-446a-94eb-775530c1adc0" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "X-Request-ID: a76bdd7b-159f-49c6-b9a2-d28f046320c9" \
  -H "X-BicFi: ESSESESS" \
  -H "Consent-ID: 70c6d203-e1d1-43ff-9e42-07e5dda640ba" \
  -H "PSU-ID: 199002092386" \
  -H "PSU-Corporate-ID: 5560160680" \
  -H "TPP-Redirect-Preferred: false" \
  -H "PSU-IP-Address: 152.120.171.187" \
  -H "PSU-User-Agent: mozilla/5.0" 
```

#### Response 

```json
{
  "transactionId": "700ed360-25e1-446a-94eb-775530c1adc0",
  "bookingDate": "2025-04-22",
  "valueDate": "2025-04-22",
  "transactionAmount": {
    "currency": "SEK",
    "amount": "-2578.090"
  },
  "currencyExchange": [
    {
      "exchangeRate": "0.07683",
      "targetCurrency": "GBP", 
      "targetAmount": "-198.19", 
      "exchangeFeeCurrency": "SEK", 
      "exchangeFeeAmount": "38.54"
    }
  ],
  "creditorName": "Merchant AB",
  "creditorAccount": {
    "currency": "GBP",
	"iban": "GB1234567890001"
  },
  "creditorAgent": "HBUKGB4B", 
  "debtorAccount": {
    "currency": "SEK",
    "bban": "34567890123456788"
  },
  "remittanceInformationUnstructured": "Example 1", 
  "purposeCode": "OTHR", 
  "_links": {
    "proofOfPayment": {
      "href": "/accounts/ab82e294-b01d-4c21-b53e-9a39df7507d1/transactions/626bc7dc-fa30-4283-aed3-5aa87febef14/pop"
    }
  },
  "isEnriched": true, 
  "paymentId": "626bc7dc-fa30-4283-aed3-5aa87febef14", 
  "paymentServiceReference": "OPESE12345",
  "creditorAgentName": "HSBC UK BANK PLC", 
  "creditorAddress": {
    "street": "1 Centenary Square", 
    "buildingNumber": "1", 
    "city": "Birmingham", 
    "postalCode": "B1 1HQ", 
    "country": "GB"
  },
  "proprietaryBankTransactionCodeText": "Transfer", 
  "transactionFees": []
}
```
:::sparkles{title="Proof of Payment"}

Transaction entries for [cross-border payments](quickstart_pis.md#0-create-fx-quote-cross-border-only) additionally include a `proofOfPayment` link, which you can use to generate a Proof of Payment document for the PSU.

:::