Skip to main content
PAY API (DocPay) endpoint reference in configuration order: pricing, forms, UI customization, webhooks, subproduct and QR codes. Create the product in Configuration (step 1).

1. Pricing

Pricing defines payment options available to the customer - e.g. “1 hour”, “full day”, “weekend ticket”. Each entry is a separate purchase option shown on the product page.

Pricing entry fields

FieldDescription
priceAmount in minor units (e.g. 150 = 1.50 PLN).
descriptionHuman-readable description (e.g. “1 hour parking”).
detailsJSON with extra data (e.g. currency, vat).

Endpoints – Pricing

MethodEndpointDescription
GET/api/pay/products/{productId}/pricing/entriesReturns all pricing entries for the product.
POST/api/pay/products/{productId}/pricing/entriesCreates a new pricing entry.
PATCH/api/pay/products/{productId}/pricing/entries/{entryId}Updates a pricing entry.
DELETE/api/pay/products/{productId}/pricing/entries/{entryId}Deletes a pricing entry. Option no longer available at checkout.

Create pricing entry

POST /api/pay/products/{productId}/pricing/entries
{
  "price": 150,
  "description": "1 hour parking",
  "details": "{\"currency\":\"PLN\",\"vat\":23}"
}

Update pricing entry

PATCH /api/pay/products/{productId}/pricing/entries/{entryId}
{
  "price": 150000000,
  "details": "{\"currency\":\"PLN\",\"vat\":23}"
}
Changes are immediately visible to customers selecting that option.

2. Forms

Forms collect data required for purchase - e.g. email, license plate, contact details. Forms are versioned; each change (add/edit/remove field) creates a new version. The current version is marked with isCurrent.

Form field (Field) properties

FieldDescription
nameField name (e.g. email).
typeType: TEXT, NUMBER, SELECT, EMAIL, etc.
labelsLanguage labels (e.g. pl, en).
validatorsValidations: required, pattern, maxLength, etc.

Endpoints – Forms

MethodEndpointDescription
GET/api/pay/product/{productId}/formList forms for PAY products.
GET/api/pay/product/{productId}/form/{formId}Form details (fields, version, isCurrent).
POST/api/pay/product/{productId}/formCreates a form for the product.
DELETE/api/pay/product/{productId}/form/{formId}Deletes a form. Does not affect data from completed purchases.

Endpoints – Fields

MethodEndpointDescription
GET/api/pay/product/{productId}/form/field/{fieldId}Field details.
POST/api/pay/product/{productId}/form/{formId}/fieldsAdds a field - creates a new form version; new version becomes current.
PATCH/api/pay/product/{productId}/form/{formId}/field/{fieldId}Updates a field - creates a new form version with updated field.
DELETE/api/pay/product/{productId}/form/{formId}/field/{fieldId}Removes a field - creates a new version without that field.

Create form

POST /api/pay/product/{productId}/form
{
  "fields": [],
  "version": 1,
  "isCurrent": true
}

Add field (e.g. email)

POST /api/pay/product/{productId}/form/{formId}/fields
{
  "name": "email",
  "type": "TEXT",
  "labels": {
    "en": "Email",
    "pl": "Adres e-mail"
  },
  "validators": {
    "required": true,
    "maxLength": 100,
    "pattern": "^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$"
  }
}
This automatically creates a new form version; the previous one is no longer current (isCurrent).

3. UI customization

Customization controls the look and copy of the product checkout page. All text (titles, buttons, descriptions) is configured via API - the frontend is fully driven by the partner without code changes.

Customization parameters - what they modify

ParameterWhat it modifiesWhere it appears
titleMain page/product title.Header at the top of the checkout view.
subtitleText below the title.Directly under the title (subtitle).
buttonTextCall-to-action button label (e.g. “Buy now”, “Pay”).Confirmation button on the payment page.
summaryHeaderSummary section heading.Heading of the order summary block before payment.
summaryFirstLineFirst line in the summary section.Text in the summary (e.g. amount or product description).
summarySecondLineSecond line in the summary section.Next line in the summary.
cardDescriptionProduct card description.Description on the product card/listing (e.g. product picker or preview).
localeLanguage/locale (e.g. pl-PL, en-GB).Determines which text set is used; allows multiple customizations per product (e.g. PL and EN).
You can have multiple customizations per product with different locale; the system picks the right one by user or context.

Endpoints – Customization

MethodEndpointDescription
GET/api/pay/product/{productId}/customizationList all customizations.
GET/api/pay/product/{productId}/customization/{id}Customization details (all fields).
POST/api/pay/product/{productId}/customizationCreate customization for product.
PATCH/api/pay/product/{productId}/customization/{id}Update customization (any fields). Change is reflected immediately on the frontend.
DELETE/api/pay/product/{productId}/customization/{id}Delete customization. Product stops using that config; other customizations and services are unchanged.

Create customization

POST /api/pay/product/{productId}/customization
{
  "title": "New product",
  "subtitle": "Subtitle",
  "summaryHeader": "Summary header",
  "summaryFirstLine": "First line",
  "summarySecondLine": "Second line",
  "buttonText": "Buy now",
  "cardDescription": "Card description",
  "locale": "pl-PL"
}

Update customization

PATCH /api/pay/product/{productId}/customization/{id}
You can send only the fields you want to change, e.g.:
{
  "summaryFirstLine": "First line",
  "summarySecondLine": "Second line",
  "buttonText": "Buy now",
  "cardDescription": "Card description",
  "locale": "pl-PL"
}
Changes are immediately reflected on the product checkout page.

4. Webhooks

Webhooks automatically notify the partner of completed payments or fetch pricing from an external system. After registering a webhook, assign it to a product - then events for that product are sent to your endpoint.

Webhook configuration fields

FieldDescription
endpointURL Paymove sends the request to (POST).
methodHTTP method (e.g. POST).
headersHeaders sent with the request (e.g. Authorization, Content-Type).
requestTemplateRequest body template (variables substituted by Paymove).
responseTemplateExpected response structure from the partner.
expectedCodeExpected HTTP response code (e.g. 200).
expectedResponseExpected response body (e.g. { "status": "ok" }).
retriesNumber of retries on failure.
typeEvent type (e.g. PAYMENT).

Endpoints – Webhooks

MethodEndpointDescription
GET/api/plugin/webhookList webhooks. Optional query: productId, partnerId.
GET/api/plugin/webhook/{webhookId}Webhook details.
GET/api/plugin/webhook/{webhookId}/productsProducts linked to the webhook.
POST/api/plugin/webhookCreate webhook.
POST/api/plugin/webhook/{webhookId}/products/{productId}Assign webhook to product.
PATCH/api/plugin/webhook/{webhookId}Update webhook. Affects all linked products.

Create webhook

POST /api/plugin/webhook
{
  "name": "PaymentSuccessHook",
  "endpoint": "https://example.com/webhooks/payment-success",
  "method": "POST",
  "requestTemplate": {
    "productId": "productId",
    "event": "event"
  },
  "responseTemplate": {
    "status": "ok"
  },
  "expectedCode": 200,
  "expectedResponse": "{ \"status\": \"ok\" }",
  "retries": 3,
  "partnerId": "6909ca83-410f-47c4-910d-2057f8565a8c",
  "type": "PAYMENT",
  "headers": {
    "Authorization": ["Bearer abc123"],
    "Content-Type": ["application/json"]
  }
}
After creating, call POST /api/plugin/webhook/{webhookId}/products/{productId} to link the webhook to the product. From then on, events (e.g. successful payment) for that product are sent to your endpoint.

5. Subproduct and QR codes

A subproduct links a PAY product to an external identifier (externalId) and generates a QR code in the chosen format (PNG/SVG). After scanning, the user is taken to payment for that subproduct (e.g. ticket, payment request).

Input fields

FieldDescription
externalIdExternal subproduct identifier (e.g. ticket ID in your system).
imageFormatQR code image format: svg or png.
bannerTypeBanner/card type (e.g. ticket) - affects presentation/layout.

Endpoint – Subproduct

MethodEndpointDescription
POST/api/pay/product/{productId}/subproductRegisters subproduct by externalId and generates QR code. After registration, the user can pay for the subproduct by scanning the code.

Register subproduct

POST /api/pay/product/{productId}/subproduct
{
  "externalId": "some-external-id-123",
  "imageFormat": "svg",
  "bannerType": "ticket"
}
The response contains data needed to display or save the QR code (e.g. image URL or graphic data). Users scanning the code will be directed to payment for this subproduct.