takemypay API
The integration is plain REST plus one webhook. There is no SDK and none is needed: all it takes is sending a POST and verifying an HMAC signature.
Quick start
- Sign in with the link from your email — there is no password.
- Create a project and an API key inside it. The key is shown once.
- Set the project's webhook URL.
- Create a payment and send the customer to
checkout_url.
curl -X POST https://takemypay.net/api/v1/payments \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"external_order_id": "order-123",
"amount": "1000.00",
"description": "Order #123",
"return_url": "https://shop.example.com/ok",
"fail_url": "https://shop.example.com/fail"
}' The response carries the checkout page address:
{
"id": "6f1c8f7e-...",
"checkout_url": "https://takemypay.net/c/8f3a...",
"status": "pending",
"expires_at": "2026-05-19T12:30:00Z",
"warnings": []
} From there — get a key and move on to Creating a payment.
Authentication
Every public API call is authenticated with an
Authorization: Bearer YOUR_KEY header.
A key belongs to a project, not to the account. A project owns its own webhook
URL and its own set of keys, so the key decides where the notification goes and which namespace
your external_order_id lives in. Keys are created on the
projects page.
A project may hold several active keys — that is how rotation works. Webhooks are always signed
with the project's newest active key, and the X-Key-Prefix header
tells you which one was used.
We store only the SHA-256 hash of a key. A lost key cannot be recovered — only replaced by a new one and revoked.
Test mode
A new account starts in test mode. Keys work immediately, but every payment is a drill: instead of a card form or an SBP QR code, the checkout page shows a simulator with "succeed" and "decline" buttons. No card is charged and nothing settles to your balance.
Test payments still fire real webhooks, so the whole integration can be built
and verified before the account is activated. Tell them apart by the is_test field:
a payment with is_test: true is an exercise — never fulfil an order on it.
Going live is an activation request from the dashboard.
How the money works
- The fee is 18% of the gross payment amount.
- Roubles convert to dollars when the payment succeeds, at the Central Bank of Russia rate plus a 7% markup. The applied rate is frozen into the payment and never recalculated.
- Payouts are USDT on TRC20, with a $100 threshold and a $3 fee per transfer.
By default the merchant pays the fee: the amount you pass is what the customer is
charged, and you receive the remainder. The mode can be switched so that the customer pays the
fee instead — then amount is your net, the customer is charged more, and you
receive exactly what you passed. See Creating a payment.
Next
- Creating a payment — request fields, idempotency, statuses.
- Checkout page — what the customer sees and how long a payment lives.
- Webhooks — signature, replay defence, retry schedule.
- Errors — response codes and what to do about them.