POST
https://larpcassa.cc/v1/payments/{id}/cancelПараметры пути
Тело запроса не нужно. Метод идемпотентен: повторный вызов для уже отменённого платежа вернёт его без ошибки.
Пример
bash
curl -X POST https://larpcassa.cc/v1/payments/pay_01k7x3m9qz2hb8c4r6t1vw5yfe/cancel -H "X-Api-Key: $LC_KEY"
Telegram-бот (aiogram)
@router.callback_query(F.data.startswith("cancel_pay:"))
async def cancel_payment(cb: CallbackQuery):
payment_id = cb.data.split(":", 1)[1]
async with aiohttp.ClientSession(headers={"X-Api-Key": LC_KEY}) as s:
async with s.post(f"https://larpcassa.cc/v1/payments/{payment_id}/cancel") as r:
data = await r.json()
if r.status == 200:
await cb.message.edit_text("Платёж отменён")
elif data["error"]["code"] == "already_paid":
await cb.answer("Платёж уже оплачен", show_alert=True)
else:
await cb.answer(data["error"]["message"], show_alert=True)Ответ 200
json
{
"id": "pay_01k7x3m9qz2hb8c4r6t1vw5yfe",
"object": "payment",
"environment": "sandbox",
"project_id": "5f0c9a3e-6b1d-4c2a-9e8f-1a2b3c4d5e6f",
"order_id": "ORDER-1042",
"status": "CANCELLED",
"amount": 1000000,
"order_amount": 1000000,
"customer_fee": 0,
"fee": 70000,
"net_amount": 930000,
"currency": "RUB",
"method": "SBP_C2B",
"description": "Заказ №1042",
"payment_url": "https://larpcassa.cc/pay/pay_01k7x3m9qz2hb8c4r6t1vw5yfe",
"success_url": "https://shop.example/success",
"fail_url": null,
"expires_at": "2026-10-14T12:30:00.000Z",
"paid_at": null,
"failure_reason": "Отменён магазином",
"settled": false,
"metadata": { "telegram_user": "123456789" },
"created_at": "2026-10-14T12:00:00.000Z"
}Ошибки
Если покупатель оплатил в момент отмены, платёж не отменяется: вы получите
409 already_paid и затем callback об успешной оплате. После успешной отмены приходит callback payment.cancelled.