1. Подготовьте аккаунт
Получите ключ и проверьте GET /balance. Пополните общий баланс через доступный интерфейс бота или кабинета. Публичный REST API не содержит метода пополнения.
2. Выберите сервис и страну
Запросите /services, затем /prices с выбранным service. Не подставляйте названия вместо ID. Проверьте count и price, но учитывайте: ответ каталога — снимок, а не резервирование номера.
Client Libraries
9 языковcurl --request GET \
--url "$LUFFY_BASE_URL"'/prices?service=tg' \
--header "Authorization: Bearer $LUFFY_API_KEY" \
--max-time 150 \
--include --fail-with-body3. Зафиксируйте намерение покупки
В своей базе создайте запись операции: уникальный UUID, service, country, maxPrice и состояние «создана». Зафиксируйте запись до сетевого запроса. Двойной клик или повтор задания должен читать эту же запись, а не создавать новый UUID.
4. Купите номер
Отправьте POST /orders. maxPrice — верхняя граница списания в RUB с точностью до копеек (не более двух знаков после запятой), не обещанная стоимость. Сохраните фактические order.id, phone и price из успешного ответа. Не показывайте номер как купленный до подтверждения.
Client Libraries
9 языковcurl --request POST \
--url "$LUFFY_BASE_URL"'/orders' \
--header "Authorization: Bearer $LUFFY_API_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: YOUR_SAVED_REQUEST_ID' \
--data '{"service":"tg","country":0,"maxPrice":50}' \
--max-time 150 \
--include --fail-with-body5. Получите код и завершите опрос
Проверяйте GET /orders/{id} с интервалом не меньше 5 секунд и общим бюджетом запросов аккаунта. Сохраняйте code строкой: «001234» не равно «1234». Завершайте опрос при completed, cancelled или error.