## Open Banking Improvements: CMA9 v4 API – Lloyds Banking Group

Issued: 15th May | TB-1637

![AIS/PIS](/assets/ais-pis.cae356edcd7b630129229253e3a0506c39dcffc674bb5faf5e999e6c348f1e84.25996077.png)

## What's Changing?

Lloyds Banking Group (LBG) will migrate to **CMA9 v4**.

As part of this migration:

- Bank raw responses are changing
- PCC codes are changing
- Improved error messaging
- Changes to Balance Type Identifiers


All changes are available on **Sandbox** for testing.

## Does This Change Affect You?

### Payment Initiation Services (PIS)

You **may be impacted** if:

- You are initiating payments with LBG banks using the UK Open Banking API standard, and your PIS integration relies on raw bank statuses.
- You depend on specific bank error messages in your processes.


You are **not impacted** if:

- You do not rely on raw bank responses.


### Account Information Services (AIS)

You **may be impacted** if:

- You are making AIS calls to LBG banks using the UK Open Banking API standard, and you validate balance types in your AIS integration.


You are **not impacted** if:

- You do not validate balance types in your AIS integration.


## Changes in Detail

### Payment Initiation Services

#### Standardised Payment Statuses

The `bankPaymentStatus` field will now return [**ISO 20022**](https://developer.token.io/token_rest_api_doc/content/e-rest/iso-20022-statuses.htm) standard payment status codes.

> ❗ **Note:** Token's own status codes will remain unchanged.


If you have designed your integration to rely on raw bank statuses, you must decide how to handle the ISO 20022 mappings.

- [CMA9 v4 status repository](https://github.com/OpenBankingUK/External_Internal_CodeSets/blob/6ed21c444472d237b7d6d60f620bf3bfad8e1ddf/4Q2023_ExternalCodeSets_v2.json#L2750)
- [Status model diagram](https://openbankinguk.github.io/read-write-api-site3/v4.0/resources-and-data-models/pisp/domestic-payments.html#state-model)


#### How Token Handles v4 Statuses for APIv1

| Token Payment Status | ISO 20022 Raw Bank Payment Statuses |
|  --- | --- |
| PROCESSING | PDNG, RCVD, ACTC, PATC, ACCP, ACFC, ACSP, ACWC |
| SUCCESS | ACCC, ACWP, ACSC |
| DECLINED | BLCK, RJCT |
| CANCELLED | CANC (domestic scheduled payments) |


#### How Token Handles v4 Statuses for APIv2

| Token Payment Status | ISO 20022 Raw Bank Payment Statuses |
|  --- | --- |
| INITIATION_PROCESSING | PDNG, RCVD, ACTC, PATC, ACCP, ACFC, ACSP, ACWC |
| INITIATION_COMPLETED | ACCC, ACWP, ACSC |
| INITIATION_DECLINED | BLCK, RJCT |
| INITIATION_DECLINED | CANC (domestic scheduled payments) |


### Consistent Error Messaging

Bank error messages will be updated to match the [**CMA9 v4 specification**](https://openbankinguk.github.io/read-write-api-site3/v4.0/profiles/read-write-data-api-profile.html#error-response-structure) for improved clarity and consistency.

#### Affected Endpoints

##### V1 API

- `providerDetails.status`
  - POST `/transfers`
  - GET `/transfers/{transferId}`
  - GET `/transfers`


##### V2 API

- `bankPaymentStatus`
  - GET `/v2/payments`
  - GET `/v2/payments/{paymentId}`


##### VRP API

- `bankVrpConsentStatus`
  - POST `/vrp-consents`
  - GET `/vrp-consents`
  - GET `/vrp-consents/{id}`
  - DELETE `/vrp-consents/{id}`
- `bankVrpStatus`
  - GET `/vrp-consents/{id}/payments`
  - POST `/vrps`
  - GET `/vrps`
  - GET `/vrps/{id}`


### Handling of PCC Codes

Token.io currently populates the PCC field with a defaulted value when no value is provided. However, with v4, we will no longer do this.

You can find more information on the new PCCs here:

- [v1 documentation](https://docs.token.io/products/tpp/api/reference/requests-for-payments-v1-or-ais/gatewayservice.storetokenrequest#requests-for-payments-v1-or-ais/gatewayservice.storetokenrequest/t=request&path=requestpayload&oneof=0/transferbody/instructions/metadata/providertransfermetadata&oneof=0/cma9transfermetadata/risk/paymentcontextcode)
- [v2 documentation](https://docs.token.io/products/tpp/api/reference/payments-v2/initiatepayment#payments-v2/initiatepayment/t=request&path=initiation/risk/paymentcontextcode)


#### Affected Endpoints

##### V1 API

- POST `/token-request`


##### V2 API

- POST `/v2/payments`


> ❗ **Note:**  If you decide to not send a PCC or send an incorrect PCC, your request will not fail. Token will ignore any incorrect PCC provided, and the field will be replaced with the default value **TransferToThirdParty**. PCC is recommended to be included as part of the request as **Payment Context Code is a mandatory field of LBG API**.


## Account Information Services

### Changes to Balance Types

| Existing Balance Types – v3 | New Balance Types – v4 |
|  --- | --- |
| ClosingAvailable | CLAV |
| ClosingBooked | CLBD |
| ForwardAvailable | FWAV |
| Information | INFO |
| InterimAvailable | ITAV |
| InterimBooked | ITBD |
| OpeningAvailable | OPAV |
| OpeningBooked | OPBD |
| PreviouslyClosedBooked | PRCD |
| Expected | XPCD |


## What Action Do I Need to Take?

If you are impacted, to ensure a smooth transition we strongly recommend that you:

- Review your implementation for payment statuses, PCC handling, and balance type identifiers.
- Test your integration in the **Sandbox** environment.
- Speak with your implementation manager, or
- Contact us at [support@token.io](mailto:support@token.io)


## When Will This Change Apply to All Impacted Customers?

**19 May 2026**

## Where Can I Get Further Information?

For any questions, concerns, or to discuss your integration, please speak with your implementation manager or contact:
[support@token.io](mailto:support@token.io)