# Payments

The Payment Initiation Service (PIS) allows you to initiate payments directly from the PSU's bank account through the Open Payments platform. Several different [types of payments](enums.md#payment-service) can be initiated through the PIS, each identified by a specific `payment-product` in the endpoint path. The general flow for initiating a payment is the same for all  products except `cross-border`, which includes an additional first step of creating an FX quote. The guide below therefore outlines these two distinct payment creation flows.

> Requests to the PIS API require an [access token](get_access_token.md) with `scope` set to `paymentinitiation` `corporate`.

## Standard Payment Creation

### 1. Create Payment 

This step initiates the payment. Here, set the `payment-service` to `payments` and select the `payment-product` according to the type of payment you are creating.

#### Endpoint

```http
POST /psd2/paymentinitiation/v1/{payment-service}/{payment-product}
```

The below examples show how to define the payment instructions per `payment-product`.

### Domestic

Local payments in the bank's national system.

```http 
POST /psd2/paymentinitiation/v1/payments/domestic
```

#### 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                                                                                |
| ----------------------------------- | ------------ | ------------------------------------------------------------------------------------------ |
| `instructedAmount`                  | object       | The amount and currency of the money to be transferred.                                    |
| `debtorAccount`                     | object       | The account from which the payment will be debited.                                        |
| `creditorAccount`                   | object       | The account to which the payment will be credited.                                         |
| `creditorName`                      | string       | The full name of the payment recipient.                                                    |
| `requestedExecutionDate`            | string(date) | The date when the payment is scheduled to be executed in ISO 8601 format, e.g. 2025-10-31. |
| `remittanceInformationUnstructured` | string       | A free-text field for remittance information on the payment.                               |

```bash
curl -X POST "https://api.openbankingplatform.com/psd2/paymentinitiation/v1/payments/domestic" \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIn0..." \
  -H "Content-Type: application/json" \
  -H "X-Request-ID: 37c6468e-a3f4-4232-8834-979e79564274" \
  -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 '{
        "instructedAmount": {
        "amount": "1230.50",
        "currency": "SEK"
        },
        "debtorAccount": {
          "iban": "SE4550000000058398257466",
          "currency": "SEK"
        },
      "creditorAccount": {
        "iban": "SE1412000000000012345678",
        "currency": "SEK"
      },
      "creditorName": "Acme AB",
      "requestedExecutionDate": "2025-05-19",
      "remittanceInformationUnstructured": "Ref Number Merchant"
    }'
```

#### Response

```json
{
  "transactionStatus": "RCVD",
  "paymentId": "fa1569fa-6cbd-43fb-98a2-7151ba2da365",
  "_links": {
    "startAuthorisationWithTransactionAuthorisation": {
      "href": "/psd2/paymentinitiation/v1/payments/domestic/fa1569fa-6cbd-43fb-98a2-7151ba2da365/authorisations"
    },
    "self": {
      "href": "/psd2/paymentinitiation/v1/payments/domestic/fa1569fa-6cbd-43fb-98a2-7151ba2da365"
    },
    "status": {
      "href": "/psd2/paymentinitiation/v1/payments/domestic/fa1569fa-6cbd-43fb-98a2-7151ba2da365/status"
    }
  }
}
```

**Fraudulent Account Screening**

If the creditor account is listed on Svensk Handel's watchlist, the response will additionally contain a warning message:

```json
"tppMessages": [
  {
    "category": "WARNING", 
    "code": "CREDITOR_ACCOUNT_FLAGGED", 
    "text": "The creditor Falskhandel AB (OrgNr: 556789-1234) was flagged as potentially fraudulent."
  }
]
```



### Swedish Giro

Domestic payments within Sweden via the Bankgirot and Plusgirot systems.

```http 
POST /psd2/paymentinitiation/v1/payments/swedish-giro
```

#### 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                                                                                |
| ------------------------ | ------------ | ------------------------------------------------------------------------------------------ |
| `instructedAmount`       | object       | The amount and currency of the money to be transferred.                                    |
| `debtorAccount`          | object       | The account from which the payment will be debited.                                        |
| `creditorGiro`           | object       | The Bankgirot or Plusgirot account to which the payment will be credited.                  |
| `creditorName`           | string       | The full name of the payment recipient.                                                    |
| `requestedExecutionDate` | string(date) | The date when the payment is scheduled to be executed in ISO 8601 format, e.g. 2025-10-31. |
| `invoiceRef`             | string       | A custom invoice reference.                                                                |
| `ocrRef`                 | string       | A Giro OCR reference.                                                                      |

```bash
curl -X POST "https://api.openbankingplatform.com/psd2/paymentinitiation/v1/payments/swedish-giro" \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIn0..." \
  -H "Content-Type: application/json" \
  -H "X-Request-ID: 7aea2104-7612-4c80-99ea-707d88ddd935" \
  -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 '{
        "instructedAmount": {
          "amount": "130.00",
          "currency": "SEK"
        },
        "debtorAccount": {
          "iban": "SE4550000000058398257466",
          "currency": "SEK"
        },
        "creditorGiro": {
          "giroNumber": "1234-5678",
          "giroType": "BANKGIRO"
        },
        "creditorName": "Acme AB",
        "requestedExecutionDate": "2025-11-01",
        "ocrRef": "1234567890"
     }'
```

#### Response

```json
{
  "transactionStatus": "RCVD",
  "paymentId": "5387327e-33bc-4002-98fb-dd5d20aaf936",
  "_links": {
    "startAuthorisationWithTransactionAuthorisation": {
      "href": "/psd2/paymentinitiation/v1/payments/swedish-giro/5387327e-33bc-4002-98fb-dd5d20aaf936/authorisations"
    },
    "self": {
      "href": "/psd2/paymentinitiation/v1/payments/swedish-giro/5387327e-33bc-4002-98fb-dd5d20aaf936"
    },
    "status": {
      "href": "/psd2/paymentinitiation/v1/payments/swedish-giro/5387327e-33bc-4002-98fb-dd5d20aaf936/status"
    }
  }
}
```

**OCR Reference Validation**

If the creditor has OCR reference validation enabled, the response will additionally contain a warning message if the provided OCR reference is invalid:

```json
"tppMessages": [
  {
    "category": "WARNING", 
    "code": "OCR_REF_INVALID", 
    "text": "The provided OCR reference is invalid based on the creditor's OCR control requirements."
  }
]
```

### SEPA Credit Transfer

EUR-denominated payments within the SEPA zone.

```http 
POST /psd2/paymentinitiation/v1/payments/sepa-credit-transfers
```

#### 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                                                                                |
| ----------------------------------- | ------------ | ------------------------------------------------------------------------------------------ |
| `instructedAmount`                  | object       | The amount and currency of the money to be transferred.                                    |
| `debtorAccount`                     | object       | The account from which the payment will be debited.                                        |
| `creditorAccount`                   | object       | The account to which the payment will be credited.                                         |
| `creditorName`                      | string       | The full name of the payment recipient.                                                    |
| `creditorAgent`                     | string       | The BIC of the payment recipient's bank.                                                   |
| `creditorAgentName`                 | string       | The name of the payment recipient's bank.                                                  |
| `requestedExecutionDate`            | string(date) | The date when the payment is scheduled to be executed in ISO 8601 format, e.g. 2025-10-31. |
| `remittanceInformationUnstructured` | string       | A free-text field for remittance information on the payment.                               |

```bash
curl -X POST "https://api.openbankingplatform.com/psd2/paymentinitiation/v1/payments/sepa-credit-transfers" \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIn0..." \
  -H "Content-Type: application/json" \
  -H "X-Request-ID: 1be5590a-50b0-4fcd-b835-c98ec8b058714" \
  -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 '{
        "instructedAmount": {
          "amount": "130.50",
          "currency": "EUR"
        },
        "debtorAccount": {
          "iban": "SE4550000000058398257466",
          "currency": "EUR"
        },
        "creditorAccount": {
          "iban": "FI2112345600000785",
          "currency": "EUR"
        },
        "creditorName": "Acme AB",
        "creditorAgent": "RABONL2U", 
        "creditorAgentName": "Coöperatieve Rabobank U.A.", 
        "requestedExecutionDate": "2025-11-01",
        "remittanceInformationUnstructured": "Ref Number Merchant"
     }'
```

#### Response

```json
{
  "transactionStatus": "RCVD",
  "paymentId": "e103561c-6535-448c-825f-accb8c3e4fd9",
  "_links": {
    "startAuthorisationWithTransactionAuthorisation": {
      "href": "/psd2/paymentinitiation/v1/payments/sepa-credit-transfers/e103561c-6535-448c-825f-accb8c3e4fd9/authorisations"
    },
    "self": {
      "href": "/psd2/paymentinitiation/v1/payments/sepa-credit-transfers/e103561c-6535-448c-825f-accb8c3e4fd9"
    },
    "status": {
      "href": "/psd2/paymentinitiation/v1/payments/sepa-credit-transfers/e103561c-6535-448c-825f-accb8c3e4fd9/status"
    }
  }
}
```

**Verification of Payee (VoP)**

For SEPA payments in the Eurozone, the response will additionally include a VoP result based on the provided creditor details:

```json
"verificationOfPayee": {
  "partyNameMatch": "CMTC",
  "matchedName": "Acme AB"
},
"tppMessages": [
  {
    "category": "WARNING",
    "code": "CREDITOR_NAME_CLOSE_MATCH", 
    "text": "The creditor name closely matches the registered name of the account."
  }
]
```

## Cross-border Payment Creation

### 1. Create FX Quote

The `cross-border` product enables you to initiate payments to 180+ countries with built-in, real-time currency conversion — supporting both spot and forward exchange rates (up to 30 days). The first step for a `cross-border` payment is to create an FX quote, defining the exchange rate, fees, and the validity period. 

#### Endpoint

```http
POST /psd2/paymentinitiation/v1/fx
```

#### 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.        |
| `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                                                                                |
| ------------------------ | ------------ | ------------------------------------------------------------------------------------------ |
| `sourceCurrency`         | string       | The source currency.                                                                       |
| `targetCurrency`         | string       | The target currency.                                                                       |
| `requestedExecutionDate` | string(date) | The date when the payment is scheduled to be executed in ISO 8601 format, e.g. 2025-10-31. |
| `countryCode`            | string       | The target country.                                                                        |
| `amount`                 | string       | The requested amount in target currency.                                                   |

```bash
curl -X POST "https://api.openbankingplatform.com/psd2/paymentinitiation/v1/fx" \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIn0..." \
  -H "Content-Type: application/json" \
  -H "X-Request-ID: 98afac01-e0bb-4aa2-95fd-0b3204f8a183" \
  -H "X-BicFi: ESSESESS" \
  -H "PSU-ID: 199002092386" \
  -H "PSU-Corporate-ID: 5560160680" \
  -H "PSU-IP-Address: 152.120.171.187" \
  -H "PSU-User-Agent: mozilla/5.0" \
  -d '{
        "sourceCurrency": "SEK",
        "targetCurrency": "EUR", 
        "requestedExecutionDate": "2025-11-10",
        "countryCode": "FI", 
        "amount": "130.00" 
      }'
```

#### Response 

```json
{
  "fxQuoteId": "F100000PFM",
  "fxRate": "11.05254986",
  "fee": "1.50",
  "totalAmount": "1440.53",
  "validFrom": "2025-11-09T09:36:24.0142906Z",
  "validTo": "2025-11-10T23:59:59.0000000Z"
}
```

The response contains an `fxQuoteId` which you will need to reference in the request headers of the `cross-border` payment request. 

:::warning

The payment needs to be signed within **one hour** of creating the FX quote. If the payment does not reach a finalised state within this timeframe, the FX contract will be voided and a new quote will need to be created. 

:::

### 2. Create Payment

This step initiates the cross-border payment. Set the `payment-service` to `payments` and the `payment-product` to `cross-border`, and include the `FX-Quote-ID` from the previous step in the request headers.

### Cross-border

Payments to foreign countries using FX quotes.

```http 
POST /psd2/paymentinitiation/v1/payments/cross-border
```

#### 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.          |
| `FX-Quote-ID`            | string       | The ID of the FX quote to be used for the cross-border payment.                                                       |

#### Request Body 

| Name                                | Type         | Description                                                                                |
| ----------------------------------- | ------------ | ------------------------------------------------------------------------------------------ |
| `instructedAmount`                  | object       | The amount and currency of the money to be transferred.                                    |
| `debtorAccount`                     | object       | The account from which the payment will be debited.                                        |
| `creditorAccount`                   | object       | The account to which the payment will be credited.                                         |
| `creditorName`                      | string       | The full name of the payment recipient.                                                    |
| `creditorAddress`                   | object       | The address of the payment recipient.                                                      |
| `creditorAgent`                     | string       | The BIC of the payment recipient's bank.                                                   |
| `creditorAgentName`                 | string       | The name of the payment recipient's bank.                                                  |
| `requestedExecutionDate`            | string(date) | The date when the payment is scheduled to be executed in ISO 8601 format, e.g. 2025-10-31. |
| `remittanceInformationUnstructured` | string       | A free-text field for remittance information on the payment.                               |

```bash
curl -X POST "https://api.openbankingplatform.com/psd2/paymentinitiation/v1/payments/cross-border" \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIn0..." \
  -H "Content-Type: application/json" \
  -H "X-Request-ID: 004bd42c-034b-45de-8361-c043615784a6" \
  -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" \
  -H "FX-Quote-ID: F100000PFM" \
  -d '{
        "instructedAmount": {
          "amount": "130.00",
          "currency": "EUR"
        },
        "debtorAccount": {
          "iban": "SE4550000000058398257466",
          "currency": "SEK"
        },
        "creditorAccount": {
          "iban": "FI2112345600000785",
          "currency": "EUR"
        },
        "creditorName": "Acme AB",
        "creditorAddress": {
          "street": "Example Street",
          "buildingNumber": "5"
          "city": "Helsinki",
          "postalCode": "00160",
          "country": "FI"
        },
        "creditorAgent": "NDEAFIHH", 
        "creditorAgentName": "Nordea Bank Abp", 
        "requestedExecutionDate": "2025-11-10",
        "remittanceInformationUnstructured": "Ref Number Merchant"
      }'
```

#### Response

```json
{
  "transactionStatus": "RCVD",
  "paymentId": "f7fd149c-c5ca-449d-ba30-82e55fcc44c2",
  "_links": {
    "startAuthorisationWithTransactionAuthorisation": {
      "href": "/psd2/paymentinitiation/v1/payments/cross-border/f7fd149c-c5ca-449d-ba30-82e55fcc44c2/authorisations"
    },
    "self": {
      "href": "/psd2/paymentinitiation/v1/payments/cross-border/f7fd149c-c5ca-449d-ba30-82e55fcc44c2"
    },
    "status": {
      "href": "/psd2/paymentinitiation/v1/payments/cross-border/f7fd149c-c5ca-449d-ba30-82e55fcc44c2/status"
    }
  }
}
```

## Single Payment Authorisation and Status

Once you have created a payment, it must be authorised by the PSU before it can be executed. Single payment authorisation is used when an individual payment is signed on its own through a dedicated SCA flow.

### 2. Authorise Payment

See the [Authorisations](authorisations.md) guide for instructions on how to complete the authorisation process for a payment.

### 3. Get Payment Status

After completing the authorisation flow, check the status of the payment by polling the following endpoint. 

#### Endpoint

```http
GET /psd2/paymentinitiation/v1/{payment-service}/{payment-product}/{paymentId}/status 
```

#### Path Parameters

| Name              | Type         | Description                                                                  |
| ----------------- | ------------ | ---------------------------------------------------------------------------- |
| `payment-service` | string       | The type of payment to initiate, e.g. `payments` for single payments.        |
| `payment-product` | string       | The scheme and format of the payment, e.g. `domestic` for domestic payments. |
| `paymentId`       | string(uuid) | The ID of the payment 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.          |

:::sparkles

Include an [`X-Feature-Flags`](api.md#X-Feature-Flags) header set to `new-statuses-global` to get harmonised payment statuses across all supported banks.

:::

```bash
curl -X GET "https://api.openbankingplatform.com/psd2/paymentinitiation/v1/payments/domestic/fa1569fa-6cbd-43fb-98a2-7151ba2da365/status" \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIn0..." \
  -H "X-Request-ID: 06a2321a-e420-4ffd-982b-ba439af70b10" \
  -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
{
  "transactionStatus": "ACSC"
}
```

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

## Signing Basket Authorisation and Status

Alternatively to authorising each payment separately, signing baskets allow several initiated payments to be grouped and authorised in a single SCA flow. Once a signing basket is signed, each payment within it is signed simultaneously, ensuring consistency and reducing friction. All supported payment types can be included in a signing basket.

### 2. Create Signing Basket 

Once you have created your payments, you can create a signing basket and include each payment's `paymentId` in the request body. 

#### Endpoint 

```http
POST /psd2/paymentinitiation/v1/signing-baskets 
```

#### 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                                               |
| ------------ | ----- | --------------------------------------------------------- |
| `paymentIds` | array | The IDs of the payments to include in the signing basket. |

```bash
curl -X POST "/psd2/paymentinitiation/v1/signing-baskets" \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIn0..." \
  -H "Content-Type: application/json" \
  -H "X-Request-ID: 1fbf35cd-192b-4621-8edc-1885f6b8841c" \
  -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 '{
        "paymentIds": [
          "a1569fa-6cbd-43fb-98a2-7151ba2da365",
          "880b6a91-23a8-45f2-96bf-2b98c5fc5cc3",
          "b0f84f58-addb-442c-8e13-d1f205a1f4ee"
        ]
     }'
```

### 3. Authorise Signing Basket

See the [Authorisations](authorisations.md) guide for instructions on how to complete the authorisation process for a signing basket.

### 4. Get Signing Basket Status

After completing the authorisation flow, check the status of the payment by polling the following endpoint.

#### Endpoint

```http
GET /psd2/paymentinitiation/v1/signing-baskets/{basketId}/status
```

#### Path Parameters

| Name       | Type   | Description                                    |
| ---------- | ------ | ---------------------------------------------- |
| `basketId` | string | The ID of the signing basket 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/paymentinitiation/v1/signing-baskets/c9669516-a08f-448a-9fa4-d3db36456059/authorisations/a2db692d-84a7-4d2e-bc59-0c420f876cf2" \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIn0..." \
  -H "X-Request-ID: a464b8b0-59fa-4890-9cb7-ae9baf5820f4" \
  -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
{
  "transactionStatus": "ACTC"
}
```

Signing baskets can have a number of different [statuses](enums.md#transactionstatus). Here, you want to check if the basket was rejected, in which case `transactionStatus` would have the value `RJCT`. If not, then you are done.

:::info 

Note that the basket status reflects the authorisation outcome, not the execution status of individual payments. Verify each payment's status via the [Get Payment Status](quickstart_pis.md#3-get-payment-status) endpoint regardless of the signing basket's `scaStatus`.

:::