Skip to main content

Payment page for accepting payments

Smart Glocal payment page is a ready-to-use solution for accepting payments. It works as both an on-site checkout page and a shareable payment link via a simple API.

Payment page for your customer

Your customer places an order on your website, then gets redirected to the payment page, and we handle everything from there.



You have the options to let the customer select the preferred payment method or specify the payment method directly in the request.

info

Currently the payment page supports Russian bank cards and payments via the FPS. More payments methods coming soon!

If the first payment attempt fails, the page automatically prompts a retry at the same link—no page reload needed, so you do not lose the customer. A new payment session is created automatically, no action on your part is needed.



You will receive a daily report on successful payments.

You can select the color theme that best fits your service's interface so that the payment page feels like part of your website.

Light and dark themes supported

The same API can be used not only for an on-site checkout, but also to generate standalone payment links—for example, to share with customers directly via email, messengers, or social media.

This is particularly convenient for:

  • Email campaigns — generate a link per recipient and embed it in your mailer
  • Social media/messengers — post the link in a story, bio, or send it directly in a chat
  • Chatbots — connect the API call to your Telegram or WhatsApp bot so it issues a fresh payment link on demand
  • Manual invoicing — generate a link in Postman, copy it, send it in any way you like
Important!

Please contact your Smart Glocal manager to set up this feature for your business.

To use this feature, call the POST/payment_link method using one of the following approaches:

  • HTTP client (e.g., Postman) — send the request manually, copy payment_page_url from the response, and paste it wherever you need: an email, a social media post, a messenger chat.
  • No-code automation platform (e.g., Make or Zapier) — set up a scenario that calls the API automatically and passes the link to your mailer, Telegram bot, or any other channel.
Description is required

You should always provide a clear, detailed description of the product or service being paid for. This is required for payment processing and helps avoid disputes, chargebacks, and complications with refunds.

Each link is independent and single-use. If a payment attempt fails, the page handles retries automatically—no need to generate a new link.

How to process payments via API

Send a POST/payment_link request to create a payment link. In the request, specify the amount, currency, and (optionally) payment methods. In response, you will receive a payment link, which you can then provide to the customer.

Learn more on the request format

Request example
curl -X POST \
https://demo.smart-glocal.com/api/v1/payment_link \
-H 'content-type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"amount_details": {
"amount": 10000,
"currency": "RUB"
},
"customer": {
"reference": "customer"
},
"payment_methods": [{
"type": "faster_payment_system"
}],
"payment_options": {
"success_return_url": "https://test.dev",
"failure_return_url": "https://test.dev"
},
"metadata": {
"internal_id": "x-123-456",
"extra": "z-aaa-bbb"
},
"description": "Payment #x-123-456 by shop1.ru"
}'

Step 2. Forward the customer

By any convenient means, direct the customer to the payment page using the payment link.

Step 3. Wait for a webhook confirming the payment is ready

Wait for a ready_to_confirm webhook. This means that the payment can be performed and Smart Glocal is waiting for you to confirm.

It will contain the user identifier (customer.reference) and your identifiers (metadata), if you passed these parameters in the POST/payment_link request. The webhook also provides session.id, which you can then use to start polling the payment status (using the session/status method) if needed.

Verify that the details in the webhook are correct and send HTTP 200 OK in response.

Webhook example
curl -X POST \
https://partner.com \
-H 'content-type: application/json' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"type": "ready_to_confirm",
"session": {
"id": "ps_3230",
"status": "in_progress",
"created_at": "2024-05-27T02:03:00.000000Z",
"updated_at": "2024-05-27T02:03:00.000000Z",
"next_action": "confirm",
"acquiring_payments": [{
"id": "pm_1313",
"status": "pending",
"created_at": "2024-05-27T02:03:00.000000Z",
"customer": {
"reference": "user123"
},
"payment_details": {
"type": "card",
"card": {
"last4": "4242",
"brand": "visa"
}
},
"amount_details": {
"amount": 15000,
"currency": "rub"
},
"metadata": {
"internal_id": "x-123-456",
"extra": "z-aaa-bbb"
},
"description": "Payment #x-123-456 by shop1.ru"
}]
}
}'

Step 4. Confirm or cancel the payment

Send a session/confirm request or a session/cancel request to confirm or cancel the operation.

Step 5. Wait for a webhook with the results

Wait for a payment_finished webhook or request the payment status using the session/status method.

The result of the payment can be found in the status field of the acquiring_payments/payment_list array.

If the status is succeeded, then the payment has been successful. If the status is failed, then the payment has not been completed because of an error.

Payment statuses (status)
  • in_progress—the payment is being processed
  • pending—awaiting your confirmation (session/confirm) or cancelation (session/cancel)
  • succeeded—the payment has been completed successfully
  • failed—the payment has failed
Webhook example
curl -X POST \
https://partner.com \
-H 'content-type: application/json' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"type": "ready_to_confirm",
"session": {
"id": "ps_3230",
"status": "in_progress",
"created_at": "2024-05-27T02:03:00.000000Z",
"updated_at": "2024-05-27T02:03:00.000000Z",
"next_action": "confirm",
"acquiring_payments": [{
"id": "pm_1313",
"status": "pending",
"created_at": "2024-05-27T02:03:00.000000Z",
"customer": {
"reference": "user123"
},
"payment_details": {
"type": "card",
"card": {
"last4": "4242",
"brand": "visa"
}
},
"amount_details": {
"amount": 15000,
"currency": "rub"
},
"metadata": {
"internal_id": "x-123-456",
"extra": "z-aaa-bbb"
},
"description": "Payment #x-123-456 by shop1.ru"
}]
}
}'

Recurring payments

With the payment page, you can accept MIT recurring payments: the customer gives their consent for repeated payments and makes the initial payment. Then you can initiate recurring payments without the customer's involvement on your own schedule.

When creating a payment link, pass the is_recurrent: true value in the POST/payment_link request. When the user opens the payment link, they will see a checkbox to consent to subsequent charges.

Payment page with with the recurring payments option

If the user checks this box and the payment is successful, you will receive a token in the recurrent object of the payment_finished webhook.

How to check a token status

Request example
curl -X POST \
https://demo.smart-glocal.com/api/v1/payment_link \
-H 'content-type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"amount_details": {
"amount": 1000,
"currency": "RUB"
},
"description": "Payment for order #12345",
"link_options": {
"is_recurrent": true
},
"metadata": {
"internal_id": "x-123-456",
"extra": "z-aaa-bbb"
},
"payment_methods": [{
"type": "card"
}],
"payment_options": {
"success_return_url": "https://shop.example.com/fail",
"failure_return_url": "https://shop.example.com/success"
}
}'

How to make recurring payments

  1. Create a payment session sending a session/create request.

  2. Send a session/start/payment request with the recurrent payment type. Instead of a bank card, pass the token. Pass initiator: merchant in the recurrent object of payment_details or do not specify the initiator at all.

    Request example
    curl -X POST \
    https://demo.smart-glocal.com/api/v1/session/start/payment \
    -H 'Content-Type: application/json' \
    -H 'X-PARTNER-PROJECT: your_project_name' \
    -H 'X-PARTNER-SIGN: signature' \
    -d '{
    "session_id":"ps_3230",
    "payment_details": {
    "type": "recurrent",
    "recurrent": {
    "token": "e9876f32bcd947f79c324cf2da5726304a894f6ae2037de7705fdb3e0a134d39",
    "initiator": "merchant"
    }
    },
    "amount_details": {
    "amount": 10000,
    "currency": "RUB"
    },
    "customer": {
    "reference": "lucky"
    }
    }'
  3. Wait for a ready_to_confirm webhook.

  4. Send a session/confirm request or a session/cancel request to confirm or cancel the operation.

  5. Wait for a payment_finished webhook containing the payment status information.

Use this request to get a payment link. You can pass the payment method, order description, and amount in the request.

Request parameters

NameMandatoryTypeDescription
amount_details+objectPayment amount details
  amount+intPayment amount in decimal format. To send 100 RUB, write 10000
  currency+stringISO 4217 currency code. Case insensitive. Options: rub
customer-objectData about the customer in your system
  reference+stringCustomer identifier in your system
payment_methods-arrayPayment method details. Do not pass the array if you want the user to have access to all payment methods enabled for you.
To offer only certain payment methods, pass them. Example: "payment_methods": [{"name": "faster_payment_system"}, {"name": "card"}]
  type+stringPayment method name. Options:
- faster_payment_system—payment via the Faster Payment System
- card—payment by card
payment_options-objectAdditional payment parameters
  success_return_url-stringURL to which the user is redirected after the payment is successfully completed
  failure_return_url-stringURL to which the user is redirected if an error occurs during the payment
link_options-objectAdditional payment page parameters
  lang-stringPayment page language. Options: ru, en. Default value: ru
  theme-stringPayment page theme. Options: dark, light. Default value: light
  is_recurrent-booleanSpecifies whether the payment page offers the option to agree to recurring payments. If is_recurrent = true, a dedicated checkbox for recurring charges will be shown on the page
metadata-*Additional information. Any data you need in order to perform the operation. Returned in responses and webhooks
description-stringText to be displayed to the user on the payment page. Example: Order number 345
Request example
curl -X POST \
https://demo.smart-glocal.com/api/v1/payment_link \
-H 'content-type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"amount_details": {
"amount": 10000,
"currency": "RUB"
},
"customer": {
"reference": "customer"
},
"payment_methods": [{
"type": "faster_payment_system"
}],
"payment_options": {
"success_return_url": "https://test.dev",
"failure_return_url": "https://test.dev"
},
"metadata": {
"internal_id": "x-123-456",
"extra": "z-aaa-bbb"
},
"description": "Payment #x-123-456 by shop1.ru"
}'

Response parameters

NameMandatoryTypeDescription
order+objectOrder details
  order_id-stringPayment link ID
  payment_page_url-stringPayment link
  active_to-dateTimePayment link expiration date in ISO 8601 format
error-objectError description
Response example
{
"order": {
"order_id": "B0k84LoQwKPq",
"payment_page_url": "https://checkout-demo.smart-glocal.com/pay/ceMjRsrRNRcU4p3G4qLkqx",
"active_to": "2026-04-24 14:39:43"
}
}

Working with request signatures

Request signature

The signature is needed to verify the authenticity and integrity of requests. Smart Glocal verifies that the requests received are in fact from you (and are complete); you verify Smart Glocal's notifications the same way.

To create and verify a signature, you will need a secret key and a public key. Using your public key Smart Glocal will verify signatures of your incoming payments.

Generating a key pair

You need to generate a pair of keys on your side using the RSA signature algorithm.

Creating request body signature

The signature must be transmitted together with the request to Smart Glocal. You need to sign the request body as a whole in the form in which it is sent to Smart Glocal's server (after serializing the request body into JSON to send it over HTTP).

Use your secret key for signing the request. Create a signature using the SHA-256 algorithm. The resulting signature must then be transmitted in the Base64 format.

Verifying incoming requests from Smart Glocal

All outgoing requests from Smart Glocal are signed using Smart Glocal's own secret key.

Using Smart Glocal's public key, you need to verify the signatures of the requests coming from Smart Glocal on your side. The algorithm used is SHA-256. The signature is transmitted in the Base64 format.

Smart Glocal's public keys
Signature generation and validation examples
# Generating a private key
$ openssl genrsa -out private.pem 2048

# Generating a public key based on the private key
$ openssl rsa -in private.pem -pubout > public.pem

# Creating myfile.txt file contents
$ echo test > myfile.txt

# Generating a signature
$ openssl dgst -sha256 -sign private.pem -out sha256.sign myfile.txt

# Signature ready for transfer
$ base64 sha256.sign

# Checking the signature
$ openssl dgst -sha256 -verify public.pem -signature sha256.sign myfile.txt
Verified OK

Integration instructions

Please study the following before starting the integration process:

Sequence diagram

sequenceDiagram