Recurring

BLIK supports recurring payments, and we streamline this process for you with Payment agreements.

BLIK provides a flexible and automated solution designed for merchants managing subscription or usage based payments. Learn more.

❗️

Important

The maximum amount of a single recurring payment charge is 2,000 PLN.

Recurring is only available through the MULTI_FACTOR payment flow.

Create the payment agreement

To create a BLIK payment agreement, provide the following information when calling our payment agreements endpoint:

Data Field

Description

paymentMethod

BLIK

amount.value

The amount to be paid in the smallest units of the currency used.

amount.currency

PLN

conumer.name

Full name of the consumer.

consumer.country

The country of residence of the consumer.

consumer.client.ip

The IP of the consumers browser or HTTP client.
This is required for the MULTI_FACTOR payment flow.

consumer.client.userAgent

The user agent of the consumer or HTTP client.
This is required for the MULTI_FACTOR payment flow.

You can also include the initialPaymentCharge object in this agreement creation call to immediately initiate the first payment without making a separate call. If you include this object, you'll need to specify:

  • The exact amount.value and amount.currency of the first payment

If you don't include an initialPaymentCharge during agreement creation, you'll need to make a separate API call to /v1/payment-agreements/{agreement_id}/payment-charges to create the first charge.

Request

POST /v1/payment-agreements

{
  "consumer": {
    "name": "John Smith",
    "country": "PL",
    "client": {
     "ip": "11.22.22.33",
     "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36"
    }
  },
  "paymentMethod": "BLIK",
  "startDate": "2026-03-26T20:24:27Z",
  "endDate": "2026-11-27T09:30:00Z",
  "authenticationSettings": [
    {
      "type": "MULTI_FACTOR",
      "settings": {
        "verificationCode": "999009"
      }
    }
  ]
}
{
  "paymentMethod": "BLIK",
  "consumer": {
    "name": "John Smith",
    "country": "PL",
    "client": {
     "ip": "11.22.22.33",
     "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36"
    }
  },
  "initialPaymentCharge": {
    "amount": {
      "value": 1000,
      "currency": "PLN"
    }
  },
  "authenticationSettings": [
    {
      "type": "MULTI_FACTOR",
      "settings": {
        "verificationCode": "999009"
      }
    }
  ]
}

Response

You'll receive a response with the available authentication methods:

{
  "id": "agr_kldVsUfaTdcCIpT8bBIWo",
  "status": "AUTHENTICATION_PENDING",
  "paymentMethod": "BLIK",
  "startDate": "2025-04-15T16:20:13.302Z",
  "instrumentId": "instr_gQHo8F6xz3kOegCiaimw0",
  "consumer": {
    "name": "John Smith",
    "country": "PL"
  },
  "authenticationMethods": [
    {
      "type": "MULTI_FACTOR"
    }
  ],
  "history": [
    {
      "id": "ahist_mEs8D2aCSaoSgtex0gzWx",
      "status": "AUTHENTICATION_PENDING",
      "createdAt": "2025-04-15T16:20:13.951Z"
    }
  ],
  "createdAt": "2025-04-15T16:20:13.951Z",
  "updatedAt": "2025-04-15T16:20:13.951Z"
}
{
  "id": "agr_gFCDp991mUCjWVypLEvfZ",
  "status": "AUTHENTICATION_PENDING",
  "paymentMethod": "BLIK",
  "instrumentId": "instr_hLOqf7bZvyo98kqT4Spio",
  "consumer": {
    "name": "John Smith",
    "country": "PL"
  },
  "authenticationMethods": [
    {
      "type": "MULTI_FACTOR"
    }
  ],
  "history": [
    {
      "id": "ahist_8WvsAUIuUR9lYCajdkPsv",
      "status": "AUTHENTICATION_PENDING",
      "createdAt": "2025-04-10T13:31:39.222Z"
    }
  ],
  "initialPaymentChargeId": "charge_QQu5vY0HQYKIvsa7OO6Hx",
  "createdAt": "2025-04-10T13:31:39.222Z",
  "updatedAt": "2025-04-10T13:31:39.222Z"
}

Pick the desired authentication method

MULTI_FACTOR

  1. Ask your consumer for the OTP required to authenticate the payment.
  2. Issue the following request to POST /v1/payment-agreements/{agreementId}/authorizations
{
  "authenticationResult": {
    "type": "MULTI_FACTOR",
    "details": {
      "verificationCode": "777123"
    }
  }
}

Handling the result

MULTI_FACTOR

  1. Check the response from the POST /v1/payment-agreements/{agreementId}/authorizations and use the Status that you received to display the agreement and/or payment outcome to the consumer.
  2. Webhooks are also sent to inform you of the payment outcome.
  3. Store the Payment Agreement ID for subsequent payments.

Create a recurring payment

To initiate a subsequent recurring payment, send a request against an active agreement using our payment agreements API.

Request

POST /v1/payment-agreements/{agreement-id}/payment-charges

{
  "amount": {
    "value": 1000,
    "currency": "PLN"
  }
}

Response

{
    "id": "charge_WLnk5R2RKwzAinkEoAMm0",
    "paymentMethod": "BLIK",
    "currency": "PLN",
    "country": "PL",
    "instrumentId": "instr_86xMmxSjrVafelQgtAXxr",
    "status": "CAPTURED",
    "consumer": {
        "name": "John Smith",
        "country": "PL"
    },
    "authorizations": [
        {
            "id": "authz_nx4VgDiibOTPoYgXxQbrL",
            "amount": 1000,
            "status": "AUTHORIZED",
            "createdAt": "2025-04-10T16:28:40.150Z",
            "updatedAt": "2025-04-10T16:28:40.150Z"
        }
    ],
    "captures": [
        {
            "id": "capture_aJh1kGwLdwK8S3aFCeWFV",
            "amount": 1000,
            "status": "CAPTURED",
            "createdAt": "2025-04-10T16:28:40.150Z",
            "updatedAt": "2025-04-10T16:28:40.150Z"
        }
    ],
    "refunds": [],
    "discards": [],
    "voids": [],
    "createdAt": "2025-04-10T16:28:38.716Z",
    "updatedAt": "2025-04-10T16:28:40.150Z"
}