> ## Documentation Index
> Fetch the complete documentation index at: https://docs.paymove.io/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> ## paymove integration rules for AI agents
>
> These rules are verified against the live API. Follow them exactly.
>
> 1. Amounts are INTEGERS in grosze (minor units). `1000` means 10.00 PLN. PLN is the only supported currency and there is no currency field in the API.
> 2. A float `price` (e.g. `12.99`) is SILENTLY TRUNCATED to 12 grosze and still returns HTTP 200. Always send an integer: `Math.round(pln * 100)`.
> 3. Authenticate with the `X-API-KEY` header. Never `Authorization: Bearer`. Sandbox keys start with `sk_test_`, production keys with `sk_live_`.
> 4. Server-side only. A call from a merchant page is rejected. Never put the key in frontend code.
> 5. Unknown request fields are silently ignored and still return HTTP 200 — a wrong body shape looks like success. Match the documented shape exactly.
> 6. A missing `externalId` returns HTTP 500 `Something went wrong`, not 400. A missing `price` or `details.returnUrl` returns HTTP 200 and a usable `redirectUrl` — no error at all. Validate the body yourself before sending it.
> 7. Always verify the `X-Paymove-Signature` header on incoming webhooks before trusting them: https://docs.paymove.io/en/webhook-signature.md
> 8. Errors are `{"status": <int>, "message": "<text>"}`. Branch on the HTTP status only — never on `message`, which is unstable and leaks internal class names.
> 9. There is no rate limiting, no HTTP 429, no HTTP 422, no `Idempotency-Key` header and no API versioning. Do not write code that handles them.
> 10. Re-POSTing an `externalId` that already exists returns HTTP 200 with the ORIGINAL `redirectUrl` and silently discards EVERY field you send — the new price, description and details are all ignored. Use `PATCH /api/pay/product/{productId}/subproduct/{externalId}` to change a price.
> 11. Webhooks fire only on `COMPLETED` by default, and `retries` defaults to `0` (no retries) unless you set it explicitly. Delivery counts as successful when the HTTP status equals `expectedCode` — the response body is never inspected.
> 12. Never fulfil an order on the `returnUrl` redirect. The checkout does not redirect there by itself: the customer has to click "back to shop", and inside the widget modal that redirect never happens. Fulfil only in the webhook handler, after verifying the signature.
> 13. Do not pin a version of `@paymove-io/sdk` — install the latest.
> 14. Full documentation index: https://docs.paymove.io/llms.txt · Copy-paste quickstart: https://docs.paymove.io/en/quickstart.md · Agent skill: https://docs.paymove.io/skill.md

# Introduction

> Integration with the Paymove platform

Take your payments into a new era. With us, you'll open up to a new audience - from traditional customers to intelligent AI systems.

Choose a modern integration and start accepting payments today with REST API, webhooks and step-by-step tutorials.

## Products

<div style={{ display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gap: '1.5rem 1rem', marginBottom: '1rem' }}>
  <div>
    <a href="/en/products/payment-gateway" style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', background: 'linear-gradient(145deg, rgba(37, 99, 235, 1) 0%, rgba(139, 92, 246, 1) 100%)', borderRadius: '12px', padding: '1.5rem', minHeight: '120px', color: '#fff', fontWeight: 600, textDecoration: 'none', fontSize: '1.2rem' }}>
      Payment Gateway
    </a>

    <p style={{ marginTop: '0.5rem', marginBottom: 0, fontSize: '0.9rem', opacity: 0.9 }}>Accept payments for products and services online.</p>
  </div>

  <div>
    <a href="/en/products/docpay" style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', background: 'linear-gradient(145deg, rgba(219, 39, 119, 1) 0%, rgba(124, 58, 237, 1) 100%)', borderRadius: '12px', padding: '1.5rem', minHeight: '120px', color: '#fff', fontWeight: 600, textDecoration: 'none', fontSize: '1.2rem' }}>
      DocPay
    </a>

    <p style={{ marginTop: '0.5rem', marginBottom: 0, fontSize: '0.9rem', opacity: 0.9 }}>Payments in documents and payment links.</p>
  </div>

  <div>
    <a href="/en/products/payment-link" style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', background: 'linear-gradient(145deg, rgba(5, 150, 105, 1) 0%, rgba(13, 148, 136, 1) 100%)', borderRadius: '12px', padding: '1.5rem', minHeight: '120px', color: '#fff', fontWeight: 600, textDecoration: 'none', fontSize: '1.2rem' }}>
      Payment Link
    </a>

    <p style={{ marginTop: '0.5rem', marginBottom: 0, fontSize: '0.9rem', opacity: 0.9 }}>Links and QR codes for payments for anything.</p>
  </div>

  <div>
    <a href="/en/products/pay-and-go" style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', background: 'linear-gradient(145deg, rgba(234, 88, 12, 1) 0%, rgba(202, 138, 4, 1) 45%, rgba(185, 28, 28, 1) 100%)', borderRadius: '12px', padding: '1.5rem', minHeight: '120px', color: '#fff', fontWeight: 600, textDecoration: 'none', fontSize: '1.2rem' }}>
      Pay\&Go 🔜
    </a>

    <p style={{ marginTop: '0.5rem', marginBottom: 0, fontSize: '0.9rem', opacity: 0.9 }}>Fast mobile and point-of-sale payments.</p>
  </div>

  <div>
    <a href="/en/products/qr-terminal" style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', background: 'linear-gradient(145deg, rgba(3, 105, 161, 1) 0%, rgba(56, 189, 248, 1) 100%)', borderRadius: '12px', padding: '1.5rem', minHeight: '120px', color: '#fff', fontWeight: 600, textDecoration: 'none', fontSize: '1.2rem' }}>
      QR Terminal 🔜
    </a>

    <p style={{ marginTop: '0.5rem', marginBottom: 0, fontSize: '0.9rem', opacity: 0.9 }}>QR-code based payment terminal - no extra hardware.</p>
  </div>

  <div>
    <a href="/en/products/ai-payments" style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', background: 'linear-gradient(145deg, rgba(99, 102, 241, 1) 0%, rgba(34, 211, 238, 1) 100%)', borderRadius: '12px', padding: '1.5rem', minHeight: '120px', color: '#fff', fontWeight: 600, textDecoration: 'none', fontSize: '1.2rem' }}>
      AI Payments 🔜
    </a>

    <p style={{ marginTop: '0.5rem', marginBottom: 0, fontSize: '0.9rem', opacity: 0.9 }}>Payments for AI agents and intelligent systems.</p>
  </div>
</div>

## Rest API

| Environment | Base URL                                 |
| ----------- | ---------------------------------------- |
| Sandbox     | `https://gateway-api.sandbox.paymove.io` |
| Production  | `https://api.paymove.io`                 |
