# BLIK Level 0 Handling in SimPay

BLIK Level 0 is a simplified BLIK payment method,
where the user enters the BLIK code directly on the Partner's website,
without the need to redirect to the eblik.pl page.

Note
It is your responsibility to meet the requirements of the BLIK checklist for Level 0 payments, which is available
here.

### Generating a Transaction

1. When generating a transaction, you must:


- set the `directChannel` field to `blik-level0`,
- send the payer's antifraud.useragent,
- send the payer's customer.email,
- send the payer's customer.ip,
- send the payer's customer.countryCode (currently only PL is supported),
- set the transaction currency to PLN (BLIK currently supports only PLN).


1. Then send a request to:


`POST https://api.simpay.pl/payment/:serviceId/blik/level0/:transactionId`

in the body, send:


```json
{
    "ticket":{
        "T6":"BLIK_CODE"
    }
}
```

If the BLIK code is correct, HTTP status 204 will be returned.

Warning
Returning code 204 does not mean the transaction is paid. You must handle both IPN events listed below.

In case of an incorrect code, the response looks as follows:
HTTP 4xx


```json
{
    "success": false,
    "message": "Error message",
    "errorCode": "ERROR_CODE"
}
```

The errorCode values are available in the table under the IPNv2 section.

### Handling the IPNv2 Event

For BLIK Level 0 transactions, SimPay sends 2 IPN messages:

- `transaction:status_changed` (the same as for every payment method),
- `transaction_blik_level0:code_status_changed`. This message contains information about the BLIK code validity (field data.ticket_status).
Example IPN:



```json
{
  "type": "transaction_blik_level0:code_status_changed",
  "notification_id": "019736c4-50c3-7108-944c-11a0f9c12b72",
  "date": "2025-06-03T19:08:44+02:00",
  "data": {
    "ticket_status": "VALID",
    "transaction": {
      "id": "70bc5ab3-4973-4275-a0eb-08e3f2ab54f2",
      "payer_transaction_id": "6PB8JKKN",
      "service_id": "e65c7519",
      "status": "transaction_paid",
      "amount": {
        "final_currency": "PLN",
        "final_value": "360.00",
        "original_currency": "PLN",
        "original_value": "360.00",
        "commission_system": "5.36",
        "commission_partner": "354.64",
        "commission_currency": "PLN"
      },
      "control": "111122223333"
    }
  },
  "signature": "236197b1a75a8e1c33b0feea94cab753f4b0d7f5ffd044abeea36ea8b89566cc"
}
```

If the ticket_status is other than VALID, you should inform the payer about the reason for the transaction rejection.
Here we refer to the BLIK checklist (Authorization errors section).

BLIK Checklist

from "INSUFFICIENT_FUNDS" downwards.

### List of Errors When Entering BLIK Code

| Code | Meaning |
|  --- | --- |
| `INVALID_BLIK_CODE` | Invalid BLIK code. |
| `PAYER_APP_NOT_ACTIVE` | BLIK has not been activated in the payer's banking app. |
| `PAYER_APP_NOT_FOUND` | BLIK was not found in the payer's banking app. |
| `INVALID_BLIK_CODE_FORMAT` | Invalid BLIK code format. |
| `BLIK_CODE_EXPIRED` | BLIK code has expired. |
| `BLIK_CODE_LIMIT` | Limit exceeded for this code. |
| `BLIK_CODE_CANCELLED` | BLIK code has been cancelled. |
| `BLIK_CODE_NOT_SUPPORTED` | BLIK code is not supported. |
| `BLIK_CODE_USED` | BLIK code has already been used. |
| `BLIK_GENERAL_ERROR` | General BLIK error. |
| `BLIK_TECHNICAL_BREAK` | Technical break in BLIK operation. |


### List of Test T6 Codes

Test codes
For test T6 codes to work, test mode must be enabled in the service settings in the SimPay Client Panel.

| T6 Code | Code Meaning |
|  --- | --- |
| `999000` | Valid BLIK code |
| `100001` | PAYER_APP_NOT_ACTIVE |
| `100002` | PAYER_APP_NOT_FOUND |
| `100003` | INVALID_BLIK_CODE_FORMAT |
| `100004` | BLIK_CODE_EXPIRED |
| `100005` | BLIK_CODE_LIMIT |
| `100006` | BLIK_CODE_CANCELLED |
| `100007` | BLIK_CODE_NOT_SUPPORTED |
| `100008` | BLIK_CODE_USED |
| `100009` | BLIK_GENERAL_ERROR |
| `100010` | BLIK_TECHNICAL_BREAK |
| `200001` | INSUFFICIENT_FUNDS |
| `200002` | LIMIT_EXCEEDED |
| `200003` | TIMEOUT |
| `200004` | GENERAL_ERROR |
| `200005` | SYSTEM_ERROR |
| `200006` | SEC_DECLINED |
| `200007` | USER_DECLINED |
| `200008` | TAS_DECLINED |
| `{any other}` | INVALID_BLIK_CODE |


Test codes starting with `1` indicate an error returned during Level 0 transaction initiation.

Test codes starting with `2` indicate an error sent via IPN in the `transaction_blik_level0:code_status_changed` event.